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