summaryrefslogtreecommitdiffstats
path: root/api4/webhook.go
diff options
context:
space:
mode:
authorPoornima <mpoornima@users.noreply.github.com>2017-03-12 04:10:56 +0530
committerenahum <nahumhbl@gmail.com>2017-03-11 19:40:56 -0300
commit482a0fb5fc248b1ec61db35299dc3e6d963ad5ab (patch)
tree1f957f78b3a053366ca20fbcff8b274ea5eac4a0 /api4/webhook.go
parent11f1859de12be22726a93bb0fd201f3d692022a0 (diff)
downloadchat-482a0fb5fc248b1ec61db35299dc3e6d963ad5ab.tar.gz
chat-482a0fb5fc248b1ec61db35299dc3e6d963ad5ab.tar.bz2
chat-482a0fb5fc248b1ec61db35299dc3e6d963ad5ab.zip
Adding functionality to get & delete incoming webhooks (#5648)
Diffstat (limited to 'api4/webhook.go')
-rw-r--r--api4/webhook.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/api4/webhook.go b/api4/webhook.go
index 9efab6ae2..19a851390 100644
--- a/api4/webhook.go
+++ b/api4/webhook.go
@@ -17,6 +17,9 @@ func InitWebhook() {
BaseRoutes.IncomingHooks.Handle("", ApiSessionRequired(createIncomingHook)).Methods("POST")
BaseRoutes.IncomingHooks.Handle("", ApiSessionRequired(getIncomingHooks)).Methods("GET")
+
+ BaseRoutes.IncomingHook.Handle("", ApiSessionRequired(getIncomingHook)).Methods("GET")
+ BaseRoutes.IncomingHook.Handle("", ApiSessionRequired(deleteIncomingHook)).Methods("DELETE")
}
func createIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
@@ -83,3 +86,75 @@ func getIncomingHooks(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write([]byte(model.IncomingWebhookListToJson(hooks)))
}
+
+func getIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
+ c.RequireHookId()
+ if c.Err != nil {
+ return
+ }
+
+ hookID := c.Params.HookId
+
+ var err *model.AppError
+ var hook *model.IncomingWebhook
+ var channel *model.Channel
+
+ if hook, err = app.GetIncomingWebhook(hookID); err != nil {
+ c.Err = err
+ return
+ } else {
+ channel, err = app.GetChannel(hook.ChannelId)
+ if err != nil {
+ c.Err = err
+ return
+ }
+
+ if !app.SessionHasPermissionToTeam(c.Session, hook.TeamId, model.PERMISSION_MANAGE_WEBHOOKS) ||
+ (channel.Type != model.CHANNEL_OPEN && !app.SessionHasPermissionToChannel(c.Session, hook.ChannelId, model.PERMISSION_READ_CHANNEL)) {
+ c.LogAudit("fail - bad permissions")
+ c.SetPermissionError(model.PERMISSION_MANAGE_WEBHOOKS)
+ return
+ } else {
+ w.Write([]byte(hook.ToJson()))
+ return
+ }
+ }
+}
+
+func deleteIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
+ c.RequireHookId()
+ if c.Err != nil {
+ return
+ }
+
+ hookID := c.Params.HookId
+
+ var err *model.AppError
+ var hook *model.IncomingWebhook
+ var channel *model.Channel
+
+ if hook, err = app.GetIncomingWebhook(hookID); err != nil {
+ c.Err = err
+ return
+ } else {
+ channel, err = app.GetChannel(hook.ChannelId)
+ if err != nil {
+ c.Err = err
+ return
+ }
+
+ if !app.SessionHasPermissionToTeam(c.Session, hook.TeamId, model.PERMISSION_MANAGE_WEBHOOKS) ||
+ (channel.Type != model.CHANNEL_OPEN && !app.SessionHasPermissionToChannel(c.Session, hook.ChannelId, model.PERMISSION_READ_CHANNEL)) {
+ c.LogAudit("fail - bad permissions")
+ c.SetPermissionError(model.PERMISSION_MANAGE_WEBHOOKS)
+ return
+ } else {
+ if err = app.DeleteIncomingWebhook(hookID); err != nil {
+ c.Err = err
+ return
+ }
+
+ ReturnStatusOK(w)
+ }
+ }
+}