-
Notifications
You must be signed in to change notification settings - Fork 2
/
vcs_token_provider.go
69 lines (58 loc) · 1.96 KB
/
vcs_token_provider.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
58
59
60
61
62
63
64
65
66
67
68
69
package auth
import (
"errors"
"fmt"
"github.com/rs/zerolog"
"github.com/krok-o/krok/pkg/krok/providers"
)
const (
tokenFormat = prefixFormat + "VCS_TOKEN"
)
// TokenProviderDependencies defines the dependencies for the token provider.
type TokenProviderDependencies struct {
Logger zerolog.Logger
Vault providers.Vault
}
// TokenProvider is the provider which saves and manages tokens for the various platforms.
type TokenProvider struct {
TokenProviderDependencies
}
// NewPlatformTokenProvider creates a new Token provider for the platforms.
func NewPlatformTokenProvider(deps TokenProviderDependencies) *TokenProvider {
return &TokenProvider{
TokenProviderDependencies: deps,
}
}
var _ providers.PlatformTokenProvider = &TokenProvider{}
// GetTokenForPlatform will retrieve the token for this VCS.
func (t *TokenProvider) GetTokenForPlatform(vcs int) (string, error) {
log := t.Logger.With().Int("vcs", vcs).Logger()
if err := t.Vault.LoadSecrets(); err != nil {
log.Debug().Err(err).Msg("Failed to load secrets")
return "", fmt.Errorf("failed to get secrets: %w", err)
}
token, err := t.Vault.GetSecret(fmt.Sprintf(tokenFormat, vcs))
if err != nil {
log.Debug().Err(err).Msg("GetSecret failed for token")
return "", fmt.Errorf("failed to get token: %w", err)
}
return string(token), nil
}
// SaveTokenForPlatform will save the token for this VCS.
func (t *TokenProvider) SaveTokenForPlatform(token string, vcs int) error {
log := t.Logger.With().Int("vcs", vcs).Logger()
if token == "" {
return errors.New("token is empty")
}
if err := t.Vault.LoadSecrets(); err != nil {
log.Debug().Err(err).Msg("Failed to load secrets")
return fmt.Errorf("failed to get repository auth: %w", err)
}
log.Debug().Msg("Store token")
t.Vault.AddSecret(fmt.Sprintf(tokenFormat, vcs), []byte(token))
if err := t.Vault.SaveSecrets(); err != nil {
log.Debug().Err(err).Msg("Failed to save secrets")
return fmt.Errorf("failed to save secrets: %w", err)
}
return nil
}