115 lines
2.2 KiB
Go

package plugin
import (
"net/http"
"strings"
"github.com/gorilla/mux"
"github.com/mattermost/mattermost/server/public/model"
"github.com/mattermost/mattermost/server/public/plugin"
)
func (p *Plugin) InitApi() {
p.router = mux.NewRouter()
p.router.HandleFunc("/webhook", p.handleWebhook).Methods("POST")
}
func (p *Plugin) ServeHTTP(c *plugin.Context, w http.ResponseWriter, r *http.Request) {
if !p.IsReady {
http.Error(w, "Plugin not ready", http.StatusServiceUnavailable)
return
}
p.router.ServeHTTP(w, r)
}
func (p *Plugin) registerCommands() error {
command := &model.Command{
Trigger: "sentry",
DisplayName: "Sentry",
Description: "Manage Sentry alerts and integrations",
AutoComplete: true,
AutocompleteData: p.getAutocompleteData(),
}
if err := p.API.RegisterCommand(command); err != nil {
p.API.LogError("Failed to register Sentry command", "error", err.Error())
return err
}
return nil
}
func (p *Plugin) ExecuteCommand(
ctx *plugin.Context,
args *model.CommandArgs,
) (*model.CommandResponse, *model.AppError) {
split := strings.Fields(args.Command)
if len(split) < 2 {
return p.commandHelp(), nil
}
switch split[1] {
case "setup":
return p.commandSetup(args)
case "link":
return p.commandLink(args, split)
case "unlink":
return p.commandUnlink(args, split)
case "list":
return p.commandList(args)
case "help":
fallthrough
default:
return p.commandHelp(), nil
}
}
func (p *Plugin) getAutocompleteData() *model.AutocompleteData {
sentry := model.NewAutocompleteData(
"sentry",
"",
"Sentry integration commands",
)
setup := model.NewAutocompleteData(
"setup",
"",
"Initial setup of Sentry integration",
)
help := model.NewAutocompleteData(
"help",
"",
"Show help for Sentry commands",
)
list := model.NewAutocompleteData(
"list",
"",
"List linked Sentry projects",
)
link := model.NewAutocompleteData(
"link",
"[project]",
"Link a Sentry project to this channel",
)
unlink := model.NewAutocompleteData(
"unlink",
"[project]",
"Unlink a Sentry project from this channel",
)
sentry.AddCommand(setup)
sentry.AddCommand(help)
sentry.AddCommand(list)
sentry.AddCommand(link)
sentry.AddCommand(unlink)
return sentry
}