mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
// Copyright 2019 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package auth |
|
|
|
import ( |
|
"net/http" |
|
|
|
user_model "code.gitea.io/gitea/models/user" |
|
"code.gitea.io/gitea/modules/log" |
|
) |
|
|
|
// Ensure the struct implements the interface. |
|
var ( |
|
_ Method = &Session{} |
|
) |
|
|
|
// Session checks if there is a user uid stored in the session and returns the user |
|
// object for that uid. |
|
type Session struct{} |
|
|
|
// 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. |
|
func (s *Session) Verify(req *http.Request, w http.ResponseWriter, store DataStore, sess SessionStore) (*user_model.User, error) { |
|
if sess == nil { |
|
return nil, nil |
|
} |
|
|
|
// Get user ID |
|
uid := sess.Get("uid") |
|
if uid == nil { |
|
return nil, nil |
|
} |
|
log.Trace("Session Authorization: Found user[%d]", uid) |
|
|
|
id, ok := uid.(int64) |
|
if !ok { |
|
return nil, nil |
|
} |
|
|
|
// Get user object |
|
user, err := user_model.GetUserByID(req.Context(), id) |
|
if err != nil { |
|
if !user_model.IsErrUserNotExist(err) { |
|
log.Error("GetUserByID: %v", err) |
|
// Return the err as-is to keep current signed-in session, in case the err is something like context.Canceled. Otherwise non-existing user (nil, nil) will make the caller clear the signed-in session. |
|
return nil, err |
|
} |
|
return nil, nil |
|
} |
|
|
|
log.Trace("Session Authorization: Logged in user %-v", user) |
|
return user, nil |
|
}
|
|
|