master
go 64 lines 1.43 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package cloudauth
4
5 import (
6 "errors"
7 "fmt"
8
9 "github.com/Azure/azure-sdk-for-go/sdk/azcore"
10 )
11
12 type Config struct {
13 Provider Provider `yaml:"provider" json:"provider"`
14 AzureAD *AzureADAuthConfig `yaml:"azure_ad,omitempty" json:"azure_ad,omitempty"`
15 }
16
17 func (c Config) ProviderName() Provider {
18 return c.Provider.Normalized()
19 }
20
21 func (c Config) IsProvider(provider Provider) bool {
22 return c.ProviderName() == provider.Normalized()
23 }
24
25 func (c Config) IsEnabled() bool {
26 return c.ProviderName() != ProviderNone
27 }
28
29 func (c Config) Validate() error {
30 switch c.ProviderName() {
31 case ProviderNone:
32 return nil
33 case ProviderAzureAD:
34 if c.AzureAD == nil {
35 return errors.New("cloud_auth.azure_ad is required")
36 }
37 return c.AzureAD.Validate()
38 default:
39 return fmt.Errorf("cloud_auth.provider %q is invalid: expected one of %q, %q",
40 c.Provider, ProviderNone, ProviderAzureAD)
41 }
42 }
43
44 func (c Config) NewCredential() (azcore.TokenCredential, error) {
45 if err := c.Validate(); err != nil {
46 return nil, err
47 }
48
49 switch c.ProviderName() {
50 case ProviderAzureAD:
51 return c.azureADConfig().NewCredential()
52 case ProviderNone:
53 return nil, errors.New("cloud_auth is not enabled")
54 default:
55 return nil, fmt.Errorf("cloud_auth.provider %q is invalid", c.Provider)
56 }
57 }
58
59 func (c Config) azureADConfig() AzureADAuthConfig {
60 if c.AzureAD == nil {
61 return AzureADAuthConfig{}
62 }
63 return *c.AzureAD
64 }