Skip to content

Commit 69b3a93

Browse files
committed
improve code
1 parent d87dfc2 commit 69b3a93

File tree

5 files changed

+36
-16
lines changed

5 files changed

+36
-16
lines changed

models/repo.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,28 @@ func (repo *Repository) CanUserFork(user *User) (bool, error) {
742742
return false, nil
743743
}
744744

745+
// CanUserDelete returns true if user could delete the repository
746+
func (repo *Repository) CanUserDelete(user *User) (bool, error) {
747+
if user.IsAdmin || user.ID == repo.OwnerID {
748+
return true, nil
749+
}
750+
751+
if err := repo.GetOwner(); err != nil {
752+
return false, err
753+
}
754+
755+
if repo.Owner.IsOrganization() {
756+
isOwner, err := repo.Owner.IsOwnedBy(user.ID)
757+
if err != nil {
758+
return false, err
759+
} else if isOwner {
760+
return true, nil
761+
}
762+
}
763+
764+
return false, nil
765+
}
766+
745767
// CanEnablePulls returns true if repository meets the requirements of accepting pulls.
746768
func (repo *Repository) CanEnablePulls() bool {
747769
return !repo.IsMirror && !repo.IsEmpty

routers/admin/repos.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func DeleteRepo(ctx *context.Context) {
3939
return
4040
}
4141

42-
if err := repo_service.DeleteRepository(ctx.User, repo.MustOwner().ID, repo.ID); err != nil {
42+
if err := repo_service.DeleteRepository(ctx.User, repo); err != nil {
4343
ctx.ServerError("DeleteRepository", err)
4444
return
4545
}

routers/api/v1/repo/repo.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -870,18 +870,16 @@ func Delete(ctx *context.APIContext) {
870870
owner := ctx.Repo.Owner
871871
repo := ctx.Repo.Repository
872872

873-
if owner.IsOrganization() && !ctx.User.IsAdmin {
874-
isOwner, err := owner.IsOwnedBy(ctx.User.ID)
875-
if err != nil {
876-
ctx.Error(500, "IsOwnedBy", err)
877-
return
878-
} else if !isOwner {
879-
ctx.Error(403, "", "Given user is not owner of organization.")
880-
return
881-
}
873+
canDelete, err := repo.CanUserDelete(ctx.User)
874+
if err != nil {
875+
ctx.Error(500, "CanUserDelete", err)
876+
return
877+
} else if !canDelete {
878+
ctx.Error(403, "", "Given user is not owner of organization.")
879+
return
882880
}
883881

884-
if err := repo_service.DeleteRepository(ctx.User, owner.ID, repo.ID); err != nil {
882+
if err := repo_service.DeleteRepository(ctx.User, repo); err != nil {
885883
ctx.Error(500, "DeleteRepository", err)
886884
return
887885
}

routers/repo/setting.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"code.gitea.io/gitea/routers/utils"
2727
"code.gitea.io/gitea/services/mailer"
2828
mirror_service "code.gitea.io/gitea/services/mirror"
29+
repo_service "code.gitea.io/gitea/services/repository"
2930

3031
"github.com/unknwon/com"
3132
"mvdan.cc/xurls/v2"
@@ -407,7 +408,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
407408
return
408409
}
409410

410-
if err := repo_service.DeleteRepository(ctx.User, ctx.Repo.Owner.ID, repo.ID); err != nil {
411+
if err := repo_service.DeleteRepository(ctx.User, ctx.Repo.Repository); err != nil {
411412
ctx.ServerError("DeleteRepository", err)
412413
return
413414
}

services/repository/repository.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,12 @@ func ForkRepository(doer, u *models.User, oldRepo *models.Repository, name, desc
4141
}
4242

4343
// DeleteRepository deletes a repository for a user or organization.
44-
func DeleteRepository(doer *models.User, uid, repoID int64) error {
45-
repo, err := models.GetRepositoryByID(repoID)
46-
if err != nil {
44+
func DeleteRepository(doer *models.User, repo *models.Repository) error {
45+
if err := repo.GetOwner(); err != nil {
4746
return err
4847
}
4948

50-
if err := models.DeleteRepository(doer, uid, repoID); err != nil {
49+
if err := models.DeleteRepository(doer, repo.OwnerID, repo.ID); err != nil {
5150
return err
5251
}
5352

0 commit comments

Comments
 (0)