summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/command.go72
-rw-r--r--api/post.go11
-rw-r--r--api/user.go6
-rw-r--r--api/webhook.go2
4 files changed, 74 insertions, 17 deletions
diff --git a/api/command.go b/api/command.go
index a8573cdcc..bebe6629c 100644
--- a/api/command.go
+++ b/api/command.go
@@ -4,6 +4,7 @@
package api
import (
+ "crypto/tls"
"fmt"
"io/ioutil"
"net/http"
@@ -52,6 +53,8 @@ func InitCommand(r *mux.Router) {
sr.Handle("/test", ApiAppHandler(testCommand)).Methods("POST")
sr.Handle("/test", ApiAppHandler(testCommand)).Methods("GET")
+ sr.Handle("/test_e", ApiAppHandler(testEphemeralCommand)).Methods("POST")
+ sr.Handle("/test_e", ApiAppHandler(testEphemeralCommand)).Methods("GET")
}
func listCommands(c *Context, w http.ResponseWriter, r *http.Request) {
@@ -107,9 +110,8 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
provider := GetCommandProvider(trigger)
if provider != nil {
-
response := provider.DoCommand(c, channelId, message)
- handleResponse(c, w, response, channelId)
+ handleResponse(c, w, response, channelId, provider.GetCommand(c))
return
} else {
chanChan := Srv.Store.Channel().Get(channelId)
@@ -172,7 +174,11 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
method = "GET"
}
- client := &http.Client{}
+ tr := &http.Transport{
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: *utils.Cfg.ServiceSettings.EnableInsecureOutgoingConnections},
+ }
+ client := &http.Client{Transport: tr}
+
req, _ := http.NewRequest(method, cmd.URL, strings.NewReader(p.Encode()))
req.Header.Set("Accept", "application/json")
if cmd.Method == model.COMMAND_METHOD_POST {
@@ -187,7 +193,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
if response == nil {
c.Err = model.NewLocAppError("command", "api.command.execute_command.failed_empty.app_error", map[string]interface{}{"Trigger": trigger}, "")
} else {
- handleResponse(c, w, response, channelId)
+ handleResponse(c, w, response, channelId, cmd)
}
} else {
body, _ := ioutil.ReadAll(resp.Body)
@@ -205,21 +211,41 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err = model.NewLocAppError("command", "api.command.execute_command.not_found.app_error", map[string]interface{}{"Trigger": trigger}, "")
}
-func handleResponse(c *Context, w http.ResponseWriter, response *model.CommandResponse, channelId string) {
+func handleResponse(c *Context, w http.ResponseWriter, response *model.CommandResponse, channelId string, cmd *model.Command) {
+
+ post := &model.Post{}
+ post.ChannelId = channelId
+ post.AddProp("from_webhook", "true")
+
+ if utils.Cfg.ServiceSettings.EnablePostUsernameOverride {
+ if len(cmd.Username) != 0 {
+ post.AddProp("override_username", cmd.Username)
+ } else {
+ post.AddProp("override_username", model.DEFAULT_WEBHOOK_USERNAME)
+ }
+ }
+
+ if utils.Cfg.ServiceSettings.EnablePostIconOverride {
+ if len(cmd.IconURL) != 0 {
+ post.AddProp("override_icon_url", cmd.IconURL)
+ } else {
+ post.AddProp("override_icon_url", model.DEFAULT_WEBHOOK_ICON)
+ }
+ }
+
if response.ResponseType == model.COMMAND_RESPONSE_TYPE_IN_CHANNEL {
- post := &model.Post{}
- post.ChannelId = channelId
post.Message = response.Text
if _, err := CreatePost(c, post, true); err != nil {
c.Err = model.NewLocAppError("command", "api.command.execute_command.save.app_error", nil, "")
}
} else if response.ResponseType == model.COMMAND_RESPONSE_TYPE_EPHEMERAL {
- // post := &model.Post{}
- // post.ChannelId = channelId
- // post.Message = "TODO_EPHEMERAL: " + response.Text
- // if _, err := CreatePost(c, post, true); err != nil {
- // c.Err = model.NewLocAppError("command", "api.command.execute_command.save.app_error", nil, "")
- // }
+ post.Message = response.Text
+ post.CreateAt = model.GetMillis()
+ SendEphemeralPost(
+ c.Session.TeamId,
+ c.Session.UserId,
+ post,
+ )
}
w.Write([]byte(response.ToJson()))
@@ -399,3 +425,23 @@ func testCommand(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write([]byte(rc.ToJson()))
}
+
+func testEphemeralCommand(c *Context, w http.ResponseWriter, r *http.Request) {
+ r.ParseForm()
+
+ msg := ""
+ if r.Method == "POST" {
+ msg = msg + "\ntoken=" + r.FormValue("token")
+ msg = msg + "\nteam_domain=" + r.FormValue("team_domain")
+ } else {
+ body, _ := ioutil.ReadAll(r.Body)
+ msg = string(body)
+ }
+
+ rc := &model.CommandResponse{
+ Text: "test command response " + msg,
+ ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL,
+ }
+
+ w.Write([]byte(rc.ToJson()))
+}
diff --git a/api/post.go b/api/post.go
index c17da262f..fadabd66e 100644
--- a/api/post.go
+++ b/api/post.go
@@ -4,6 +4,7 @@
package api
import (
+ "crypto/tls"
"fmt"
l4g "github.com/alecthomas/log4go"
"github.com/gorilla/mux"
@@ -401,7 +402,10 @@ func handleWebhookEventsAndForget(c *Context, post *model.Post, team *model.Team
p.Set("text", post.Message)
p.Set("trigger_word", firstWord)
- client := &http.Client{}
+ tr := &http.Transport{
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: *utils.Cfg.ServiceSettings.EnableInsecureOutgoingConnections},
+ }
+ client := &http.Client{Transport: tr}
for _, url := range hook.CallbackURLs {
go func(url string) {
@@ -682,7 +686,10 @@ func sendNotifications(c *Context, post *model.Post, team *model.Team, channel *
msg.Message = senderName + userLocale("api.post.send_notifications_and_forget.push_mention") + channelName
}
- httpClient := http.Client{}
+ tr := &http.Transport{
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: *utils.Cfg.ServiceSettings.EnableInsecureOutgoingConnections},
+ }
+ httpClient := &http.Client{Transport: tr}
request, _ := http.NewRequest("POST", *utils.Cfg.EmailSettings.PushNotificationServer+"/api/v1/send_push", strings.NewReader(msg.ToJson()))
l4g.Debug(utils.T("api.post.send_notifications_and_forget.push_notification.debug"), msg.DeviceId, msg.Message)
diff --git a/api/user.go b/api/user.go
index 9926f3ff3..507c83d28 100644
--- a/api/user.go
+++ b/api/user.go
@@ -5,6 +5,7 @@ package api
import (
"bytes"
+ "crypto/tls"
b64 "encoding/base64"
"fmt"
l4g "github.com/alecthomas/log4go"
@@ -1960,7 +1961,10 @@ func AuthorizeOAuthUser(service, code, state, redirectUri string) (io.ReadCloser
p.Set("grant_type", model.ACCESS_TOKEN_GRANT_TYPE)
p.Set("redirect_uri", redirectUri)
- client := &http.Client{}
+ tr := &http.Transport{
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: *utils.Cfg.ServiceSettings.EnableInsecureOutgoingConnections},
+ }
+ client := &http.Client{Transport: tr}
req, _ := http.NewRequest("POST", sso.TokenEndpoint, strings.NewReader(p.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
diff --git a/api/webhook.go b/api/webhook.go
index 3906d09be..c0f8ea506 100644
--- a/api/webhook.go
+++ b/api/webhook.go
@@ -238,7 +238,7 @@ func getOutgoingHooks(c *Context, w http.ResponseWriter, r *http.Request) {
}
func deleteOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
- if !utils.Cfg.ServiceSettings.EnableIncomingWebhooks {
+ if !utils.Cfg.ServiceSettings.EnableOutgoingWebhooks {
c.Err = model.NewLocAppError("deleteOutgoingHook", "api.webhook.delete_outgoing.disabled.app_error", nil, "")
c.Err.StatusCode = http.StatusNotImplemented
return