Some checks failed
DevStar Studio Auto Test Pipeline / unit-frontend-test (pull_request) Failing after 1m34s
DevStar Studio Auto Test Pipeline / unit-backend-test (pull_request) Failing after 33s
DevStar Studio CI/CD Pipeline / build-and-push-x86-64-docker-image (pull_request) Successful in 7m21s
DevStar E2E Test / e2e-test (pull_request) Successful in 8m47s
93 lines
2.4 KiB
Go
93 lines
2.4 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package devcontainer
|
|
|
|
import (
|
|
"context"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
devcontainer_model "code.gitea.io/gitea/models/devcontainer"
|
|
secret_service "code.gitea.io/gitea/services/secrets"
|
|
)
|
|
|
|
func CreateSecret(ctx context.Context, ownerID, repoID int64, name, data, description string) (*devcontainer_model.DevcontainerSecret, error) {
|
|
if err := secret_service.ValidateName(name); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return devcontainer_model.InsertEncryptedSecret(ctx, ownerID, repoID, name, data, description)
|
|
}
|
|
|
|
func CreateOrUpdateSecret(ctx context.Context, ownerID, repoID int64, name, data, description string) (*devcontainer_model.DevcontainerSecret, bool, error) {
|
|
if err := secret_service.ValidateName(name); err != nil {
|
|
return nil, false, err
|
|
}
|
|
|
|
s, err := db.Find[devcontainer_model.DevcontainerSecret](ctx, devcontainer_model.FindSecretsOpts{
|
|
OwnerID: ownerID,
|
|
RepoID: repoID,
|
|
Name: name,
|
|
})
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
|
|
if len(s) == 0 {
|
|
s, err := devcontainer_model.InsertEncryptedSecret(ctx, ownerID, repoID, name, data, description)
|
|
if err != nil {
|
|
return nil, false, err
|
|
}
|
|
return s, true, nil
|
|
}
|
|
|
|
if err := devcontainer_model.UpdateSecret(ctx, s[0].ID, data, description); err != nil {
|
|
return nil, false, err
|
|
}
|
|
|
|
return s[0], false, nil
|
|
}
|
|
|
|
func DeleteSecretByID(ctx context.Context, ownerID, repoID, secretID int64) error {
|
|
s, err := db.Find[devcontainer_model.DevcontainerSecret](ctx, devcontainer_model.FindSecretsOpts{
|
|
OwnerID: ownerID,
|
|
RepoID: repoID,
|
|
SecretID: secretID,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(s) != 1 {
|
|
return devcontainer_model.ErrSecretNotFound{}
|
|
}
|
|
|
|
return deleteSecret(ctx, s[0])
|
|
}
|
|
|
|
func DeleteSecretByName(ctx context.Context, ownerID, repoID int64, name string) error {
|
|
if err := secret_service.ValidateName(name); err != nil {
|
|
return err
|
|
}
|
|
|
|
s, err := db.Find[devcontainer_model.DevcontainerSecret](ctx, devcontainer_model.FindSecretsOpts{
|
|
OwnerID: ownerID,
|
|
RepoID: repoID,
|
|
Name: name,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(s) != 1 {
|
|
return devcontainer_model.ErrSecretNotFound{}
|
|
}
|
|
|
|
return deleteSecret(ctx, s[0])
|
|
}
|
|
|
|
func deleteSecret(ctx context.Context, s *devcontainer_model.DevcontainerSecret) error {
|
|
if _, err := db.DeleteByID[devcontainer_model.DevcontainerSecret](ctx, s.ID); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|