env_provider.go 1.5 KB

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