static_sts.go raw

   1  package providers
   2  
   3  import (
   4  	"errors"
   5  	"os"
   6  )
   7  
   8  type StaticSTSCredentialsProvider struct {
   9  	accessKeyId     string
  10  	accessKeySecret string
  11  	securityToken   string
  12  }
  13  
  14  type StaticSTSCredentialsProviderBuilder struct {
  15  	provider *StaticSTSCredentialsProvider
  16  }
  17  
  18  func NewStaticSTSCredentialsProviderBuilder() *StaticSTSCredentialsProviderBuilder {
  19  	return &StaticSTSCredentialsProviderBuilder{
  20  		provider: &StaticSTSCredentialsProvider{},
  21  	}
  22  }
  23  
  24  func (builder *StaticSTSCredentialsProviderBuilder) WithAccessKeyId(accessKeyId string) *StaticSTSCredentialsProviderBuilder {
  25  	builder.provider.accessKeyId = accessKeyId
  26  	return builder
  27  }
  28  
  29  func (builder *StaticSTSCredentialsProviderBuilder) WithAccessKeySecret(accessKeySecret string) *StaticSTSCredentialsProviderBuilder {
  30  	builder.provider.accessKeySecret = accessKeySecret
  31  	return builder
  32  }
  33  
  34  func (builder *StaticSTSCredentialsProviderBuilder) WithSecurityToken(securityToken string) *StaticSTSCredentialsProviderBuilder {
  35  	builder.provider.securityToken = securityToken
  36  	return builder
  37  }
  38  
  39  func (builder *StaticSTSCredentialsProviderBuilder) Build() (provider *StaticSTSCredentialsProvider, err error) {
  40  	if builder.provider.accessKeyId == "" {
  41  		builder.provider.accessKeyId = os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
  42  	}
  43  
  44  	if builder.provider.accessKeyId == "" {
  45  		err = errors.New("the access key id is empty")
  46  		return
  47  	}
  48  
  49  	if builder.provider.accessKeySecret == "" {
  50  		builder.provider.accessKeySecret = os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
  51  	}
  52  
  53  	if builder.provider.accessKeySecret == "" {
  54  		err = errors.New("the access key secret is empty")
  55  		return
  56  	}
  57  
  58  	if builder.provider.securityToken == "" {
  59  		builder.provider.securityToken = os.Getenv("ALIBABA_CLOUD_SECURITY_TOKEN")
  60  	}
  61  
  62  	if builder.provider.securityToken == "" {
  63  		err = errors.New("the security token is empty")
  64  		return
  65  	}
  66  
  67  	provider = builder.provider
  68  	return
  69  }
  70  
  71  func (provider *StaticSTSCredentialsProvider) GetCredentials() (cc *Credentials, err error) {
  72  	cc = &Credentials{
  73  		AccessKeyId:     provider.accessKeyId,
  74  		AccessKeySecret: provider.accessKeySecret,
  75  		SecurityToken:   provider.securityToken,
  76  		ProviderName:    provider.GetProviderName(),
  77  	}
  78  	return
  79  }
  80  
  81  func (provider *StaticSTSCredentialsProvider) GetProviderName() string {
  82  	return "static_sts"
  83  }
  84