mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-21 21:05:18 +02:00
Support clone private repository in runner
This commit is contained in:
parent
d8b401ab06
commit
f55253e81d
@ -20,6 +20,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models/auth"
|
"code.gitea.io/gitea/models/auth"
|
||||||
|
bots_model "code.gitea.io/gitea/models/bots"
|
||||||
"code.gitea.io/gitea/models/perm"
|
"code.gitea.io/gitea/models/perm"
|
||||||
access_model "code.gitea.io/gitea/models/perm/access"
|
access_model "code.gitea.io/gitea/models/perm/access"
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
@ -164,7 +165,7 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.IsBasicAuth && ctx.Data["IsApiToken"] != true {
|
if ctx.IsBasicAuth && ctx.Data["IsApiToken"] != true && ctx.Data["IsBotToken"] != true {
|
||||||
_, err = auth.GetTwoFactorByUID(ctx.Doer.ID)
|
_, err = auth.GetTwoFactorByUID(ctx.Doer.ID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// TODO: This response should be changed to "invalid credentials" for security reasons once the expectation behind it (creating an app token to authenticate) is properly documented
|
// TODO: This response should be changed to "invalid credentials" for security reasons once the expectation behind it (creating an app token to authenticate) is properly documented
|
||||||
@ -182,21 +183,33 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if repoExist {
|
if repoExist {
|
||||||
p, err := access_model.GetUserRepoPermission(ctx, repo, ctx.Doer)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("GetUserRepoPermission", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Because of special ref "refs/for" .. , need delay write permission check
|
// Because of special ref "refs/for" .. , need delay write permission check
|
||||||
if git.SupportProcReceive {
|
if git.SupportProcReceive {
|
||||||
accessMode = perm.AccessModeRead
|
accessMode = perm.AccessModeRead
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ctx.Data["IsBotToken"] == true {
|
||||||
|
taskID := ctx.Data["BotTaskID"].(int64)
|
||||||
|
task, err := bots_model.GetTaskByID(ctx, taskID)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("GetTaskByID", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if task.RepoID != repo.ID {
|
||||||
|
ctx.PlainText(http.StatusForbidden, "User permission denied")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
p, err := access_model.GetUserRepoPermission(ctx, repo, ctx.Doer)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("GetUserRepoPermission", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
if !p.CanAccess(accessMode, unitType) {
|
if !p.CanAccess(accessMode, unitType) {
|
||||||
ctx.PlainText(http.StatusForbidden, "User permission denied")
|
ctx.PlainText(http.StatusForbidden, "User permission denied")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !isPull && repo.IsMirror {
|
if !isPull && repo.IsMirror {
|
||||||
ctx.PlainText(http.StatusForbidden, "mirror repository is read-only")
|
ctx.PlainText(http.StatusForbidden, "mirror repository is read-only")
|
||||||
|
@ -114,6 +114,9 @@ func (b *Basic) Verify(req *http.Request, w http.ResponseWriter, store DataStore
|
|||||||
if err == nil && task != nil && task.Status.IsRunning() {
|
if err == nil && task != nil && task.Status.IsRunning() {
|
||||||
log.Trace("Basic Authorization: Valid AccessToken for task[%d]", task.ID)
|
log.Trace("Basic Authorization: Valid AccessToken for task[%d]", task.ID)
|
||||||
|
|
||||||
|
store.GetData()["IsBotToken"] = true
|
||||||
|
store.GetData()["BotTaskID"] = task.ID
|
||||||
|
|
||||||
return bots_model.NewBotUser()
|
return bots_model.NewBotUser()
|
||||||
} else {
|
} else {
|
||||||
log.Error("GetRunnerByToken: %v", err)
|
log.Error("GetRunnerByToken: %v", err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user