func (s SqlWebhookStore) SaveOutgoing(webhook *model.OutgoingWebhook) StoreChannel { storeChannel := make(StoreChannel) go func() { result := StoreResult{} if len(webhook.Id) > 0 { result.Err = model.NewAppError("SqlWebhookStore.SaveOutgoing", "You cannot overwrite an existing OutgoingWebhook", "id="+webhook.Id) storeChannel <- result close(storeChannel) return } webhook.PreSave() if result.Err = webhook.IsValid(); result.Err != nil { storeChannel <- result close(storeChannel) return } if err := s.GetMaster().Insert(webhook); err != nil { result.Err = model.NewAppError("SqlWebhookStore.SaveOutgoing", "We couldn't save the OutgoingWebhook", "id="+webhook.Id+", "+err.Error()) } else { result.Data = webhook } storeChannel <- result close(storeChannel) }() return storeChannel }
func (s SqlWebhookStore) SaveOutgoing(webhook *model.OutgoingWebhook) StoreChannel { storeChannel := make(StoreChannel) go func() { result := StoreResult{} if len(webhook.Id) > 0 { result.Err = model.NewLocAppError("SqlWebhookStore.SaveOutgoing", "store.sql_webhooks.save_outgoing.override.app_error", nil, "id="+webhook.Id) storeChannel <- result close(storeChannel) return } webhook.PreSave() if result.Err = webhook.IsValid(); result.Err != nil { storeChannel <- result close(storeChannel) return } if err := s.GetMaster().Insert(webhook); err != nil { result.Err = model.NewLocAppError("SqlWebhookStore.SaveOutgoing", "store.sql_webhooks.save_outgoing.app_error", nil, "id="+webhook.Id+", "+err.Error()) } else { result.Data = webhook } storeChannel <- result close(storeChannel) }() return storeChannel }
func regenOutgoingHookToken(c *Context, w http.ResponseWriter, r *http.Request) { if !utils.Cfg.ServiceSettings.EnableIncomingWebhooks { c.Err = model.NewLocAppError("regenOutgoingHookToken", "api.webhook.regen_outgoing_token.disabled.app_error", nil, "") c.Err.StatusCode = http.StatusNotImplemented return } if *utils.Cfg.ServiceSettings.EnableOnlyAdminIntegrations { if !(c.IsSystemAdmin() || c.IsTeamAdmin()) { c.Err = model.NewLocAppError("regenOutgoingHookToken", "api.command.admin_only.app_error", nil, "") c.Err.StatusCode = http.StatusForbidden return } } c.LogAudit("attempt") props := model.MapFromJson(r.Body) id := props["id"] if len(id) == 0 { c.SetInvalidParam("regenOutgoingHookToken", "id") return } var hook *model.OutgoingWebhook if result := <-Srv.Store.Webhook().GetOutgoing(id); result.Err != nil { c.Err = result.Err return } else { hook = result.Data.(*model.OutgoingWebhook) if c.Session.TeamId != hook.TeamId && c.Session.UserId != hook.CreatorId && !c.IsTeamAdmin() { c.LogAudit("fail - inappropriate permissions") c.Err = model.NewLocAppError("regenOutgoingHookToken", "api.webhook.regen_outgoing_token.permissions.app_error", nil, "user_id="+c.Session.UserId) return } } hook.Token = model.NewId() if result := <-Srv.Store.Webhook().UpdateOutgoing(hook); result.Err != nil { c.Err = result.Err return } else { w.Write([]byte(result.Data.(*model.OutgoingWebhook).ToJson())) } }
func TestWebhookStoreSaveOutgoing(t *testing.T) { Setup() o1 := model.OutgoingWebhook{} o1.ChannelId = model.NewId() o1.CreatorId = model.NewId() o1.TeamId = model.NewId() o1.CallbackURLs = []string{"http://nowhere.com/"} if err := (<-store.Webhook().SaveOutgoing(&o1)).Err; err != nil { t.Fatal("couldn't save item", err) } if err := (<-store.Webhook().SaveOutgoing(&o1)).Err; err == nil { t.Fatal("shouldn't be able to update from save") } }
func regenOutgoingHookToken(c *Context, w http.ResponseWriter, r *http.Request) { if !utils.Cfg.ServiceSettings.EnableIncomingWebhooks { c.Err = model.NewAppError("regenOutgoingHookToken", "Outgoing webhooks have been disabled by the system admin.", "") c.Err.StatusCode = http.StatusNotImplemented return } c.LogAudit("attempt") props := model.MapFromJson(r.Body) id := props["id"] if len(id) == 0 { c.SetInvalidParam("regenOutgoingHookToken", "id") return } var hook *model.OutgoingWebhook if result := <-Srv.Store.Webhook().GetOutgoing(id); result.Err != nil { c.Err = result.Err return } else { hook = result.Data.(*model.OutgoingWebhook) if c.Session.UserId != hook.CreatorId && !c.IsTeamAdmin() { c.LogAudit("fail - inappropriate permissions") c.Err = model.NewAppError("regenOutgoingHookToken", "Inappropriate permissions to regenerate outcoming webhook token", "user_id="+c.Session.UserId) return } } hook.Token = model.NewId() if result := <-Srv.Store.Webhook().UpdateOutgoing(hook); result.Err != nil { c.Err = result.Err return } else { w.Write([]byte(result.Data.(*model.OutgoingWebhook).ToJson())) } }
func (s SqlWebhookStore) UpdateOutgoing(hook *model.OutgoingWebhook) StoreChannel { storeChannel := make(StoreChannel) go func() { result := StoreResult{} hook.UpdateAt = model.GetMillis() if _, err := s.GetMaster().Update(hook); err != nil { result.Err = model.NewAppError("SqlWebhookStore.UpdateOutgoing", "We couldn't update the webhook", "id="+hook.Id+", "+err.Error()) } else { result.Data = hook } storeChannel <- result close(storeChannel) }() return storeChannel }
func (s SqlWebhookStore) UpdateOutgoing(hook *model.OutgoingWebhook) StoreChannel { storeChannel := make(StoreChannel, 1) go func() { result := StoreResult{} hook.UpdateAt = model.GetMillis() if _, err := s.GetMaster().Update(hook); err != nil { result.Err = model.NewLocAppError("SqlWebhookStore.UpdateOutgoing", "store.sql_webhooks.update_outgoing.app_error", nil, "id="+hook.Id+", "+err.Error()) } else { result.Data = hook } storeChannel <- result close(storeChannel) }() return storeChannel }