Skip to content

Commit fe7caa0

Browse files
GiteaBotZettat123
andauthored
Check IsActionsToken for LFS authentication (#23841) (#23875)
Backport #23841 by @Zettat123 Close #23824 Actions cannot fetch LFS objects from private repos because we don't check if the user is the `ActionUser`. Co-authored-by: Zettat123 <[email protected]>
1 parent 026167f commit fe7caa0

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

services/lfs/server.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"strconv"
1919
"strings"
2020

21+
actions_model "code.gitea.io/gitea/models/actions"
2122
git_model "code.gitea.io/gitea/models/git"
2223
"code.gitea.io/gitea/models/perm"
2324
access_model "code.gitea.io/gitea/models/perm/access"
@@ -495,10 +496,27 @@ func authenticate(ctx *context.Context, repository *repo_model.Repository, autho
495496
accessMode = perm.AccessModeWrite
496497
}
497498

499+
if ctx.Data["IsActionsToken"] == true {
500+
taskID := ctx.Data["ActionsTaskID"].(int64)
501+
task, err := actions_model.GetTaskByID(ctx, taskID)
502+
if err != nil {
503+
log.Error("Unable to GetTaskByID for task[%d] Error: %v", taskID, err)
504+
return false
505+
}
506+
if task.RepoID != repository.ID {
507+
return false
508+
}
509+
510+
if task.IsForkPullRequest {
511+
return accessMode <= perm.AccessModeRead
512+
}
513+
return accessMode <= perm.AccessModeWrite
514+
}
515+
498516
// ctx.IsSigned is unnecessary here, this will be checked in perm.CanAccess
499517
perm, err := access_model.GetUserRepoPermission(ctx, repository, ctx.Doer)
500518
if err != nil {
501-
log.Error("Unable to GetUserRepoPermission for user %-v in repo %-v Error: %v", ctx.Doer, repository)
519+
log.Error("Unable to GetUserRepoPermission for user %-v in repo %-v Error: %v", ctx.Doer, repository, err)
502520
return false
503521
}
504522

0 commit comments

Comments
 (0)