Browse Source

better fork permission check

Unknwon 9 years ago
parent
commit
e3bdfd51ff
3 changed files with 15 additions and 0 deletions
  1. 7 0
      models/repo.go
  2. 6 0
      routers/repo/pull.go
  3. 2 0
      templates/repo/pulls/fork.tmpl

+ 7 - 0
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,

+ 6 - 0
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) {

+ 2 - 0
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>