From a5a112425b8df00554c812ebad487dfee8a298ac Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 20 Oct 2022 15:57:24 +0800 Subject: [PATCH] Support clone private repository from runner --- services/auth/basic.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/services/auth/basic.go b/services/auth/basic.go index 9b32ad29af..a339be2ae7 100644 --- a/services/auth/basic.go +++ b/services/auth/basic.go @@ -10,6 +10,7 @@ import ( "strings" auth_model "code.gitea.io/gitea/models/auth" + bots_model "code.gitea.io/gitea/models/bots" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/base" "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") } + // check oauth2 token uid := CheckOAuthAccessToken(authToken) if uid != 0 { 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 } + // check personal access token token, err := auth_model.GetAccessTokenBySHA(authToken) if err == nil { 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) } + // 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 { return nil }