Exemple #1
0
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")
}
Exemple #2
0
func Dashboard(ctx *context.Context) {
	ctx.Data["Title"] = "Dashboard"
	ctx.Data["PageIsDashboard"] = true

	ctx.Data["NumWebhooks"] = models.CountWebhook()

	ctx.HTML(200, "dashboard")
}
Exemple #3
0
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")
}
Exemple #4
0
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")
}
Exemple #5
0
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")
}
Exemple #6
0
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")
}
Exemple #7
0
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")))
}
Exemple #8
0
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")))
}
Exemple #9
0
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")
}
Exemple #10
0
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))
}
Exemple #11
0
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))
}
Exemple #12
0
func DeleteApplication(ctx *context.Context) {
	if err := models.DeleteApplicationByID(ctx.ParamsInt64(":id")); err != nil {
		ctx.Error(500, err.Error())
		return
	}

	ctx.Redirect("/applications")
}
Exemple #13
0
func DeleteCollector(ctx *context.Context) {
	if err := models.DeleteCollectorByID(ctx.ParamsInt64(":id")); err != nil {
		ctx.Error(500, err.Error())
		return
	}

	ctx.Redirect("/collectors")
}
Exemple #14
0
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
}
Exemple #15
0
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
}
Exemple #16
0
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))
}
Exemple #17
0
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))
}
Exemple #18
0
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)
}
Exemple #19
0
func NewCollector(ctx *context.Context) {
	ctx.Data["Title"] = "New Collector"
	ctx.Data["PageIsCollector"] = true
	ctx.HTML(200, "collector/new")
}
Exemple #20
0
func Config(ctx *context.Context) {
	ctx.Data["Title"] = "Configuration"
	ctx.Data["PageIsConfig"] = true
	ctx.HTML(200, "config")
}
Exemple #21
0
func NewApplication(ctx *context.Context) {
	ctx.Data["Title"] = "New Application"
	ctx.Data["PageIsApplication"] = true
	ctx.HTML(200, "application/new")
}