summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2015-08-08 17:24:10 +0800
committerUnknwon <u@gogs.io>2015-08-08 17:24:10 +0800
commite3bdfd51ff4a3987c9c14d46d4c145f550b42d01 (patch)
treecb9629ce61cbc79e99fe9b910e92890e0dea4117
parent9db4acc62e2d253c21ce9aed2e21003ff235d5b5 (diff)
downloadgitea-e3bdfd51ff4a3987c9c14d46d4c145f550b42d01.tar.gz
gitea-e3bdfd51ff4a3987c9c14d46d4c145f550b42d01.zip
better fork permission check
-rw-r--r--models/repo.go7
-rw-r--r--routers/repo/pull.go6
-rw-r--r--templates/repo/pulls/fork.tmpl2
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>