diff options
author | Unknwon <u@gogs.io> | 2015-08-08 17:24:10 +0800 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2015-08-08 17:24:10 +0800 |
commit | e3bdfd51ff4a3987c9c14d46d4c145f550b42d01 (patch) | |
tree | cb9629ce61cbc79e99fe9b910e92890e0dea4117 | |
parent | 9db4acc62e2d253c21ce9aed2e21003ff235d5b5 (diff) | |
download | gitea-e3bdfd51ff4a3987c9c14d46d4c145f550b42d01.tar.gz gitea-e3bdfd51ff4a3987c9c14d46d4c145f550b42d01.zip |
better fork permission check
-rw-r--r-- | models/repo.go | 7 | ||||
-rw-r--r-- | routers/repo/pull.go | 6 | ||||
-rw-r--r-- | templates/repo/pulls/fork.tmpl | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/models/repo.go b/models/repo.go index 910ccee38c..8135bc57da 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1421,6 +1421,13 @@ func IsStaring(uid, repoId int64) bool { // \___ / \____/|__| |__|_ \ // \/ \/ +// HasForkedRepo checks if given user has already forked a repository with given ID. +func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) { + repo := new(Repository) + has, _ := x.Where("owner_id=? AND fork_id=?", ownerID, repoID).Get(repo) + return repo, has +} + func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Repository, err error) { repo := &Repository{ OwnerId: u.Id, diff --git a/routers/repo/pull.go b/routers/repo/pull.go index cb5167033c..a4ebb91a39 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -78,6 +78,12 @@ func ForkPost(ctx *middleware.Context, form auth.CreateRepoForm) { return } + repo, has := models.HasForkedRepo(ctxUser.Id, forkRepo.Id) + if has { + ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + repo.Name) + return + } + // Check ownership of organization. if ctxUser.IsOrganization() { if !ctxUser.IsOwnedBy(ctx.User.Id) { diff --git a/templates/repo/pulls/fork.tmpl b/templates/repo/pulls/fork.tmpl index acac9040f0..2f76cf002a 100644 --- a/templates/repo/pulls/fork.tmpl +++ b/templates/repo/pulls/fork.tmpl @@ -24,11 +24,13 @@ {{.SignedUser.Name}} </div> {{range .Orgs}} + {{if .IsOwnedBy $.SignedUser.Id}} <div class="item" data-value="{{.Id}}"> <img class="ui mini avatar image" src="{{.AvatarLink}}"> {{.Name}} </div> {{end}} + {{end}} </div> </div> </div> |