github.com/NaverCloudPlatform/ncloud-sdk-go-v2@v1.6.13/ncloud/credentials/credentials.go (about) 1 package credentials 2 3 import ( 4 "github.com/NaverCloudPlatform/ncloud-sdk-go-v2/ncloud/metadata" 5 "time" 6 ) 7 8 type Credentials struct { 9 value Value 10 provider Provider 11 } 12 13 type Value struct { 14 AccessKey string 15 SecretKey string 16 Expiration time.Time 17 } 18 19 // IsExpired returns if the credentials are expired. 20 func (c *Credentials) IsExpired() bool { 21 curTime := time.Now() 22 return c.value.Expiration.Before(curTime) 23 } 24 25 func (c *Credentials) AccessKey() string { 26 return c.value.AccessKey 27 } 28 29 func (c *Credentials) SecretKey() string { 30 return c.value.SecretKey 31 } 32 33 func (c *Credentials) Valid() bool { 34 return c.value.AccessKey != "" && c.value.SecretKey != "" 35 } 36 37 func (c *Credentials) ProviderName() string { 38 if c.provider == nil { 39 return "NoCredentialProvider" 40 } 41 return c.provider.Name() 42 } 43 44 func (c *Credentials) Retrieve() *Credentials { 45 if c.provider != nil && c.IsExpired() { 46 var err error 47 if c.value, err = c.provider.Retrieve(); err != nil { 48 return nil 49 } 50 } 51 return c 52 } 53 54 func LoadCredentials(providers []Provider) *Credentials { 55 var credentials Credentials 56 for _, p := range providers { 57 credValue, err := p.Retrieve() 58 if err == nil { 59 credentials = Credentials{ 60 value: credValue, 61 provider: p, 62 } 63 break 64 } 65 } 66 67 return &credentials 68 } 69 70 func DefaultCredentialsChain() []Provider { 71 return []Provider{ 72 &EnvProvider{}, 73 &ConfigFileProvider{}, 74 &ServerRoleProvider{ 75 ApiClient: metadata.NewApiClient(), 76 }, 77 } 78 } 79 80 81 type Provider interface { 82 // Retrieve returns nil if it successfully retrieved the value. 83 // Error is returned if the value were not obtainable, or empty. 84 Retrieve() (Value, error) 85 // Name provider name 86 Name() string 87 }