func ViewWebhook(ctx *context.Context) { ctx.Data["Title"] = "View Webhook" ctx.Data["PageIsWebhook"] = true ctx.Data["RequireHighlightJS"] = true webhook, err := models.GetWebhookByID(ctx.ParamsInt64(":id")) if err != nil { if errors.IsWebhookNotFound(err) { ctx.Handle(404, "GetWebhookByID", nil) } else { ctx.Handle(500, "GetWebhookByID", err) } return } ctx.Data["Webhook"] = webhook // Prettify JSON in case it is not. buf := new(bytes.Buffer) if err = json.Indent(buf, []byte(webhook.Payload), "", " "); err != nil { ctx.Handle(500, "json.Indent", err) return } webhook.Payload = buf.String() ctx.HTML(200, "webhook/view") }
func Dashboard(ctx *context.Context) { ctx.Data["Title"] = "Dashboard" ctx.Data["PageIsDashboard"] = true ctx.Data["NumWebhooks"] = models.CountWebhook() ctx.HTML(200, "dashboard") }
func EditCollector(ctx *context.Context) { ctx.Data["Title"] = "Edit Collector" ctx.Data["PageIsCollector"] = true parseCollectorByID(ctx) if ctx.Written() { return } ctx.HTML(200, "collector/edit") }
func EditApplication(ctx *context.Context) { ctx.Data["Title"] = "Edit Application" ctx.Data["PageIsApplication"] = true parseApplicationByID(ctx) if ctx.Written() { return } ctx.HTML(200, "application/edit") }
func Applications(ctx *context.Context) { ctx.Data["Title"] = "Applications" ctx.Data["PageIsApplication"] = true apps, err := models.ListApplications() if err != nil { ctx.Handle(500, "ListApplications", err) return } ctx.Data["Applications"] = apps ctx.HTML(200, "application/list") }
func Collectors(ctx *context.Context) { ctx.Data["Title"] = "Collectors" ctx.Data["PageIsCollector"] = true collectors, err := models.ListCollectors() if err != nil { ctx.Error(500, err.Error()) return } ctx.Data["Collectors"] = collectors ctx.HTML(200, "collector/list") }
func RegenerateApplicationSecret(ctx *context.Context) { if err := models.RegenerateApplicationToken(ctx.ParamsInt64(":id")); err != nil { ctx.Error(500, err.Error()) return } ctx.Redirect(fmt.Sprintf("/applications/%d", ctx.ParamsInt64(":id"))) }
func RegenerateCollectorSecret(ctx *context.Context) { if err := models.RegenerateCollectorSecret(ctx.ParamsInt64(":id")); err != nil { ctx.Error(500, err.Error()) return } ctx.Redirect(fmt.Sprintf("/collectors/%d", ctx.ParamsInt64(":id"))) }
func Webhooks(ctx *context.Context) { ctx.Data["Title"] = "Webhooks" ctx.Data["PageIsWebhook"] = true webhooks, err := models.QueryWebhooks(models.QueryWebhookOptions{ Limit: 50, Order: "created desc", }) if err != nil { ctx.Error(500, err.Error()) return } ctx.Data["Webhooks"] = webhooks ctx.HTML(200, "webhook/list") }
func NewCollectorPost(ctx *context.Context, form NewCollectorForm) { ctx.Data["Title"] = "New Collector" ctx.Data["PageIsCollector"] = true if ctx.HasError() { ctx.HTML(200, "collector/new") return } collector, err := models.NewCollector(form.Name, models.COLLECT_TYPE_GITHUB) if err != nil { if errors.IsCollectorExists(err) { ctx.Data["Err_Name"] = true ctx.RenderWithErr("Collector name has been used.", "collector/new", form) } else { ctx.Handle(500, "NewCollector", err) } return } ctx.Redirect(fmt.Sprintf("/collectors/%d", collector.ID)) }
func NewApplicationPost(ctx *context.Context, form NewApplicationForm) { ctx.Data["Title"] = "New Application" ctx.Data["PageIsApplication"] = true if ctx.HasError() { ctx.HTML(200, "application/new") return } app, err := models.NewApplication(form.Name) if err != nil { if errors.IsApplicationExists(err) { ctx.Data["Err_Name"] = true ctx.RenderWithErr("Application name has been used.", "application/new", form) } else { ctx.Handle(500, "NewApplication", err) } return } ctx.Redirect(fmt.Sprintf("/applications/%d", app.ID)) }
func DeleteApplication(ctx *context.Context) { if err := models.DeleteApplicationByID(ctx.ParamsInt64(":id")); err != nil { ctx.Error(500, err.Error()) return } ctx.Redirect("/applications") }
func DeleteCollector(ctx *context.Context) { if err := models.DeleteCollectorByID(ctx.ParamsInt64(":id")); err != nil { ctx.Error(500, err.Error()) return } ctx.Redirect("/collectors") }
func parseApplicationByID(ctx *context.Context) *models.Application { app, err := models.GetApplicationByID(ctx.ParamsInt64(":id")) if err != nil { if errors.IsApplicationNotFound(err) { ctx.Handle(404, "EditApplication", nil) } else { ctx.Handle(500, "GetApplicationByID", err) } return nil } ctx.Data["Application"] = app return app }
func parseCollectorByID(ctx *context.Context) *models.Collector { collector, err := models.GetCollectorByID(ctx.ParamsInt64(":id")) if err != nil { if errors.IsCollectorNotFound(err) { ctx.Handle(404, "EditApplication", nil) } else { ctx.Handle(500, "GetCollectorByID", err) } return nil } ctx.Data["Collector"] = collector return collector }
func EditApplicationPost(ctx *context.Context, form NewApplicationForm) { ctx.Data["Title"] = "Edit Application" ctx.Data["PageIsApplication"] = true app := parseApplicationByID(ctx) if ctx.Written() { return } app.Name = form.Name if err := models.UpdateApplication(app); err != nil { if errors.IsApplicationExists(err) { ctx.Data["Err_Name"] = true ctx.RenderWithErr("Application name has been used.", "application/edit", form) } else { ctx.Error(500, err.Error()) } return } ctx.Redirect(fmt.Sprintf("/applications/%d", app.ID)) }
func EditCollectorPost(ctx *context.Context, form NewCollectorForm) { ctx.Data["Title"] = "Edit Collector" ctx.Data["PageIsCollector"] = true collector := parseCollectorByID(ctx) if ctx.Written() { return } collector.Name = form.Name if err := models.UpdateCollector(collector); err != nil { if errors.IsCollectorExists(err) { ctx.Data["Err_Name"] = true ctx.RenderWithErr("Collector name has been used.", "collector/edit", form) } else { ctx.Error(500, err.Error()) } return } ctx.Redirect(fmt.Sprintf("/collectors/%d", collector.ID)) }
func Hook(ctx *context.Context) { collector, err := models.GetCollectorBySecret(ctx.Query("secret")) if err != nil { if errors.IsCollectorNotFound(err) { ctx.Error(403) } else { ctx.Error(500, err.Error()) } return } payload, err := ctx.Req.Body().Bytes() if err != nil { ctx.Error(500, err.Error()) return } // NOTE: Currently only support GitHub event, err := webhook.ParseGitHubEvent(payload) if err != nil { ctx.Error(500, err.Error()) return } if err = models.NewWebhook(&models.Webhook{ CollectorID: collector.ID, Owner: tool.FirstNonEmptyString(event.Repository.Owner.Login, event.Repository.Owner.Name), RepoName: event.Repository.Name, EventType: ctx.Req.Header.Get("X-GitHub-Event"), Sender: event.Sender.Login, Payload: string(payload), }); err != nil { ctx.Error(500, err.Error()) return } ctx.Status(202) }
func NewCollector(ctx *context.Context) { ctx.Data["Title"] = "New Collector" ctx.Data["PageIsCollector"] = true ctx.HTML(200, "collector/new") }
func Config(ctx *context.Context) { ctx.Data["Title"] = "Configuration" ctx.Data["PageIsConfig"] = true ctx.HTML(200, "config") }
func NewApplication(ctx *context.Context) { ctx.Data["Title"] = "New Application" ctx.Data["PageIsApplication"] = true ctx.HTML(200, "application/new") }