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. 12
      models/repo.go
  3. 16
      models/webhook.go
  4. 2
      templates/org/home.tmpl

5
.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",

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

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

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

Loading…
Cancel
Save