MCPcopy Create free account
hub / github.com/daodst/chat / login

Method login

server/session.go:311–369  ·  view source on GitHub ↗

Authenticate

(msg *ClientComMessage)

Source from the content-addressed store, hash-verified

309
310// Authenticate
311func (s *Session) login(msg *ClientComMessage) {
312 var uid types.Uid
313 var expires time.Time
314 var err error
315
316 if !s.uid.IsZero() {
317 s.QueueOut(ErrAlreadyAuthenticated(msg.Login.Id, "", msg.timestamp))
318 return
319
320 } else if msg.Login.Scheme == "" || msg.Login.Scheme == "basic" {
321 uid, err = store.Users.Login(s.appid, msg.Login.Scheme, msg.Login.Secret)
322 if err != nil {
323 // DB error
324 log.Println(err)
325 s.QueueOut(ErrUnknown(msg.Login.Id, "", msg.timestamp))
326 return
327 } else if uid.IsZero() {
328 // Invalid login or password
329 s.QueueOut(ErrAuthFailed(msg.Login.Id, "", msg.timestamp))
330 return
331 }
332 } else if msg.Login.Scheme == "token" {
333 if uid, expires = checkSecurityToken(msg.Login.Secret); uid.IsZero() {
334 s.QueueOut(ErrAuthFailed(msg.Login.Id, "", msg.timestamp))
335 return
336 }
337 } else {
338 s.QueueOut(ErrAuthUnknownScheme(msg.Login.Id, "", msg.timestamp))
339 return
340 }
341
342 s.uid = uid
343 s.tag = msg.Login.Tag
344 if s.tag == "" {
345 s.tag = TAG_UNDEF
346 }
347
348 expireIn := time.Duration(msg.Login.ExpireIn)
349 if expireIn <= 0 || expireIn > TOKEN_LIFETIME_MAX {
350 expireIn = TOKEN_LIFETIME_DEFAULT
351 }
352
353 newExpires := time.Now().Add(expireIn).UTC().Round(time.Second)
354 if !expires.IsZero() && expires.Before(newExpires) {
355 newExpires = expires
356 }
357 params := map[string]interface{}{
358 "uid": uid.UserId(),
359 "expires": newExpires,
360 "token": makeSecurityToken(uid, expires)}
361
362 s.QueueOut(&ServerComMessage{Ctrl: &MsgServerCtrl{
363 Id: msg.Login.Id,
364 Code: http.StatusOK,
365 Text: http.StatusText(http.StatusOK),
366 Timestamp: msg.timestamp,
367 Params: params}})
368

Callers 1

dispatchMethod · 0.95

Calls 7

QueueOutMethod · 0.95
ErrAlreadyAuthenticatedFunction · 0.85
ErrUnknownFunction · 0.85
ErrAuthFailedFunction · 0.85
ErrAuthUnknownSchemeFunction · 0.85
AddMethod · 0.80
LoginMethod · 0.45

Tested by

no test coverage detected