-
Notifications
You must be signed in to change notification settings - Fork 0
/
manager.go
57 lines (50 loc) · 1.52 KB
/
manager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package providersmgr
import (
"context"
"errors"
"log/slog"
"go.openfort.xyz/shield/internal/core/domain"
"go.openfort.xyz/shield/internal/core/domain/provider"
"go.openfort.xyz/shield/internal/core/ports/providers"
"go.openfort.xyz/shield/internal/core/ports/repositories"
"go.openfort.xyz/shield/pkg/logger"
)
type Manager struct {
config *Config
repo repositories.ProviderRepository
logger *slog.Logger
}
func NewManager(cfg *Config, repo repositories.ProviderRepository) *Manager {
return &Manager{
config: cfg,
repo: repo,
logger: logger.New("provider_manager"),
}
}
func (p *Manager) GetProvider(ctx context.Context, projectID string, providerType provider.Type) (providers.IdentityProvider, error) {
p.logger.InfoContext(ctx, "getting provider", slog.String("provider_type", string(providerType)))
prov, err := p.repo.GetByProjectAndType(ctx, projectID, providerType)
if err != nil {
if errors.Is(err, domain.ErrProjectNotFound) {
return nil, ErrProviderNotConfigured
}
p.logger.ErrorContext(ctx, "failed to get provider", logger.Error(err))
return nil, err
}
switch prov.Type {
case provider.TypeCustom:
config, ok := prov.Config.(*provider.CustomConfig)
if !ok {
return nil, ErrProviderConfigMismatch
}
return newCustomProvider(config), nil
case provider.TypeOpenfort:
config, ok := prov.Config.(*provider.OpenfortConfig)
if !ok {
return nil, ErrProviderConfigMismatch
}
return newOpenfortProvider(p.config, config), nil
default:
return nil, ErrProviderNotSupported
}
}