env_provider.go raw

   1  package credentials
   2  
   3  import (
   4  	"errors"
   5  	"os"
   6  
   7  	"github.com/alibabacloud-go/tea/tea"
   8  )
   9  
  10  type envProvider struct{}
  11  
  12  var providerEnv = new(envProvider)
  13  
  14  const (
  15  	// EnvVarAccessKeyId is a name of ALIBABA_CLOUD_ACCESS_KEY_Id
  16  	EnvVarAccessKeyId    = "ALIBABA_CLOUD_ACCESS_KEY_Id"
  17  	EnvVarAccessKeyIdNew = "ALIBABA_CLOUD_ACCESS_KEY_ID"
  18  	// EnvVarAccessKeySecret is a name of ALIBABA_CLOUD_ACCESS_KEY_SECRET
  19  	EnvVarAccessKeySecret = "ALIBABA_CLOUD_ACCESS_KEY_SECRET"
  20  )
  21  
  22  func newEnvProvider() Provider {
  23  	return &envProvider{}
  24  }
  25  
  26  func (p *envProvider) resolve() (config *Config, err error) {
  27  	accessKeyId, ok1 := os.LookupEnv(EnvVarAccessKeyIdNew)
  28  	if !ok1 || accessKeyId == "" {
  29  		accessKeyId, ok1 = os.LookupEnv(EnvVarAccessKeyId)
  30  	}
  31  	accessKeySecret, ok2 := os.LookupEnv(EnvVarAccessKeySecret)
  32  	if !ok1 || !ok2 {
  33  		return nil, nil
  34  	}
  35  	if accessKeyId == "" {
  36  		return nil, errors.New(EnvVarAccessKeyIdNew + " or " + EnvVarAccessKeyId + " cannot be empty")
  37  	}
  38  	if accessKeySecret == "" {
  39  		return nil, errors.New(EnvVarAccessKeySecret + " cannot be empty")
  40  	}
  41  
  42  	securityToken := os.Getenv("ALIBABA_CLOUD_SECURITY_TOKEN")
  43  
  44  	if securityToken != "" {
  45  		config = &Config{
  46  			Type:            tea.String("sts"),
  47  			AccessKeyId:     tea.String(accessKeyId),
  48  			AccessKeySecret: tea.String(accessKeySecret),
  49  			SecurityToken:   tea.String(securityToken),
  50  		}
  51  		return
  52  	}
  53  
  54  	config = &Config{
  55  		Type:            tea.String("access_key"),
  56  		AccessKeyId:     tea.String(accessKeyId),
  57  		AccessKeySecret: tea.String(accessKeySecret),
  58  	}
  59  
  60  	return
  61  }
  62