github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/api4/webhook_local.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package api4 5 6 import ( 7 "net/http" 8 9 "github.com/masterhung0112/hk_server/v5/audit" 10 "github.com/masterhung0112/hk_server/v5/model" 11 ) 12 13 func (api *API) InitWebhookLocal() { 14 api.BaseRoutes.IncomingHooks.Handle("", api.ApiLocal(localCreateIncomingHook)).Methods("POST") 15 api.BaseRoutes.IncomingHooks.Handle("", api.ApiLocal(getIncomingHooks)).Methods("GET") 16 api.BaseRoutes.IncomingHook.Handle("", api.ApiLocal(getIncomingHook)).Methods("GET") 17 api.BaseRoutes.IncomingHook.Handle("", api.ApiLocal(updateIncomingHook)).Methods("PUT") 18 api.BaseRoutes.IncomingHook.Handle("", api.ApiLocal(deleteIncomingHook)).Methods("DELETE") 19 20 api.BaseRoutes.OutgoingHooks.Handle("", api.ApiLocal(localCreateOutgoingHook)).Methods("POST") 21 api.BaseRoutes.OutgoingHooks.Handle("", api.ApiLocal(getOutgoingHooks)).Methods("GET") 22 api.BaseRoutes.OutgoingHook.Handle("", api.ApiLocal(getOutgoingHook)).Methods("GET") 23 api.BaseRoutes.OutgoingHook.Handle("", api.ApiLocal(updateOutgoingHook)).Methods("PUT") 24 api.BaseRoutes.OutgoingHook.Handle("", api.ApiLocal(deleteOutgoingHook)).Methods("DELETE") 25 } 26 27 func localCreateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { 28 hook := model.IncomingWebhookFromJson(r.Body) 29 if hook == nil { 30 c.SetInvalidParam("incoming_webhook") 31 return 32 } 33 34 if hook.UserId == "" { 35 c.SetInvalidParam("user_id") 36 return 37 } 38 39 channel, err := c.App.GetChannel(hook.ChannelId) 40 if err != nil { 41 c.Err = err 42 return 43 } 44 45 if _, err = c.App.GetUser(hook.UserId); err != nil { 46 c.Err = err 47 return 48 } 49 50 auditRec := c.MakeAuditRecord("localCreateIncomingHook", audit.Fail) 51 defer c.LogAuditRec(auditRec) 52 auditRec.AddMeta("channel", channel) 53 c.LogAudit("attempt") 54 55 incomingHook, err := c.App.CreateIncomingWebhookForChannel(hook.UserId, channel, hook) 56 if err != nil { 57 c.Err = err 58 return 59 } 60 61 auditRec.Success() 62 auditRec.AddMeta("hook", incomingHook) 63 c.LogAudit("success") 64 65 w.WriteHeader(http.StatusCreated) 66 w.Write([]byte(incomingHook.ToJson())) 67 } 68 69 func localCreateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { 70 hook := model.OutgoingWebhookFromJson(r.Body) 71 if hook == nil { 72 c.SetInvalidParam("outgoing_webhook") 73 return 74 } 75 76 auditRec := c.MakeAuditRecord("createOutgoingHook", audit.Fail) 77 defer c.LogAuditRec(auditRec) 78 auditRec.AddMeta("hook_id", hook.Id) 79 c.LogAudit("attempt") 80 81 if hook.CreatorId == "" { 82 c.SetInvalidParam("creator_id") 83 return 84 } 85 86 _, err := c.App.GetUser(hook.CreatorId) 87 if err != nil { 88 c.Err = err 89 return 90 } 91 92 rhook, err := c.App.CreateOutgoingWebhook(hook) 93 if err != nil { 94 c.LogAudit("fail") 95 c.Err = err 96 return 97 } 98 99 auditRec.Success() 100 auditRec.AddMeta("hook_display", rhook.DisplayName) 101 auditRec.AddMeta("channel_id", rhook.ChannelId) 102 auditRec.AddMeta("team_id", rhook.TeamId) 103 c.LogAudit("success") 104 105 w.WriteHeader(http.StatusCreated) 106 w.Write([]byte(rhook.ToJson())) 107 }