Skip to content

Commit 2079412

Browse files
committed
refactor: define config as schema
1 parent f1e31af commit 2079412

File tree

13 files changed

+300
-52
lines changed

13 files changed

+300
-52
lines changed

internal/services/vault/adapter.go

Lines changed: 0 additions & 8 deletions
This file was deleted.

internal/services/vault/config.go

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import (
1313
"github.com/knadh/koanf/providers/env"
1414
"github.com/knadh/koanf/providers/file"
1515
"github.com/knadh/koanf/v2"
16+
17+
"github.com/jahvon/flow/types/config"
1618
)
1719

1820
const (
@@ -21,29 +23,14 @@ const (
2123
vaultConfigFileExt = ".yaml"
2224
)
2325

24-
type VaultConfig struct {
25-
// Provider specifies the provider's type
26-
Provider string `koanf:"provider"`
27-
// Config specifies the provider-specific configuration
28-
Config map[string]interface{} `koanf:"config"`
29-
}
30-
31-
type Config struct {
32-
// Current specifies the name of thr current vault to use
33-
Current string `koanf:"current"`
34-
// Vaults specifies a map of vault names to their configurations
35-
Vaults map[string]VaultConfig `koanf:"vaults"`
36-
}
37-
3826
type LoadOptions struct {
3927
ConfigPath string
4028
AutoDiscoveryPath string
4129
AllowEnv bool
4230
RequireConfig bool
4331
}
4432

45-
// LoadCOnfig loads the vault configuration from the specified sources
46-
func LoadConfig(opts LoadOptions) (*Config, error) {
33+
func LoadConfig(opts LoadOptions) (*config.Vault, error) {
4734
k := koanf.New(".")
4835

4936
if opts.AutoDiscoveryPath != "" {
@@ -68,15 +55,14 @@ func LoadConfig(opts LoadOptions) (*Config, error) {
6855
}
6956
}
7057

71-
var cfg Config
58+
var cfg config.Vault
7259
if err := k.Unmarshal("", &cfg); err != nil {
7360
return nil, fmt.Errorf("failed to unmarshal config: %w", err)
7461
}
7562

7663
return &cfg, nil
7764
}
7865

79-
// loadFromFile loads configuration from a file, supporting multiple formats
8066
func loadFromFile(k *koanf.Koanf, path string) error {
8167
var parser koanf.Parser
8268

@@ -131,7 +117,6 @@ func loadFromDir(k *koanf.Koanf, path string) error {
131117
return fmt.Errorf("no config file found with name %s: %w", vaultConfigFileName, os.ErrNotExist)
132118
}
133119

134-
// loadFromEnv loads configuration from environment variables
135120
func loadFromEnv(k *koanf.Koanf) error {
136121
return k.Load(env.Provider(envPrefix, ".", func(s string) string {
137122
return strings.Replace(strings.ToLower(

internal/services/vault/mocks/mock_provider.go

Lines changed: 55 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/services/vault/provider.go

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package providers
2+
3+
//go:generate mockgen -destination=mocks/mock_adapter.go -package=mocks github.com/jahvon/flow/internal/services/vault/providers Adapter
4+
type Adapter interface {
5+
Get(key string) (string, error)
6+
Set(key string, value string) error
7+
Delete(key string) error
8+
List() (map[string]string, error)
9+
}

internal/services/vault/providers/cli.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package providers
22

3-
import "github.com/jahvon/flow/internal/services/run"
4-
53
const CLIProviderName = "cli"
64

75
type CLIProvider struct{}
@@ -18,5 +16,17 @@ type CLIAdapter struct {
1816
}
1917

2018
func (a *CLIAdapter) Get(key string) (string, error) {
21-
run.RunCmd()
19+
return "", nil
20+
}
21+
22+
func (a *CLIAdapter) Set(key string, value string) error {
23+
return nil
24+
}
25+
26+
func (a *CLIAdapter) Delete(key string) error {
27+
return nil
28+
}
29+
30+
func (a *CLIAdapter) List() (map[string]string, error) {
31+
return nil, nil
2232
}

internal/services/vault/providers/default.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,25 @@ package providers
33
const DefaultProviderName = "default"
44

55
type DefaultProvider struct{}
6+
7+
func (p *DefaultProvider) New(config map[string]interface{}) (Adapter, error) {
8+
return &DefaultAdapter{}, nil
9+
}
10+
11+
type DefaultAdapter struct{}
12+
13+
func (a *DefaultAdapter) Get(key string) (string, error) {
14+
return "", nil
15+
}
16+
17+
func (a *DefaultAdapter) Set(key string, value string) error {
18+
return nil
19+
}
20+
21+
func (a *DefaultAdapter) Delete(key string) error {
22+
return nil
23+
}
24+
25+
func (a *DefaultAdapter) List() (map[string]string, error) {
26+
return nil, nil
27+
}

internal/services/vault/providers/mocks/mock_adapter.go

Lines changed: 97 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/services/vault/registry.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
package vault
22

3-
import "sync"
3+
import (
4+
"sync"
5+
6+
"github.com/jahvon/flow/internal/services/vault/providers"
7+
)
8+
9+
func init() {
10+
Providers.Register(providers.DefaultProviderName, &providers.DefaultProvider{})
11+
Providers.Register(providers.CLIProviderName, &providers.CLIProvider{})
12+
}
13+
14+
var Providers = &Registry{
15+
providers: make(map[string]Provider),
16+
}
417

518
type Registry struct {
619
providers map[string]Provider

internal/services/vault/service.go

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,37 @@ import (
44
"fmt"
55

66
"github.com/jahvon/flow/internal/services/vault/providers"
7+
"github.com/jahvon/flow/types/config"
78
)
89

9-
func NewVault(config *Config) (Adapter, error) {
10-
if config.Vault == nil {
10+
//go:generate mockgen -destination=mocks/mock_provider.go -package=mocks github.com/jahvon/flow/internal/services/vault Provider
11+
type Provider interface {
12+
New(config map[string]interface{}) (providers.Adapter, error)
13+
}
14+
15+
func NewVault(cfg *config.Vault) (providers.Adapter, error) {
16+
if cfg == nil || cfg.Current == "" {
1117
provider, _ := Providers.Get(providers.DefaultProviderName)
1218
return provider.New(nil)
1319
}
1420

15-
provider, exists := Providers.Get(config.Vault.Provider)
21+
if len(cfg.Vaults) == 0 {
22+
return nil, fmt.Errorf("no vaults configured")
23+
}
24+
25+
v, exists := cfg.Vaults[cfg.Current]
26+
if !exists {
27+
return nil, fmt.Errorf("unknown vault: %s", cfg.Current)
28+
}
29+
vault, ok := v.(config.Entry)
30+
if !ok {
31+
return nil, fmt.Errorf("invalid vault configuration")
32+
}
33+
34+
provider, exists := Providers.Get(string(vault.Provider))
1635
if !exists {
17-
return nil, fmt.Errorf("unknown vault provider: %s", config.Vault.Provider)
36+
return nil, fmt.Errorf("unknown vault provider: %s", vault.Provider)
1837
}
1938

20-
return provider.New(config.Vault.Config)
39+
return provider.New(vault.Config)
2140
}

0 commit comments

Comments
 (0)