45 lines
855 B
Go
45 lines
855 B
Go
package secrets
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
)
|
|
|
|
type SecretsManager interface {
|
|
NewSecret(name string, defaultValues interface{}) (Secret, error)
|
|
GetSecret(name string) Secret
|
|
}
|
|
|
|
type Secret interface {
|
|
Get(key string) any
|
|
Set(key string, value string)
|
|
Marshal() (interface{}, error)
|
|
Unmarshal(value any) error
|
|
Save() error
|
|
}
|
|
|
|
var manager SecretsManager
|
|
var once sync.Once
|
|
|
|
func SetManager(m SecretsManager) {
|
|
once.Do(func() {
|
|
manager = m
|
|
})
|
|
}
|
|
|
|
// NewSecret creates or retrieves a secret
|
|
func NewSecret(name string, defaultValues interface{}) (Secret, error) {
|
|
if manager == nil {
|
|
return nil, errors.New("secrets manager not initialized")
|
|
}
|
|
return manager.NewSecret(name, defaultValues)
|
|
}
|
|
|
|
// GetSecret retrieves an existing secret
|
|
func GetSecret(name string) Secret {
|
|
if manager == nil {
|
|
return nil
|
|
}
|
|
return manager.GetSecret(name)
|
|
}
|