Refactor secrets management
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user