summaryrefslogtreecommitdiffstats
path: root/app/webhook.go
diff options
context:
space:
mode:
authorCorey Hulen <corey@hulen.com>2017-06-02 09:08:04 -0700
committerChristopher Speller <crspeller@gmail.com>2017-06-02 12:08:04 -0400
commit6a54f3c4890135ea925365e59628afbb58ff6f87 (patch)
tree6e489ad8f03c9499d4c31c2b8aca40820666b316 /app/webhook.go
parent1c9ec861fd39ea3bb3361813c3a44483da3e3f56 (diff)
downloadchat-6a54f3c4890135ea925365e59628afbb58ff6f87.tar.gz
chat-6a54f3c4890135ea925365e59628afbb58ff6f87.tar.bz2
chat-6a54f3c4890135ea925365e59628afbb58ff6f87.zip
PLT-6581 breakup webhooks greater than 4K into multiple posts (#6530)
Diffstat (limited to 'app/webhook.go')
-rw-r--r--app/webhook.go37
1 files changed, 29 insertions, 8 deletions
diff --git a/app/webhook.go b/app/webhook.go
index 1ec96a32e..6a7bb16e1 100644
--- a/app/webhook.go
+++ b/app/webhook.go
@@ -150,11 +150,37 @@ func CreateWebhookPost(userId, teamId, channelId, text, overrideUsername, overri
}
}
- if _, err := CreatePost(post, teamId, false); err != nil {
- return nil, model.NewLocAppError("CreateWebhookPost", "api.post.create_webhook_post.creating.app_error", nil, "err="+err.Message)
+ splits := make([]string, 0)
+ remainingText := post.Message
+
+ for len(remainingText) > model.POST_MESSAGE_MAX_RUNES {
+ splits = append(splits, remainingText[:model.POST_MESSAGE_MAX_RUNES])
+ remainingText = remainingText[model.POST_MESSAGE_MAX_RUNES:]
+ }
+
+ splits = append(splits, remainingText)
+
+ var firstPost *model.Post = nil
+
+ for _, txt := range splits {
+ post.Id = ""
+ post.UpdateAt = 0
+ post.CreateAt = 0
+ post.Message = txt
+ if _, err := CreatePost(post, teamId, false); err != nil {
+ return nil, model.NewLocAppError("CreateWebhookPost", "api.post.create_webhook_post.creating.app_error", nil, "err="+err.Message)
+ }
+
+ if firstPost == nil {
+ if len(splits) > 1 {
+ firstPost = model.PostFromJson(strings.NewReader(post.ToJson()))
+ } else {
+ firstPost = post
+ }
+ }
}
- return post, nil
+ return firstPost, nil
}
func CreateIncomingWebhookForChannel(creatorId string, channel *model.Channel, hook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError) {
@@ -430,11 +456,6 @@ func HandleIncomingWebhook(hookId string, req *model.IncomingWebhookRequest) *mo
return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.text.app_error", nil, "", http.StatusBadRequest)
}
- textSize := utf8.RuneCountInString(text)
- if textSize > model.POST_MESSAGE_MAX_RUNES {
- return model.NewAppError("HandleIncomingWebhook", "web.incoming_webhook.text.length.app_error", map[string]interface{}{"Max": model.POST_MESSAGE_MAX_RUNES, "Actual": textSize}, "", http.StatusBadRequest)
- }
-
channelName := req.ChannelName
webhookType := req.Type