Browse Source

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

tags/v0.9.99
Unknwon 9 years ago
parent
commit
79262173a6
4 changed files with 31 additions and 4 deletions
  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 View File

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

+ 15
- 1
models/webhook.go View 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:
{

+ 1
- 1
templates/org/home.tmpl View 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>

Loading…
Cancel
Save