code.gitea.io/gitea@v1.22.3/services/secrets/secrets.go (about)

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