]> source.dussan.org Git - gitea.git/commitdiff
Webhook delivery locking & Hide repo for org members if they don't have access
authorUnknwon <joe2010xtmf@163.com>
Thu, 9 Oct 2014 23:01:22 +0000 (19:01 -0400)
committerUnknwon <joe2010xtmf@163.com>
Thu, 9 Oct 2014 23:01:22 +0000 (19:01 -0400)
.bra.toml
models/repo.go
models/webhook.go
templates/org/home.tmpl

index df2e10e6ffc196d38f45dfa8ab04979bcf535547..d0229e8ab92ac5ef793734b44891ab8a007a22b2 100644 (file)
--- a/.bra.toml
+++ b/.bra.toml
@@ -1,5 +1,8 @@
 [run]
-init_cmds = [["./gogs", "web"]]
+init_cmds = [
+       ["grep", "-rn", "FIXME", "."],
+       ["./gogs", "web"]
+]
 watch_all = true
 watch_dirs = [
        "$WORKDIR/conf/locale",
index 3a26c88f0385ceb74018df78d8074f39e60fc403..c3329951985c1f3719fe572e12e9e7ade419977a 100644 (file)
@@ -166,7 +166,9 @@ type Repository struct {
 }
 
 func (repo *Repository) GetOwner() (err error) {
-       repo.Owner, err = GetUserById(repo.OwnerId)
+       if repo.Owner == nil {
+               repo.Owner, err = GetUserById(repo.OwnerId)
+       }
        return err
 }
 
@@ -175,6 +177,14 @@ func (repo *Repository) GetMirror() (err error) {
        return err
 }
 
+func (repo *Repository) HasAccess(uname string) bool {
+       if err := repo.GetOwner(); err != nil {
+               return false
+       }
+       has, _ := HasAccess(uname, path.Join(repo.Owner.Name, repo.Name), READABLE)
+       return has
+}
+
 // DescriptionHtml does special handles to description and return HTML string.
 func (repo *Repository) DescriptionHtml() template.HTML {
        sanitize := func(s string) string {
index 9508c98a5e68f1dff44e9ea1979ec56c3c97d517..ac0c24097777d9df8a6edd288019a4fe33257c81 100644 (file)
@@ -235,8 +235,22 @@ func UpdateHookTask(t *HookTask) error {
        return err
 }
 
+var (
+       // Prevent duplicate deliveries.
+       // This happens with massive hook tasks cannot finish delivering
+       // before next shooting starts.
+       isShooting = false
+)
+
 // DeliverHooks checks and delivers undelivered hooks.
+// FIXME: maybe can use goroutine to shoot a number of them at same time?
 func DeliverHooks() {
+       if isShooting {
+               return
+       }
+       isShooting = true
+       defer func() { isShooting = false }()
+
        tasks := make([]*HookTask, 0, 10)
        timeout := time.Duration(setting.WebhookDeliverTimeout) * time.Second
        x.Where("is_delivered=?", false).Iterate(new(HookTask),
@@ -255,7 +269,7 @@ func DeliverHooks() {
 
                        t.IsDelivered = true
 
-                       // TODO: record response.
+                       // FIXME: record response.
                        switch t.Type {
                        case GOGS:
                                {
index a2517a225fbf28bdcce87dd52f9f8ced809cb585..bb160b57baacbfb3b57f407efd91db4957e095e1 100644 (file)
@@ -27,7 +27,7 @@
         </div>
         <div id="org-repo-list">
                        {{range .Repos}}
-                               {{if or $isMember (not .IsPrivate)}}
+                               {{if .HasAccess $.SignedUser.Name}}
                                <div class="org-repo-item">
                     <ul class="org-repo-status right">
                         <li><i class="octicon octicon-star"></i> {{.NumStars}}</li>