2021-06-09 20:53:16 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package auth
import (
"net/http"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2021-06-09 20:53:16 +03:00
"code.gitea.io/gitea/modules/log"
)
// Ensure the struct implements the interface.
var (
2021-07-24 13:16:34 +03:00
_ Method = & Session { }
_ Named = & Session { }
2021-06-09 20:53:16 +03:00
)
// Session checks if there is a user uid stored in the session and returns the user
// object for that uid.
2022-01-20 20:46:10 +03:00
type Session struct { }
2021-06-09 20:53:16 +03:00
// Name represents the name of auth method
func ( s * Session ) Name ( ) string {
return "session"
}
// Verify checks if there is a user uid stored in the session and returns the user
// object for that uid.
// Returns nil if there is no user uid stored in the session.
2021-11-24 12:49:20 +03:00
func ( s * Session ) Verify ( req * http . Request , w http . ResponseWriter , store DataStore , sess SessionStore ) * user_model . User {
2021-06-09 20:53:16 +03:00
user := SessionUser ( sess )
if user != nil {
return user
}
return nil
}
// SessionUser returns the user object corresponding to the "uid" session variable.
2021-11-24 12:49:20 +03:00
func SessionUser ( sess SessionStore ) * user_model . User {
2021-06-09 20:53:16 +03:00
// Get user ID
uid := sess . Get ( "uid" )
if uid == nil {
return nil
}
log . Trace ( "Session Authorization: Found user[%d]" , uid )
id , ok := uid . ( int64 )
if ! ok {
return nil
}
// Get user object
2021-11-24 12:49:20 +03:00
user , err := user_model . GetUserByID ( id )
2021-06-09 20:53:16 +03:00
if err != nil {
2021-11-24 12:49:20 +03:00
if ! user_model . IsErrUserNotExist ( err ) {
2021-06-09 20:53:16 +03:00
log . Error ( "GetUserById: %v" , err )
}
return nil
}
log . Trace ( "Session Authorization: Logged in user %-v" , user )
return user
}