Files
dtoro febc153b7f
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled
ci / web (push) Has been cancelled
Desktop App / Build Linux (amd64) (push) Has been cancelled
Desktop App / Attach to Release (push) Has been cancelled
fix: add involves edge from task to agent:nomos at creation
Plus sync vendor directory for Docker build compatibility.
2026-08-11 22:03:12 +02:00

159 lines
4.1 KiB
Go

package infisical
import (
"os"
api "github.com/infisical/go-sdk/packages/api/secrets"
"github.com/infisical/go-sdk/packages/models"
"github.com/infisical/go-sdk/packages/util"
)
type ListSecretsOptions = api.ListSecretsV3RawRequest
type RetrieveSecretOptions = api.RetrieveSecretV3RawRequest
type UpdateSecretOptions = api.UpdateSecretV3RawRequest
type CreateSecretOptions = api.CreateSecretV3RawRequest
type DeleteSecretOptions = api.DeleteSecretV3RawRequest
type BatchCreateSecret = api.BatchCreateSecret
type SecretMetadata = models.SecretMetadata
type BatchCreateSecretsOptions = api.BatchCreateSecretsV3RawRequest
type BatchSecretsInterface interface {
Create(options BatchCreateSecretsOptions) ([]models.Secret, error)
}
type ListSecretsResult struct {
Secrets []models.Secret
ETag string
}
type SecretsInterface interface {
// Deprecated: Use ListSecrets instead for ETag-based caching support.
List(options ListSecretsOptions) ([]models.Secret, error)
ListSecrets(options ListSecretsOptions) (ListSecretsResult, error)
Retrieve(options RetrieveSecretOptions) (models.Secret, error)
Update(options UpdateSecretOptions) (models.Secret, error)
Create(options CreateSecretOptions) (models.Secret, error)
Delete(options DeleteSecretOptions) (models.Secret, error)
Batch() BatchSecretsInterface
}
type Secrets struct {
client *InfisicalClient
}
type BatchSecrets struct {
client *InfisicalClient
}
// Deprecated: Use ListSecrets instead for ETag-based caching support.
func (s *Secrets) List(options ListSecretsOptions) ([]models.Secret, error) {
result, err := s.ListSecrets(options)
if err != nil {
return nil, err
}
return result.Secrets, nil
}
func (s *Secrets) ListSecrets(options ListSecretsOptions) (ListSecretsResult, error) {
res, err := api.CallListSecretsV3(s.client.cache, s.client.httpClient, options)
if err != nil {
return ListSecretsResult{}, err
}
if options.Recursive {
util.EnsureUniqueSecretsByKey(&res.Secrets, options.SkipUniqueValidation)
}
secrets := append([]models.Secret(nil), res.Secrets...) // Clone main secrets slice, we will modify this if imports are enabled
if options.IncludeImports {
// Append secrets from imports
for _, importBlock := range res.Imports {
for _, importSecret := range importBlock.Secrets {
// Only append the secret if it is not already in the list, imports take precedence
if !util.ContainsSecret(secrets, importSecret.SecretKey) {
secrets = append(secrets, importSecret)
}
}
}
}
if options.AttachToProcessEnv {
for _, secret := range secrets {
// Only set the environment variable if it is not already set
if os.Getenv(secret.SecretKey) == "" {
_ = os.Setenv(secret.SecretKey, secret.SecretValue)
}
}
}
return ListSecretsResult{
Secrets: util.SortSecretsByKeys(secrets),
ETag: res.ETag,
}, nil
}
func (s *Secrets) Retrieve(options RetrieveSecretOptions) (models.Secret, error) {
res, err := api.CallRetrieveSecretV3(s.client.cache, s.client.httpClient, options)
if err != nil {
return models.Secret{}, err
}
return res.Secret, nil
}
func (s *Secrets) Update(options UpdateSecretOptions) (models.Secret, error) {
res, err := api.CallUpdateSecretV3(s.client.httpClient, options)
if err != nil {
return models.Secret{}, err
}
return res.Secret, nil
}
func (s *Secrets) Create(options CreateSecretOptions) (models.Secret, error) {
res, err := api.CallCreateSecretV3(s.client.httpClient, options)
if err != nil {
return models.Secret{}, err
}
return res.Secret, nil
}
func (s *Secrets) Delete(options DeleteSecretOptions) (models.Secret, error) {
res, err := api.CallDeleteSecretV3(s.client.httpClient, options)
if err != nil {
return models.Secret{}, err
}
return res.Secret, nil
}
// Batch operations
func (bs *BatchSecrets) Create(options BatchCreateSecretsOptions) ([]models.Secret, error) {
res, err := api.CallBatchCreateSecretV3(bs.client.httpClient, options)
if err != nil {
return nil, err
}
return res.Secrets, nil
}
func (s *Secrets) Batch() BatchSecretsInterface {
return &BatchSecrets{client: s.client}
}
func NewSecrets(client *InfisicalClient) SecretsInterface {
return &Secrets{client: client}
}