Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

webhook_system.go 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package webhook
  4. import (
  5. "context"
  6. "fmt"
  7. "code.gitea.io/gitea/models/db"
  8. "code.gitea.io/gitea/modules/util"
  9. )
  10. // GetDefaultWebhooks returns all admin-default webhooks.
  11. func GetDefaultWebhooks(ctx context.Context) ([]*Webhook, error) {
  12. webhooks := make([]*Webhook, 0, 5)
  13. return webhooks, db.GetEngine(ctx).
  14. Where("repo_id=? AND owner_id=? AND is_system_webhook=?", 0, 0, false).
  15. Find(&webhooks)
  16. }
  17. // GetSystemOrDefaultWebhook returns admin system or default webhook by given ID.
  18. func GetSystemOrDefaultWebhook(ctx context.Context, id int64) (*Webhook, error) {
  19. webhook := &Webhook{ID: id}
  20. has, err := db.GetEngine(ctx).
  21. Where("repo_id=? AND owner_id=?", 0, 0).
  22. Get(webhook)
  23. if err != nil {
  24. return nil, err
  25. } else if !has {
  26. return nil, ErrWebhookNotExist{ID: id}
  27. }
  28. return webhook, nil
  29. }
  30. // GetSystemWebhooks returns all admin system webhooks.
  31. func GetSystemWebhooks(ctx context.Context, isActive util.OptionalBool) ([]*Webhook, error) {
  32. webhooks := make([]*Webhook, 0, 5)
  33. if isActive.IsNone() {
  34. return webhooks, db.GetEngine(ctx).
  35. Where("repo_id=? AND owner_id=? AND is_system_webhook=?", 0, 0, true).
  36. Find(&webhooks)
  37. }
  38. return webhooks, db.GetEngine(ctx).
  39. Where("repo_id=? AND owner_id=? AND is_system_webhook=? AND is_active = ?", 0, 0, true, isActive.IsTrue()).
  40. Find(&webhooks)
  41. }
  42. // DeleteDefaultSystemWebhook deletes an admin-configured default or system webhook (where Org and Repo ID both 0)
  43. func DeleteDefaultSystemWebhook(ctx context.Context, id int64) error {
  44. return db.WithTx(ctx, func(ctx context.Context) error {
  45. count, err := db.GetEngine(ctx).
  46. Where("repo_id=? AND owner_id=?", 0, 0).
  47. Delete(&Webhook{ID: id})
  48. if err != nil {
  49. return err
  50. } else if count == 0 {
  51. return ErrWebhookNotExist{ID: id}
  52. }
  53. _, err = db.DeleteByBean(ctx, &HookTask{HookID: id})
  54. return err
  55. })
  56. }
  57. // CopyDefaultWebhooksToRepo creates copies of the default webhooks in a new repo
  58. func CopyDefaultWebhooksToRepo(ctx context.Context, repoID int64) error {
  59. ws, err := GetDefaultWebhooks(ctx)
  60. if err != nil {
  61. return fmt.Errorf("GetDefaultWebhooks: %v", err)
  62. }
  63. for _, w := range ws {
  64. w.ID = 0
  65. w.RepoID = repoID
  66. if err := CreateWebhook(ctx, w); err != nil {
  67. return fmt.Errorf("CreateWebhook: %v", err)
  68. }
  69. }
  70. return nil
  71. }