TASK_INTERVAL = 1 | TASK_INTERVAL = 1 | ||||
; Deliver timeout in seconds | ; Deliver timeout in seconds | ||||
DELIVER_TIMEOUT = 5 | DELIVER_TIMEOUT = 5 | ||||
; Allow insecure certification | |||||
ALLOW_INSECURE_CERTIFICATION = false | |||||
[mailer] | [mailer] | ||||
ENABLED = false | ENABLED = false |
config.webhook_config = Webhook Configuration | config.webhook_config = Webhook Configuration | ||||
config.task_interval = Task Interval | config.task_interval = Task Interval | ||||
config.deliver_timeout = Deliver Timeout | config.deliver_timeout = Deliver Timeout | ||||
config.allow_insecure_certification = Allow Insecure Certification | |||||
config.mailer_config = Mailer Configuration | config.mailer_config = Mailer Configuration | ||||
config.mailer_enabled = Enabled | config.mailer_enabled = Enabled | ||||
config.mailer_name = Name | config.mailer_name = Name |
"github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
) | ) | ||||
const APP_VER = "0.5.13.0209 Beta" | |||||
const APP_VER = "0.5.13.0210 Beta" | |||||
func init() { | func init() { | ||||
runtime.GOMAXPROCS(runtime.NumCPU()) | runtime.GOMAXPROCS(runtime.NumCPU()) |
package models | package models | ||||
import ( | import ( | ||||
"crypto/tls" | |||||
"encoding/json" | "encoding/json" | ||||
"errors" | "errors" | ||||
"io/ioutil" | "io/ioutil" | ||||
defer func() { isShooting = false }() | 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.Webhook.DeliverTimeout) * time.Second | |||||
x.Where("is_delivered=?", false).Iterate(new(HookTask), | x.Where("is_delivered=?", false).Iterate(new(HookTask), | ||||
func(idx int, bean interface{}) error { | func(idx int, bean interface{}) error { | ||||
t := bean.(*HookTask) | t := bean.(*HookTask) | ||||
req := httplib.Post(t.Url).SetTimeout(timeout, timeout). | req := httplib.Post(t.Url).SetTimeout(timeout, timeout). | ||||
Header("X-Gogs-Delivery", t.Uuid). | Header("X-Gogs-Delivery", t.Uuid). | ||||
Header("X-Gogs-Event", string(t.EventType)) | |||||
Header("X-Gogs-Event", string(t.EventType)). | |||||
SetTLSClientConfig(&tls.Config{InsecureSkipVerify: setting.Webhook.AllowInsecureCertification}) | |||||
switch t.ContentType { | switch t.ContentType { | ||||
case JSON: | case JSON: | ||||
case GOGS: | case GOGS: | ||||
{ | { | ||||
if _, err := req.Response(); err != nil { | if _, err := req.Response(); err != nil { | ||||
log.Error(4, "Delivery: %v", err) | |||||
log.Error(5, "Delivery: %v", err) | |||||
} else { | } else { | ||||
t.IsSucceed = true | t.IsSucceed = true | ||||
} | } | ||||
case SLACK: | case SLACK: | ||||
{ | { | ||||
if res, err := req.Response(); err != nil { | if res, err := req.Response(); err != nil { | ||||
log.Error(4, "Delivery: %v", err) | |||||
log.Error(5, "Delivery: %v", err) | |||||
} else { | } else { | ||||
defer res.Body.Close() | defer res.Body.Close() | ||||
contents, err := ioutil.ReadAll(res.Body) | contents, err := ioutil.ReadAll(res.Body) | ||||
if err != nil { | if err != nil { | ||||
log.Error(4, "%s", err) | |||||
log.Error(5, "%s", err) | |||||
} else { | } else { | ||||
if string(contents) != "ok" { | if string(contents) != "ok" { | ||||
log.Error(4, "slack failed with: %s", string(contents)) | |||||
log.Error(5, "slack failed with: %s", string(contents)) | |||||
} else { | } else { | ||||
t.IsSucceed = true | t.IsSucceed = true | ||||
} | } |
func NewCronContext() { | func NewCronContext() { | ||||
c.AddFunc("Update mirrors", "@every 1h", models.MirrorUpdate) | c.AddFunc("Update mirrors", "@every 1h", models.MirrorUpdate) | ||||
c.AddFunc("Deliver hooks", fmt.Sprintf("@every %dm", setting.WebhookTaskInterval), models.DeliverHooks) | |||||
c.AddFunc("Deliver hooks", fmt.Sprintf("@every %dm", setting.Webhook.TaskInterval), models.DeliverHooks) | |||||
if setting.Git.Fsck.Enable { | if setting.Git.Fsck.Enable { | ||||
c.AddFunc("Repository health check", fmt.Sprintf("@every %dh", setting.Git.Fsck.Interval), models.GitFsck) | c.AddFunc("Repository health check", fmt.Sprintf("@every %dh", setting.Git.Fsck.Interval), models.GitFsck) | ||||
} | } |
ReverseProxyAuthUser string | ReverseProxyAuthUser string | ||||
// Webhook settings. | // Webhook settings. | ||||
WebhookTaskInterval int | |||||
WebhookDeliverTimeout int | |||||
Webhook struct { | |||||
TaskInterval int | |||||
DeliverTimeout int | |||||
AllowInsecureCertification bool | |||||
} | |||||
// Repository settings. | // Repository settings. | ||||
RepoRootPath string | RepoRootPath string | ||||
} | } | ||||
func newWebhookService() { | func newWebhookService() { | ||||
WebhookTaskInterval = Cfg.Section("webhook").Key("TASK_INTERVAL").MustInt(1) | |||||
WebhookDeliverTimeout = Cfg.Section("webhook").Key("DELIVER_TIMEOUT").MustInt(5) | |||||
sec := Cfg.Section("webhook") | |||||
Webhook.TaskInterval = sec.Key("TASK_INTERVAL").MustInt(1) | |||||
Webhook.DeliverTimeout = sec.Key("DELIVER_TIMEOUT").MustInt(5) | |||||
Webhook.AllowInsecureCertification = sec.Key("ALLOW_INSECURE_CERTIFICATION").MustBool() | |||||
} | } | ||||
func NewServices() { | func NewServices() { |
ctx.Data["ReverseProxyAuthUser"] = setting.ReverseProxyAuthUser | ctx.Data["ReverseProxyAuthUser"] = setting.ReverseProxyAuthUser | ||||
ctx.Data["Service"] = setting.Service | ctx.Data["Service"] = setting.Service | ||||
ctx.Data["DbCfg"] = models.DbCfg | ctx.Data["DbCfg"] = models.DbCfg | ||||
ctx.Data["WebhookTaskInterval"] = setting.WebhookTaskInterval | |||||
ctx.Data["WebhookDeliverTimeout"] = setting.WebhookDeliverTimeout | |||||
ctx.Data["Webhook"] = setting.Webhook | |||||
ctx.Data["MailerEnabled"] = false | ctx.Data["MailerEnabled"] = false | ||||
if setting.MailService != nil { | if setting.MailService != nil { |
0.5.13.0209 Beta | |||||
0.5.13.0210 Beta |
<div class="panel-body"> | <div class="panel-body"> | ||||
<dl class="dl-horizontal admin-dl-horizontal"> | <dl class="dl-horizontal admin-dl-horizontal"> | ||||
<dt>{{.i18n.Tr "admin.config.task_interval"}}</dt> | <dt>{{.i18n.Tr "admin.config.task_interval"}}</dt> | ||||
<dd>{{.WebhookTaskInterval}} {{.i18n.Tr "tool.raw_minutes"}}</dd> | |||||
<dd>{{.Webhook.TaskInterval}} {{.i18n.Tr "tool.raw_minutes"}}</dd> | |||||
<dt>{{.i18n.Tr "admin.config.deliver_timeout"}}</dt> | <dt>{{.i18n.Tr "admin.config.deliver_timeout"}}</dt> | ||||
<dd>{{.WebhookDeliverTimeout}} {{.i18n.Tr "tool.raw_seconds"}}</dd> | |||||
<dd>{{.Webhook.DeliverTimeout}} {{.i18n.Tr "tool.raw_seconds"}}</dd> | |||||
<dt>{{.i18n.Tr "admin.config.allow_insecure_certification"}}</dt> | |||||
<dd><i class="fa fa{{if .Webhook.AllowInsecureCertification}}-check{{end}}-square-o"></i></dd> | |||||
</dl> | </dl> | ||||
</div> | </div> | ||||
</div> | </div> |