127 lines
3.4 KiB
Go
127 lines
3.4 KiB
Go
package plugin
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
)
|
|
|
|
func (p *Plugin) handleDialogSubmit(w http.ResponseWriter, r *http.Request) {
|
|
var req model.SubmitDialogRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
if req.CallbackId != "sentry_setup" {
|
|
w.WriteHeader(http.StatusOK)
|
|
return
|
|
}
|
|
|
|
sub := req.Submission
|
|
|
|
projectSlug := sub["project_slug"].(string)
|
|
channelID := sub["default_channel_id"].(string)
|
|
|
|
hooks := HookSettings{
|
|
EventAlert: getBool(sub, "hook_event_alert", true),
|
|
MetricAlert: getBool(sub, "hook_metric_alert", true),
|
|
Issue: getBool(sub, "hook_issue", true),
|
|
Comment: getBool(sub, "hook_comment", true),
|
|
}
|
|
|
|
project, err := p.linkProjectToChannel(projectSlug, channelID, hooks)
|
|
if err != nil {
|
|
// Отправляем ошибку в личные сообщения
|
|
post := &model.Post{
|
|
Message: "❌ " + err.Error(),
|
|
}
|
|
if dmErr := p.sendDMToUser(req.UserId, post); dmErr != nil {
|
|
p.API.LogError("Failed to send DM to user", "error", dmErr.Error())
|
|
}
|
|
return
|
|
}
|
|
|
|
// Отправляем успешное сообщение в личные сообщения
|
|
post := &model.Post{
|
|
Message: fmt.Sprintf(
|
|
"✅ Linked **%s** (`%s`)\nHooks: event=%v, metric=%v, issue=%v, comment=%v",
|
|
project.Name,
|
|
project.Slug,
|
|
hooks.EventAlert,
|
|
hooks.MetricAlert,
|
|
hooks.Issue,
|
|
hooks.Comment,
|
|
),
|
|
}
|
|
if dmErr := p.sendDMToUser(req.UserId, post); dmErr != nil {
|
|
p.API.LogError("Failed to send DM to user", "error", dmErr.Error())
|
|
}
|
|
}
|
|
|
|
func (p *Plugin) openEventAlertSetup(
|
|
args *model.CommandArgs,
|
|
project *LinkedProject,
|
|
) (*model.CommandResponse, *model.AppError) {
|
|
|
|
if args.TriggerId == "" {
|
|
post := &model.Post{Message: "This command must be run from UI"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|
|
|
|
post := &model.Post{Message: "🛠 Event alert setup is not implemented yet"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|
|
|
|
func (p *Plugin) openMetricAlertSetup(
|
|
args *model.CommandArgs,
|
|
project *LinkedProject,
|
|
) (*model.CommandResponse, *model.AppError) {
|
|
|
|
if args.TriggerId == "" {
|
|
post := &model.Post{Message: "This command must be run from UI"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|
|
|
|
post := &model.Post{Message: "🛠 Metric alert setup is not implemented yet"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|
|
|
|
func (p *Plugin) openIssueSetup(
|
|
args *model.CommandArgs,
|
|
project *LinkedProject,
|
|
) (*model.CommandResponse, *model.AppError) {
|
|
|
|
if args.TriggerId == "" {
|
|
post := &model.Post{Message: "This command must be run from UI"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|
|
|
|
post := &model.Post{Message: "🛠 Issue setup is not implemented yet"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|
|
|
|
func (p *Plugin) openCommentSetup(
|
|
args *model.CommandArgs,
|
|
project *LinkedProject,
|
|
) (*model.CommandResponse, *model.AppError) {
|
|
|
|
if args.TriggerId == "" {
|
|
post := &model.Post{Message: "This command must be run from UI"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|
|
|
|
post := &model.Post{Message: "🛠 Comment setup is not implemented yet"}
|
|
_ = p.sendDMToUser(args.UserId, post)
|
|
return &model.CommandResponse{}, nil
|
|
}
|