From e7b25f4cd8b7d87b99153fd4a901d3f9f92d7b0d Mon Sep 17 00:00:00 2001 From: Alexander Smaga Date: Mon, 17 Oct 2016 15:12:56 +0300 Subject: GH-4187 Create direct channel during incoming webhook if not exists (#4206) --- api/webhook.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'api/webhook.go') diff --git a/api/webhook.go b/api/webhook.go index 2995a4a9d..2daac03f2 100644 --- a/api/webhook.go +++ b/api/webhook.go @@ -412,6 +412,7 @@ func incomingWebhook(c *Context, w http.ResponseWriter, r *http.Request) { var channel *model.Channel var cchan store.StoreChannel + var directUserId string if len(channelName) != 0 { if channelName[0] == '@' { @@ -419,7 +420,8 @@ func incomingWebhook(c *Context, w http.ResponseWriter, r *http.Request) { c.Err = model.NewLocAppError("incomingWebhook", "web.incoming_webhook.user.app_error", nil, "err="+result.Err.Message) return } else { - channelName = model.GetDMNameFromIds(result.Data.(*model.User).Id, hook.UserId) + directUserId = result.Data.(*model.User).Id + channelName = model.GetDMNameFromIds(directUserId, hook.UserId) } } else if channelName[0] == '#' { channelName = channelName[1:] @@ -433,7 +435,16 @@ func incomingWebhook(c *Context, w http.ResponseWriter, r *http.Request) { overrideUsername := parsedRequest.Username overrideIconUrl := parsedRequest.IconURL - if result := <-cchan; result.Err != nil { + result := <-cchan + if result.Err != nil && result.Err.Id == store.MISSING_CHANNEL_ERROR && directUserId != "" { + newChanResult := <-Srv.Store.Channel().CreateDirectChannel(directUserId, hook.UserId) + if newChanResult.Err != nil { + c.Err = model.NewLocAppError("incomingWebhook", "web.incoming_webhook.channel.app_error", nil, "err="+newChanResult.Err.Message) + return + } else { + channel = newChanResult.Data.(*model.Channel) + } + } else if result.Err != nil { c.Err = model.NewLocAppError("incomingWebhook", "web.incoming_webhook.channel.app_error", nil, "err="+result.Err.Message) return } else { -- cgit v1.2.3-1-g7c22