You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

secrets.go 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package secrets
  4. import (
  5. "context"
  6. "code.gitea.io/gitea/models/db"
  7. secret_model "code.gitea.io/gitea/models/secret"
  8. )
  9. func CreateOrUpdateSecret(ctx context.Context, ownerID, repoID int64, name, data string) (*secret_model.Secret, bool, error) {
  10. if err := ValidateName(name); err != nil {
  11. return nil, false, err
  12. }
  13. s, err := secret_model.FindSecrets(ctx, secret_model.FindSecretsOptions{
  14. OwnerID: ownerID,
  15. RepoID: repoID,
  16. Name: name,
  17. })
  18. if err != nil {
  19. return nil, false, err
  20. }
  21. if len(s) == 0 {
  22. s, err := secret_model.InsertEncryptedSecret(ctx, ownerID, repoID, name, data)
  23. if err != nil {
  24. return nil, false, err
  25. }
  26. return s, true, nil
  27. }
  28. if err := secret_model.UpdateSecret(ctx, s[0].ID, data); err != nil {
  29. return nil, false, err
  30. }
  31. return s[0], false, nil
  32. }
  33. func DeleteSecretByID(ctx context.Context, ownerID, repoID, secretID int64) error {
  34. s, err := secret_model.FindSecrets(ctx, secret_model.FindSecretsOptions{
  35. OwnerID: ownerID,
  36. RepoID: repoID,
  37. SecretID: secretID,
  38. })
  39. if err != nil {
  40. return err
  41. }
  42. if len(s) != 1 {
  43. return secret_model.ErrSecretNotFound{}
  44. }
  45. return deleteSecret(ctx, s[0])
  46. }
  47. func DeleteSecretByName(ctx context.Context, ownerID, repoID int64, name string) error {
  48. if err := ValidateName(name); err != nil {
  49. return err
  50. }
  51. s, err := secret_model.FindSecrets(ctx, secret_model.FindSecretsOptions{
  52. OwnerID: ownerID,
  53. RepoID: repoID,
  54. Name: name,
  55. })
  56. if err != nil {
  57. return err
  58. }
  59. if len(s) != 1 {
  60. return secret_model.ErrSecretNotFound{}
  61. }
  62. return deleteSecret(ctx, s[0])
  63. }
  64. func deleteSecret(ctx context.Context, s *secret_model.Secret) error {
  65. if _, err := db.DeleteByID(ctx, s.ID, s); err != nil {
  66. return err
  67. }
  68. return nil
  69. }