summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/import.go33
-rw-r--r--app/slackimport.go39
-rw-r--r--app/webhook.go35
-rw-r--r--model/slack_attachment.go3
4 files changed, 19 insertions, 91 deletions
diff --git a/app/import.go b/app/import.go
index 4d0feb532..a5ed69843 100644
--- a/app/import.go
+++ b/app/import.go
@@ -915,37 +915,8 @@ func OldImportIncomingWebhookPost(post *model.Post, props model.StringInterface)
if len(props) > 0 {
for key, val := range props {
if key == "attachments" {
- if list, success := val.([]interface{}); success {
- // parse attachment links into Markdown format
- for i, aInt := range list {
- attachment := aInt.(map[string]interface{})
- if aText, ok := attachment["text"].(string); ok {
- aText = linkWithTextRegex.ReplaceAllString(aText, "[${2}](${1})")
- attachment["text"] = aText
- list[i] = attachment
- }
- if aText, ok := attachment["pretext"].(string); ok {
- aText = linkWithTextRegex.ReplaceAllString(aText, "[${2}](${1})")
- attachment["pretext"] = aText
- list[i] = attachment
- }
- if fVal, ok := attachment["fields"]; ok {
- if fields, ok := fVal.([]interface{}); ok {
- // parse attachment field links into Markdown format
- for j, fInt := range fields {
- field := fInt.(map[string]interface{})
- if fValue, ok := field["value"].(string); ok {
- fValue = linkWithTextRegex.ReplaceAllString(fValue, "[${2}](${1})")
- field["value"] = fValue
- fields[j] = field
- }
- }
- attachment["fields"] = fields
- list[i] = attachment
- }
- }
- }
- post.AddProp(key, list)
+ if attachments, success := val.([]*model.SlackAttachment); success {
+ parseSlackAttachment(post, attachments)
}
} else if key != "from_webhook" {
post.AddProp(key, val)
diff --git a/app/slackimport.go b/app/slackimport.go
index ced0f6581..fcdd765bb 100644
--- a/app/slackimport.go
+++ b/app/slackimport.go
@@ -40,17 +40,17 @@ type SlackFile struct {
}
type SlackPost struct {
- User string `json:"user"`
- BotId string `json:"bot_id"`
- BotUsername string `json:"username"`
- Text string `json:"text"`
- TimeStamp string `json:"ts"`
- Type string `json:"type"`
- SubType string `json:"subtype"`
- Comment *SlackComment `json:"comment"`
- Upload bool `json:"upload"`
- File *SlackFile `json:"file"`
- Attachments []SlackAttachment `json:"attachments"`
+ User string `json:"user"`
+ BotId string `json:"bot_id"`
+ BotUsername string `json:"username"`
+ Text string `json:"text"`
+ TimeStamp string `json:"ts"`
+ Type string `json:"type"`
+ SubType string `json:"subtype"`
+ Comment *SlackComment `json:"comment"`
+ Upload bool `json:"upload"`
+ File *SlackFile `json:"file"`
+ Attachments []*model.SlackAttachment `json:"attachments"`
}
type SlackComment struct {
@@ -58,13 +58,6 @@ type SlackComment struct {
Comment string `json:"comment"`
}
-type SlackAttachment struct {
- Id int `json:"id"`
- Text string `json:"text"`
- Pretext string `json:"pretext"`
- Fields []map[string]interface{} `json:"fields"`
-}
-
func truncateRunes(s string, i int) string {
runes := []rune(s)
if len(runes) > i {
@@ -284,15 +277,7 @@ func SlackAddPosts(teamId string, channel *model.Channel, posts []SlackPost, use
props := make(model.StringInterface)
props["override_username"] = sPost.BotUsername
if len(sPost.Attachments) > 0 {
- var mAttachments []interface{}
- for _, attachment := range sPost.Attachments {
- mAttachments = append(mAttachments, map[string]interface{}{
- "text": attachment.Text,
- "pretext": attachment.Pretext,
- "fields": attachment.Fields,
- })
- }
- props["attachments"] = mAttachments
+ props["attachments"] = sPost.Attachments
}
post := &model.Post{
diff --git a/app/webhook.go b/app/webhook.go
index f58b267b7..98e1080b6 100644
--- a/app/webhook.go
+++ b/app/webhook.go
@@ -150,37 +150,8 @@ func CreateWebhookPost(userId, teamId, channelId, text, overrideUsername, overri
if len(props) > 0 {
for key, val := range props {
if key == "attachments" {
- if list, success := val.([]interface{}); success {
- // parse attachment links into Markdown format
- for i, aInt := range list {
- attachment := aInt.(map[string]interface{})
- if aText, ok := attachment["text"].(string); ok {
- aText = linkWithTextRegex.ReplaceAllString(aText, "[${2}](${1})")
- attachment["text"] = aText
- list[i] = attachment
- }
- if aText, ok := attachment["pretext"].(string); ok {
- aText = linkWithTextRegex.ReplaceAllString(aText, "[${2}](${1})")
- attachment["pretext"] = aText
- list[i] = attachment
- }
- if fVal, ok := attachment["fields"]; ok {
- if fields, ok := fVal.([]interface{}); ok {
- // parse attachment field links into Markdown format
- for j, fInt := range fields {
- field := fInt.(map[string]interface{})
- if fValue, ok := field["value"].(string); ok {
- fValue = linkWithTextRegex.ReplaceAllString(fValue, "[${2}](${1})")
- field["value"] = fValue
- fields[j] = field
- }
- }
- attachment["fields"] = fields
- list[i] = attachment
- }
- }
- }
- post.AddProp(key, list)
+ if attachments, success := val.([]*model.SlackAttachment); success {
+ parseSlackAttachment(post, attachments)
}
} else if key != "override_icon_url" && key != "override_username" && key != "from_webhook" {
post.AddProp(key, val)
@@ -452,7 +423,7 @@ func HandleIncomingWebhook(hookId string, req *model.IncomingWebhookRequest, sit
webhookType := req.Type
// attachments is in here for slack compatibility
- if req.Attachments != nil {
+ if len(req.Attachments) > 0 {
if len(req.Props) == 0 {
req.Props = make(model.StringInterface)
}
diff --git a/model/slack_attachment.go b/model/slack_attachment.go
index d68fe406f..e1639f2af 100644
--- a/model/slack_attachment.go
+++ b/model/slack_attachment.go
@@ -4,6 +4,7 @@
package model
type SlackAttachment struct {
+ Id int64 `json:"id"`
Fallback string `json:"fallback"`
Color string `json:"color"`
Pretext string `json:"pretext"`
@@ -18,7 +19,7 @@ type SlackAttachment struct {
ThumbURL string `json:"thumb_url"`
Footer string `json:"footer"`
FooterIcon string `json:"footer_icon"`
- Timestamp int64 `json:"ts"`
+ Timestamp interface{} `json:"ts"` // This is either a string or an int64
}
type SlackAttachmentField struct {