diff options
author | Chris <ccbrown112@gmail.com> | 2017-11-30 14:55:44 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-30 14:55:44 -0600 |
commit | daebd26a2894d88eb4c703b3be75f042cd563fef (patch) | |
tree | 0dfd6d21a1c284271f366c1b8279833fc4e7ed30 /app/plugin/jira/webhook.go | |
parent | eaca461ee35993c07936a5888c003153d9e9b24f (diff) | |
download | chat-daebd26a2894d88eb4c703b3be75f042cd563fef.tar.gz chat-daebd26a2894d88eb4c703b3be75f042cd563fef.tar.bz2 chat-daebd26a2894d88eb4c703b3be75f042cd563fef.zip |
PLT-8018: Bundled jira plugin (#7920)
* bundled jira plugin
* fix generated file formatting, add prepackaged key
* whoops, uploaded wrong file
* whitelist generated files for license check
* make it work for people without go/bin in their path
Diffstat (limited to 'app/plugin/jira/webhook.go')
-rw-r--r-- | app/plugin/jira/webhook.go | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/app/plugin/jira/webhook.go b/app/plugin/jira/webhook.go deleted file mode 100644 index 9798bcd9f..000000000 --- a/app/plugin/jira/webhook.go +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. - -package jira - -import ( - "bytes" - "strings" - "text/template" - - "github.com/mattermost/mattermost-server/model" -) - -type Webhook struct { - WebhookEvent string - Issue struct { - Self string - Key string - Fields struct { - Assignee *struct { - DisplayName string - Name string - } - Summary string - Description string - Priority *struct { - Id string - Name string - } - IssueType struct { - Name string - IconURL string - } - Resolution *struct { - Id string - } - Status struct { - Id string - } - } - } - User struct { - Name string - AvatarUrls map[string]string - DisplayName string - } - Comment struct { - Body string - } - ChangeLog struct { - Items []struct { - FromString string - ToString string - Field string - } - } -} - -// Returns the text to be placed in the resulting post or an empty string if nothing should be -// posted. -func (w *Webhook) SlackAttachment() (*model.SlackAttachment, error) { - switch w.WebhookEvent { - case "jira:issue_created": - case "jira:issue_updated": - isResolutionChange := false - for _, change := range w.ChangeLog.Items { - if change.Field == "resolution" { - isResolutionChange = (change.FromString == "") != (change.ToString == "") - break - } - } - if !isResolutionChange { - return nil, nil - } - case "jira:issue_deleted": - if w.Issue.Fields.Resolution != nil { - return nil, nil - } - default: - return nil, nil - } - - pretext, err := w.renderText("" + - "{{.User.DisplayName}} {{.Verb}} {{.Issue.Fields.IssueType.Name}} " + - "[{{.Issue.Key}}]({{.JIRAURL}}/browse/{{.Issue.Key}})" + - "") - if err != nil { - return nil, err - } - - text, err := w.renderText("" + - "[{{.Issue.Fields.Summary}}]({{.JIRAURL}}/browse/{{.Issue.Key}})" + - "{{if eq .WebhookEvent \"jira:issue_created\"}}{{if ne .Issue.Fields.Description \"\"}}" + - "{{if len .Issue.Fields.Description | lt 3000}}" + - "\n\n{{printf \"%.3000s\" .Issue.Fields.Description}}..." + - "{{else}}" + - "\n\n{{.Issue.Fields.Description}}" + - "{{end}}" + - "{{end}}{{end}}" + - "") - if err != nil { - return nil, err - } - - var fields []*model.SlackAttachmentField - if w.WebhookEvent == "jira:issue_created" { - if w.Issue.Fields.Assignee != nil { - fields = append(fields, &model.SlackAttachmentField{ - Title: "Assignee", - Value: w.Issue.Fields.Assignee.DisplayName, - Short: true, - }) - } - if w.Issue.Fields.Priority != nil { - fields = append(fields, &model.SlackAttachmentField{ - Title: "Priority", - Value: w.Issue.Fields.Priority.Name, - Short: true, - }) - } - } - - return &model.SlackAttachment{ - Fallback: pretext, - Color: "#95b7d0", - Pretext: pretext, - Text: text, - Fields: fields, - }, nil -} - -func (w *Webhook) JIRAURL() string { - pos := strings.LastIndex(w.Issue.Self, "/rest/api") - if pos < 0 { - return "" - } - return w.Issue.Self[:pos] -} - -func (w *Webhook) renderText(tplBody string) (string, error) { - verb := strings.TrimPrefix(w.WebhookEvent, "jira:issue_") - - if w.WebhookEvent == "jira:issue_updated" { - for _, change := range w.ChangeLog.Items { - if change.Field == "resolution" { - if change.ToString == "" && change.FromString != "" { - verb = "reopened" - } else if change.ToString != "" && change.FromString == "" { - verb = "resolved" - } - break - } - } - } - - tpl, err := template.New("post").Parse(tplBody) - if err != nil { - return "", err - } - - var buf bytes.Buffer - if err := tpl.Execute(&buf, struct { - *Webhook - JIRAURL string - Verb string - }{ - Webhook: w, - JIRAURL: w.JIRAURL(), - Verb: verb, - }); err != nil { - return "", err - } - return buf.String(), nil -} |