fetch_ml/internal/config/secrets.go
Jeremie Fraeys 23e5f3d1dc
refactor(api): internal refactoring for TUI and worker modules
- Refactor internal/worker and internal/queue packages
- Update cmd/tui for monitoring interface
- Update test configurations
2026-02-20 15:51:23 -05:00

56 lines
1.5 KiB
Go

// Package config provides secrets management functionality
package config
import (
"context"
"fmt"
"os"
"strings"
)
// SecretsManager defines the interface for secrets management
type SecretsManager interface {
Get(ctx context.Context, key string) (string, error)
Set(ctx context.Context, key, value string) error
Delete(ctx context.Context, key string) error
List(ctx context.Context, prefix string) ([]string, error)
}
// EnvSecretsManager retrieves secrets from environment variables
type EnvSecretsManager struct{}
func NewEnvSecretsManager() *EnvSecretsManager { return &EnvSecretsManager{} }
func (e *EnvSecretsManager) Get(ctx context.Context, key string) (string, error) {
value := os.Getenv(key)
if value == "" {
return "", fmt.Errorf("secret %s not found", key)
}
return value, nil
}
func (e *EnvSecretsManager) Set(ctx context.Context, key, value string) error {
return fmt.Errorf("env secrets: Set not supported")
}
func (e *EnvSecretsManager) Delete(ctx context.Context, key string) error {
return fmt.Errorf("env secrets: Delete not supported")
}
func (e *EnvSecretsManager) List(ctx context.Context, prefix string) ([]string, error) {
var keys []string
for _, env := range os.Environ() {
if strings.HasPrefix(env, prefix) {
keys = append(keys, strings.SplitN(env, "=", 2)[0])
}
}
return keys, nil
}
// RedactSecret masks a secret for safe logging
func RedactSecret(secret string) string {
if len(secret) <= 8 {
return "***"
}
return secret[:4] + "..." + secret[len(secret)-4:]
}