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  }