mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-27 04:07:08 +00:00
Prevent double-login for Git HTTP and LFS and simplify login (#15303)
* Prevent double-login for Git HTTP and LFS and simplify login There are a number of inconsistencies with our current methods for logging in for git and lfs. The first is that there is a double login process. This is particularly evident in 1.13 where there are no less than 4 hash checks for basic authentication due to the previous IsPasswordSet behaviour. This duplicated code had individual inconsistencies that were not helpful and caused confusion. This PR does the following: * Remove the specific login code from the git and lfs handlers except for the lfs special bearer token * Simplify the meaning of DisableBasicAuthentication to allow Token and Oauth2 sign-in. * The removal of the specific code from git and lfs means that these both now have the same login semantics and can - if not DisableBasicAuthentication - login from external services. Further it allows Oauth2 token authentication as per our standard mechanisms. * The change in the recovery handler prevents the service from re-attempting to login - primarily because this could easily cause a further panic and it is wasteful. * add test Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
ba526ceffe
commit
17c5c654a5
10 changed files with 292 additions and 221 deletions
|
@ -15,6 +15,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"code.gitea.io/gitea/models"
|
||||
"code.gitea.io/gitea/modules/auth/sso"
|
||||
"code.gitea.io/gitea/modules/context"
|
||||
"code.gitea.io/gitea/modules/httpcache"
|
||||
|
@ -171,8 +172,19 @@ func Recovery() func(next http.Handler) http.Handler {
|
|||
},
|
||||
}
|
||||
|
||||
// Get user from session if logged in.
|
||||
user, _ := sso.SignedInUser(req, w, &store, sessionStore)
|
||||
var user *models.User
|
||||
if apiContext := context.GetAPIContext(req); apiContext != nil {
|
||||
user = apiContext.User
|
||||
}
|
||||
if user == nil {
|
||||
if ctx := context.GetContext(req); ctx != nil {
|
||||
user = ctx.User
|
||||
}
|
||||
}
|
||||
if user == nil {
|
||||
// Get user from session if logged in - do not attempt to sign-in
|
||||
user = sso.SessionUser(sessionStore)
|
||||
}
|
||||
if user != nil {
|
||||
store.Data["IsSigned"] = true
|
||||
store.Data["SignedUser"] = user
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue