2023-09-05 18:21:02 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package secrets
import (
"context"
"code.gitea.io/gitea/models/db"
secret_model "code.gitea.io/gitea/models/secret"
)
func CreateOrUpdateSecret ( ctx context . Context , ownerID , repoID int64 , name , data string ) ( * secret_model . Secret , bool , error ) {
if err := ValidateName ( name ) ; err != nil {
return nil , false , err
}
2023-11-24 06:49:41 +03:00
s , err := db . Find [ secret_model . Secret ] ( ctx , secret_model . FindSecretsOptions {
2023-09-05 18:21:02 +03:00
OwnerID : ownerID ,
RepoID : repoID ,
Name : name ,
} )
if err != nil {
return nil , false , err
}
if len ( s ) == 0 {
s , err := secret_model . InsertEncryptedSecret ( ctx , ownerID , repoID , name , data )
if err != nil {
return nil , false , err
}
return s , true , nil
}
if err := secret_model . UpdateSecret ( ctx , s [ 0 ] . ID , data ) ; err != nil {
return nil , false , err
}
return s [ 0 ] , false , nil
}
func DeleteSecretByID ( ctx context . Context , ownerID , repoID , secretID int64 ) error {
2023-11-24 06:49:41 +03:00
s , err := db . Find [ secret_model . Secret ] ( ctx , secret_model . FindSecretsOptions {
2023-09-05 18:21:02 +03:00
OwnerID : ownerID ,
RepoID : repoID ,
SecretID : secretID ,
} )
if err != nil {
return err
}
if len ( s ) != 1 {
return secret_model . ErrSecretNotFound { }
}
return deleteSecret ( ctx , s [ 0 ] )
}
func DeleteSecretByName ( ctx context . Context , ownerID , repoID int64 , name string ) error {
if err := ValidateName ( name ) ; err != nil {
return err
}
2023-11-24 06:49:41 +03:00
s , err := db . Find [ secret_model . Secret ] ( ctx , secret_model . FindSecretsOptions {
2023-09-05 18:21:02 +03:00
OwnerID : ownerID ,
RepoID : repoID ,
Name : name ,
} )
if err != nil {
return err
}
if len ( s ) != 1 {
return secret_model . ErrSecretNotFound { }
}
return deleteSecret ( ctx , s [ 0 ] )
}
func deleteSecret ( ctx context . Context , s * secret_model . Secret ) error {
2023-12-25 23:25:29 +03:00
if _ , err := db . DeleteByID [ secret_model . Secret ] ( ctx , s . ID ) ; err != nil {
2023-09-05 18:21:02 +03:00
return err
}
return nil
}