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  }