func WebHooksAddPost(ctx *middleware.Context, form auth.NewWebhookForm) { ctx.Data["IsRepoToolbarWebHooks"] = true ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - Add Webhook" if ctx.HasError() { ctx.HTML(200, "repo/hooks_add") return } ct := models.CT_JSON if form.ContentType == "2" { ct = models.CT_FORM } w := &models.Webhook{ RepoId: ctx.Repo.Repository.Id, Url: form.Url, ContentType: ct, Secret: form.Secret, HookEvent: &models.HookEvent{ PushOnly: form.PushOnly, }, IsActive: form.Active, } if err := w.SaveEvent(); err != nil { ctx.Handle(500, "setting.WebHooksAddPost(SaveEvent)", err) return } else if err := models.CreateWebhook(w); err != nil { ctx.Handle(500, "setting.WebHooksAddPost(CreateWebhook)", err) return } ctx.Flash.Success("New webhook has been added.") ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks") }
func SlackHooksNewPost(ctx *middleware.Context, form auth.NewSlackHookForm) { ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooksNew"] = true ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} orCtx, err := getOrgRepoCtx(ctx) if err != nil { ctx.Handle(500, "SlackHooksNewPost(getOrgRepoCtx)", err) return } if ctx.HasError() { ctx.HTML(200, orCtx.NewTemplate) return } meta, err := json.Marshal(&models.Slack{ Domain: form.Domain, Channel: form.Channel, Token: form.Token, }) if err != nil { ctx.Handle(500, "SlackHooksNewPost: JSON marshal failed: ", err) return } w := &models.Webhook{ RepoId: orCtx.RepoId, Url: models.GetSlackURL(form.Domain, form.Token), ContentType: models.JSON, Secret: "", HookEvent: &models.HookEvent{ PushOnly: form.PushOnly, }, IsActive: form.Active, HookTaskType: models.SLACK, Meta: string(meta), OrgId: orCtx.OrgId, } if err := w.UpdateEvent(); err != nil { ctx.Handle(500, "UpdateEvent", err) return } else if err := models.CreateWebhook(w); err != nil { ctx.Handle(500, "CreateWebhook", err) return } ctx.Flash.Success(ctx.Tr("repo.settings.add_hook_success")) ctx.Redirect(orCtx.Link + "/settings/hooks") }
func SlackHooksNewPost(ctx *middleware.Context, form auth.NewSlackHookForm) { ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooksNew"] = true ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} orCtx, err := getOrgRepoCtx(ctx) if err != nil { ctx.Handle(500, "getOrgRepoCtx", err) return } if ctx.HasError() { ctx.HTML(200, orCtx.NewTemplate) return } meta, err := json.Marshal(&models.SlackMeta{ Channel: form.Channel, Username: form.Username, IconURL: form.IconURL, Color: form.Color, }) if err != nil { ctx.Handle(500, "Marshal", err) return } w := &models.Webhook{ RepoID: orCtx.RepoID, URL: form.PayloadURL, ContentType: models.JSON, HookEvent: ParseHookEvent(form.WebhookForm), IsActive: form.Active, HookTaskType: models.SLACK, Meta: string(meta), OrgID: orCtx.OrgID, } if err := w.UpdateEvent(); err != nil { ctx.Handle(500, "UpdateEvent", err) return } else if err := models.CreateWebhook(w); err != nil { ctx.Handle(500, "CreateWebhook", err) return } ctx.Flash.Success(ctx.Tr("repo.settings.add_hook_success")) ctx.Redirect(orCtx.Link + "/settings/hooks") }
func WebHooksNewPost(ctx *middleware.Context, form auth.NewWebhookForm) { ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooksNew"] = true ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} renderHookTypes(ctx) orCtx, err := getOrgRepoCtx(ctx) if err != nil { ctx.Handle(500, "WebHooksNewPost(getOrgRepoCtx)", err) return } if ctx.HasError() { ctx.HTML(200, orCtx.NewTemplate) return } // FIXME: code too old here, sync with APIs ct := models.JSON if form.ContentType == "2" { ct = models.FORM } w := &models.Webhook{ RepoId: orCtx.RepoId, Url: form.PayloadUrl, ContentType: ct, Secret: form.Secret, HookEvent: &models.HookEvent{ PushOnly: form.PushOnly, }, IsActive: form.Active, HookTaskType: models.GOGS, Meta: "", OrgId: orCtx.OrgId, } if err := w.UpdateEvent(); err != nil { ctx.Handle(500, "UpdateEvent", err) return } else if err := models.CreateWebhook(w); err != nil { ctx.Handle(500, "CreateWebhook", err) return } ctx.Flash.Success(ctx.Tr("repo.settings.add_hook_success")) ctx.Redirect(orCtx.Link + "/settings/hooks") }
func WebHooksNewPost(ctx *middleware.Context, form auth.NewWebhookForm) { ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooksNew"] = true ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} ctx.Data["HookType"] = "gogs" orCtx, err := getOrgRepoCtx(ctx) if err != nil { ctx.Handle(500, "getOrgRepoCtx", err) return } ctx.Data["BaseLink"] = orCtx.Link if ctx.HasError() { ctx.HTML(200, orCtx.NewTemplate) return } contentType := models.JSON if models.HookContentType(form.ContentType) == models.FORM { contentType = models.FORM } w := &models.Webhook{ RepoID: orCtx.RepoID, URL: form.PayloadURL, ContentType: contentType, Secret: form.Secret, HookEvent: ParseHookEvent(form.WebhookForm), IsActive: form.Active, HookTaskType: models.GOGS, OrgID: orCtx.OrgID, } if err := w.UpdateEvent(); err != nil { ctx.Handle(500, "UpdateEvent", err) return } else if err := models.CreateWebhook(w); err != nil { ctx.Handle(500, "CreateWebhook", err) return } ctx.Flash.Success(ctx.Tr("repo.settings.add_hook_success")) ctx.Redirect(orCtx.Link + "/settings/hooks") }
func WebHooksNewPost(ctx *middleware.Context, form auth.NewWebhookForm) { ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooksNew"] = true ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} if ctx.HasError() { ctx.HTML(200, HOOK_NEW) return } ct := models.JSON if form.ContentType == "2" { ct = models.FORM } w := &models.Webhook{ RepoId: ctx.Repo.Repository.Id, Url: form.PayloadUrl, ContentType: ct, Secret: form.Secret, HookEvent: &models.HookEvent{ PushOnly: form.PushOnly, }, IsActive: form.Active, HookTaskType: models.GOGS, Meta: "", } if err := w.UpdateEvent(); err != nil { ctx.Handle(500, "UpdateEvent", err) return } else if err := models.CreateWebhook(w); err != nil { ctx.Handle(500, "CreateWebhook", err) return } ctx.Flash.Success(ctx.Tr("repo.settings.add_hook_success")) ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks") }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create-a-hook func CreateHook(ctx *middleware.Context, form api.CreateHookOption) { if !models.IsValidHookTaskType(form.Type) { ctx.APIError(422, "", "Invalid hook type") return } for _, name := range []string{"url", "content_type"} { if _, ok := form.Config[name]; !ok { ctx.APIError(422, "", "Missing config option: "+name) return } } if !models.IsValidHookContentType(form.Config["content_type"]) { ctx.APIError(422, "", "Invalid content type") return } if len(form.Events) == 0 { form.Events = []string{"push"} } w := &models.Webhook{ RepoID: ctx.Repo.Repository.ID, URL: form.Config["url"], ContentType: models.ToHookContentType(form.Config["content_type"]), Secret: form.Config["secret"], HookEvent: &models.HookEvent{ ChooseEvents: true, HookEvents: models.HookEvents{ Create: com.IsSliceContainsStr(form.Events, string(models.HOOK_EVENT_CREATE)), Push: com.IsSliceContainsStr(form.Events, string(models.HOOK_EVENT_PUSH)), }, }, IsActive: form.Active, HookTaskType: models.ToHookTaskType(form.Type), } if w.HookTaskType == models.SLACK { channel, ok := form.Config["channel"] if !ok { ctx.APIError(422, "", "Missing config option: channel") return } meta, err := json.Marshal(&models.SlackMeta{ Channel: channel, Username: form.Config["username"], IconURL: form.Config["icon_url"], Color: form.Config["color"], }) if err != nil { ctx.APIError(500, "slack: JSON marshal failed", err) return } w.Meta = string(meta) } if err := w.UpdateEvent(); err != nil { ctx.APIError(500, "UpdateEvent", err) return } else if err := models.CreateWebhook(w); err != nil { ctx.APIError(500, "CreateWebhook", err) return } ctx.JSON(201, convert.ToApiHook(ctx.Repo.RepoLink, w)) }
// POST /repos/:username/:reponame/hooks // https://developer.github.com/v3/repos/hooks/#create-a-hook func CreateRepoHook(ctx *middleware.Context, form api.CreateHookOption) { if !models.IsValidHookTaskType(form.Type) { ctx.JSON(422, &base.ApiJsonErr{"invalid hook type", base.DOC_URL}) return } for _, name := range []string{"url", "content_type"} { if _, ok := form.Config[name]; !ok { ctx.JSON(422, &base.ApiJsonErr{"missing config option: " + name, base.DOC_URL}) return } } if !models.IsValidHookContentType(form.Config["content_type"]) { ctx.JSON(422, &base.ApiJsonErr{"invalid content type", base.DOC_URL}) return } w := &models.Webhook{ RepoId: ctx.Repo.Repository.Id, Url: form.Config["url"], ContentType: models.ToHookContentType(form.Config["content_type"]), Secret: form.Config["secret"], HookEvent: &models.HookEvent{ PushOnly: true, // Only support it now. }, IsActive: form.Active, HookTaskType: models.ToHookTaskType(form.Type), } if w.HookTaskType == models.SLACK { channel, ok := form.Config["channel"] if !ok { ctx.JSON(422, &base.ApiJsonErr{"missing config option: channel", base.DOC_URL}) return } meta, err := json.Marshal(&models.Slack{ Channel: channel, }) if err != nil { ctx.JSON(500, &base.ApiJsonErr{"slack: JSON marshal failed: " + err.Error(), base.DOC_URL}) return } w.Meta = string(meta) } if err := w.UpdateEvent(); err != nil { ctx.JSON(500, &base.ApiJsonErr{"UpdateEvent: " + err.Error(), base.DOC_URL}) return } else if err := models.CreateWebhook(w); err != nil { ctx.JSON(500, &base.ApiJsonErr{"CreateWebhook: " + err.Error(), base.DOC_URL}) return } apiHook := &api.Hook{ Id: w.Id, Type: w.HookTaskType.Name(), Events: []string{"push"}, Active: w.IsActive, Config: map[string]string{ "url": w.Url, "content_type": w.ContentType.Name(), }, } if w.HookTaskType == models.SLACK { s := w.GetSlackHook() apiHook.Config["channel"] = s.Channel } ctx.JSON(201, apiHook) }