PLT-6581 breakup webhooks greater than 4K into multiple posts (#6530)
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
1c9ec861fd
Коммит
6a54f3c489
@@ -1050,8 +1050,8 @@ func TestIncomingWebhooks(t *testing.T) {
|
|||||||
tooLongText += "a"
|
tooLongText += "a"
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := Client.DoPost(url, "{\"text\":\""+tooLongText+"\"}", "application/json"); err == nil || err.StatusCode != http.StatusBadRequest {
|
if _, err := Client.DoPost(url, "{\"text\":\""+tooLongText+"\"}", "application/json"); err != nil {
|
||||||
t.Fatal("should have failed - text too long")
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
attachmentPayload = `{
|
attachmentPayload = `{
|
||||||
|
|||||||
@@ -150,11 +150,37 @@ func CreateWebhookPost(userId, teamId, channelId, text, overrideUsername, overri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 {
|
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)
|
return nil, model.NewLocAppError("CreateWebhookPost", "api.post.create_webhook_post.creating.app_error", nil, "err="+err.Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
return post, nil
|
if firstPost == nil {
|
||||||
|
if len(splits) > 1 {
|
||||||
|
firstPost = model.PostFromJson(strings.NewReader(post.ToJson()))
|
||||||
|
} else {
|
||||||
|
firstPost = post
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return firstPost, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateIncomingWebhookForChannel(creatorId string, channel *model.Channel, hook *model.IncomingWebhook) (*model.IncomingWebhook, *model.AppError) {
|
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)
|
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
|
channelName := req.ChannelName
|
||||||
webhookType := req.Type
|
webhookType := req.Type
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user