Skip to content

Commit 0fe9f93

Browse files
authored
Check the token's owner and repository when registering a runner (#30406)
Fix #30378
1 parent 96d31fe commit 0fe9f93

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

models/organization/org.go

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"strings"
1111

12+
actions_model "code.gitea.io/gitea/models/actions"
1213
"code.gitea.io/gitea/models/db"
1314
"code.gitea.io/gitea/models/perm"
1415
repo_model "code.gitea.io/gitea/models/repo"
@@ -402,6 +403,8 @@ func DeleteOrganization(ctx context.Context, org *Organization) error {
402403
&TeamInvite{OrgID: org.ID},
403404
&secret_model.Secret{OwnerID: org.ID},
404405
&user_model.Blocking{BlockerID: org.ID},
406+
&actions_model.ActionRunner{OwnerID: org.ID},
407+
&actions_model.ActionRunnerToken{OwnerID: org.ID},
405408
); err != nil {
406409
return fmt.Errorf("DeleteBeans: %w", err)
407410
}

routers/api/actions/runner/runner.go

+14
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"net/http"
1010

1111
actions_model "code.gitea.io/gitea/models/actions"
12+
repo_model "code.gitea.io/gitea/models/repo"
13+
user_model "code.gitea.io/gitea/models/user"
1214
"code.gitea.io/gitea/modules/actions"
1315
"code.gitea.io/gitea/modules/log"
1416
"code.gitea.io/gitea/modules/util"
@@ -52,6 +54,18 @@ func (s *Service) Register(
5254
return nil, errors.New("runner registration token has been invalidated, please use the latest one")
5355
}
5456

57+
if runnerToken.OwnerID > 0 {
58+
if _, err := user_model.GetUserByID(ctx, runnerToken.OwnerID); err != nil {
59+
return nil, errors.New("owner of the token not found")
60+
}
61+
}
62+
63+
if runnerToken.RepoID > 0 {
64+
if _, err := repo_model.GetRepositoryByID(ctx, runnerToken.RepoID); err != nil {
65+
return nil, errors.New("repository of the token not found")
66+
}
67+
}
68+
5569
labels := req.Msg.Labels
5670
// TODO: agent_labels should be removed from pb after Gitea 1.20 released.
5771
// Old version runner's agent_labels slice is not empty and labels slice is empty.

services/repository/delete.go

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, repoID
163163
&actions_model.ActionScheduleSpec{RepoID: repoID},
164164
&actions_model.ActionSchedule{RepoID: repoID},
165165
&actions_model.ActionArtifact{RepoID: repoID},
166+
&actions_model.ActionRunnerToken{RepoID: repoID},
166167
); err != nil {
167168
return fmt.Errorf("deleteBeans: %w", err)
168169
}

services/user/delete.go

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func deleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)
9494
&actions_model.ActionRunner{OwnerID: u.ID},
9595
&user_model.Blocking{BlockerID: u.ID},
9696
&user_model.Blocking{BlockeeID: u.ID},
97+
&actions_model.ActionRunnerToken{OwnerID: u.ID},
9798
); err != nil {
9899
return fmt.Errorf("deleteBeans: %w", err)
99100
}

0 commit comments

Comments
 (0)