[v15.0/forgejo] fix: allow repository deletion when referenced by a repo-specific access token (#11933)

**Backport:** https://codeberg.org/forgejo/forgejo/pulls/11927

Fixes #11919.

Co-authored-by: Mathieu Fenniak <mathieu@fenniak.net>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11933
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
Co-committed-by: forgejo-backport-action <forgejo-backport-action@noreply.codeberg.org>
This commit is contained in:
forgejo-backport-action 2026-04-01 17:35:43 +02:00 committed by Gusted
parent e919aedcec
commit d60af095dd
2 changed files with 19 additions and 0 deletions

View file

@ -13,6 +13,7 @@ import (
activities_model "forgejo.org/models/activities"
admin_model "forgejo.org/models/admin"
asymkey_model "forgejo.org/models/asymkey"
auth_model "forgejo.org/models/auth"
"forgejo.org/models/db"
git_model "forgejo.org/models/git"
issues_model "forgejo.org/models/issues"
@ -189,6 +190,7 @@ func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, repoID
&actions_model.ActionUser{RepoID: repoID},
&repo_model.RepoArchiveDownloadCount{RepoID: repoID},
&actions_model.ActionRunnerToken{RepoID: optional.Some(repoID)},
&auth_model.AccessTokenResourceRepo{RepoID: repoID},
); err != nil {
return fmt.Errorf("deleteBeans: %w", err)
}

View file

@ -6,6 +6,7 @@ package repository
import (
"testing"
auth_model "forgejo.org/models/auth"
"forgejo.org/models/db"
repo_model "forgejo.org/models/repo"
"forgejo.org/models/unit"
@ -62,3 +63,19 @@ func TestDeleteRepository(t *testing.T) {
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
require.NoError(t, DeleteRepository(t.Context(), doer, repo, false))
}
func TestDeleteRepositoryWithReferences(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
token1 := unittest.AssertExistsAndLoadBean(t, &auth_model.AccessToken{ID: 1})
err := db.Insert(t.Context(), &auth_model.AccessTokenResourceRepo{
TokenID: token1.ID,
RepoID: repo.ID,
})
require.NoError(t, err)
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
require.NoError(t, DeleteRepository(t.Context(), doer, repo, false))
}