Support clone private repository from runner

This commit is contained in:
Lunny Xiao 2022-10-20 15:57:24 +08:00 committed by Jason Song
parent b65e263f92
commit a5a112425b

View File

@ -10,6 +10,7 @@ import (
"strings" "strings"
auth_model "code.gitea.io/gitea/models/auth" auth_model "code.gitea.io/gitea/models/auth"
bots_model "code.gitea.io/gitea/models/bots"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
@ -71,6 +72,7 @@ func (b *Basic) Verify(req *http.Request, w http.ResponseWriter, store DataStore
log.Trace("Basic Authorization: Attempting login with username as token") log.Trace("Basic Authorization: Attempting login with username as token")
} }
// check oauth2 token
uid := CheckOAuthAccessToken(authToken) uid := CheckOAuthAccessToken(authToken)
if uid != 0 { if uid != 0 {
log.Trace("Basic Authorization: Valid OAuthAccessToken for user[%d]", uid) log.Trace("Basic Authorization: Valid OAuthAccessToken for user[%d]", uid)
@ -85,6 +87,7 @@ func (b *Basic) Verify(req *http.Request, w http.ResponseWriter, store DataStore
return u return u
} }
// check personal access token
token, err := auth_model.GetAccessTokenBySHA(authToken) token, err := auth_model.GetAccessTokenBySHA(authToken)
if err == nil { if err == nil {
log.Trace("Basic Authorization: Valid AccessToken for user[%d]", uid) log.Trace("Basic Authorization: Valid AccessToken for user[%d]", uid)
@ -105,6 +108,31 @@ func (b *Basic) Verify(req *http.Request, w http.ResponseWriter, store DataStore
log.Error("GetAccessTokenBySha: %v", err) log.Error("GetAccessTokenBySha: %v", err)
} }
// check runner token
runner, err := bots_model.GetRunnerByToken(authToken)
if err == nil {
log.Trace("Basic Authorization: Valid AccessToken for runner[%d]", runner.ID)
if runner.OwnerID > 0 {
u, err := user_model.GetUserByID(runner.OwnerID)
if err != nil {
log.Error("GetUserByID: %v", err)
return nil
}
return u
}
// FIXME: for a system wide runner, runner act as admin?? Or we should have a bot account
u, err := user_model.GetAdminUser()
if err != nil {
log.Error("GetUserByID: %v", err)
return nil
}
return u
} else {
log.Error("GetRunnerByToken: %v", err)
}
if !setting.Service.EnableBasicAuth { if !setting.Service.EnableBasicAuth {
return nil return nil
} }