Browse Source

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

pull/544/head
Unknwon 10 years ago
parent
commit
79262173a6
  1. 5
      .bra.toml
  2. 10
      models/repo.go
  3. 16
      models/webhook.go
  4. 2
      templates/org/home.tmpl

5
.bra.toml

@ -1,5 +1,8 @@
[run] [run]
init_cmds = [["./gogs", "web"]] init_cmds = [
["grep", "-rn", "FIXME", "."],
["./gogs", "web"]
]
watch_all = true watch_all = true
watch_dirs = [ watch_dirs = [
"$WORKDIR/conf/locale", "$WORKDIR/conf/locale",

10
models/repo.go

@ -166,7 +166,9 @@ type Repository struct {
} }
func (repo *Repository) GetOwner() (err error) { func (repo *Repository) GetOwner() (err error) {
if repo.Owner == nil {
repo.Owner, err = GetUserById(repo.OwnerId) repo.Owner, err = GetUserById(repo.OwnerId)
}
return err return err
} }
@ -175,6 +177,14 @@ func (repo *Repository) GetMirror() (err error) {
return err 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. // DescriptionHtml does special handles to description and return HTML string.
func (repo *Repository) DescriptionHtml() template.HTML { func (repo *Repository) DescriptionHtml() template.HTML {
sanitize := func(s string) string { sanitize := func(s string) string {

16
models/webhook.go

@ -235,8 +235,22 @@ func UpdateHookTask(t *HookTask) error {
return err 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. // DeliverHooks checks and delivers undelivered hooks.
// FIXME: maybe can use goroutine to shoot a number of them at same time?
func DeliverHooks() { func DeliverHooks() {
if isShooting {
return
}
isShooting = true
defer func() { isShooting = false }()
tasks := make([]*HookTask, 0, 10) tasks := make([]*HookTask, 0, 10)
timeout := time.Duration(setting.WebhookDeliverTimeout) * time.Second timeout := time.Duration(setting.WebhookDeliverTimeout) * time.Second
x.Where("is_delivered=?", false).Iterate(new(HookTask), x.Where("is_delivered=?", false).Iterate(new(HookTask),
@ -255,7 +269,7 @@ func DeliverHooks() {
t.IsDelivered = true t.IsDelivered = true
// TODO: record response. // FIXME: record response.
switch t.Type { switch t.Type {
case GOGS: case GOGS:
{ {

2
templates/org/home.tmpl

@ -27,7 +27,7 @@
</div> </div>
<div id="org-repo-list"> <div id="org-repo-list">
{{range .Repos}} {{range .Repos}}
{{if or $isMember (not .IsPrivate)}} {{if .HasAccess $.SignedUser.Name}}
<div class="org-repo-item"> <div class="org-repo-item">
<ul class="org-repo-status right"> <ul class="org-repo-status right">
<li><i class="octicon octicon-star"></i> {{.NumStars}}</li> <li><i class="octicon octicon-star"></i> {{.NumStars}}</li>

Loading…
Cancel
Save