Răsfoiți Sursa

Webhook delivery locking & Hide repo for org members if they don't have access

Unknwon 10 ani în urmă
părinte
comite
79262173a6
4 a modificat fișierele cu 31 adăugiri și 4 ștergeri
  1. 4 1
      .bra.toml
  2. 11 1
      models/repo.go
  3. 15 1
      models/webhook.go
  4. 1 1
      templates/org/home.tmpl

+ 4 - 1
.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",

+ 11 - 1
models/repo.go

@@ -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 {

+ 15 - 1
models/webhook.go

@@ -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:
 				{

+ 1 - 1
templates/org/home.tmpl

@@ -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>