github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/credentials/credentials.go (about) 1 package credentials 2 3 import ( 4 "context" 5 "errors" 6 "os" 7 8 "github.com/qiniu/go-sdk/v7/auth" 9 ) 10 11 // Credentials 七牛鉴权类,用于生成Qbox, Qiniu, Upload签名 12 // 13 // AK/SK可以从 https://portal.qiniu.com/user/key 获取 14 type Credentials = auth.Credentials 15 16 // NewCredentials 构建一个 Credentials 对象 17 func NewCredentials(accessKey, secretKey string) *Credentials { 18 return auth.New(accessKey, secretKey) 19 } 20 21 // Default 构建一个 Credentials 对象 22 func Default() *Credentials { 23 return auth.Default() 24 } 25 26 // CredentialsProvider 获取 Credentials 对象的接口 27 type CredentialsProvider interface { 28 Get(context.Context) (*Credentials, error) 29 } 30 31 // EnvironmentVariableCredentialProvider 从环境变量中获取 Credential 32 type EnvironmentVariableCredentialProvider struct{} 33 34 func (provider *EnvironmentVariableCredentialProvider) Get(ctx context.Context) (credential *Credentials, err error) { 35 accessKey := os.Getenv("QINIU_ACCESS_KEY") 36 secretKey := os.Getenv("QINIU_SECRET_KEY") 37 if accessKey == "" { 38 return nil, errors.New("QINIU_ACCESS_KEY is not set") 39 } 40 if secretKey == "" { 41 return nil, errors.New("QINIU_SECRET_KEY is not set") 42 } 43 return NewCredentials(accessKey, secretKey), nil 44 } 45 46 var _ CredentialsProvider = (*EnvironmentVariableCredentialProvider)(nil) 47 48 // ChainedCredentialsProvider 存储多个 CredentialsProvider,逐个尝试直到成功获取第一个 Credentials 为止 49 type ChainedCredentialsProvider struct { 50 providers []CredentialsProvider 51 } 52 53 func (provider *ChainedCredentialsProvider) Get(ctx context.Context) (credential *Credentials, err error) { 54 for _, provider := range provider.providers { 55 if credential, err = provider.Get(ctx); err == nil { 56 return 57 } 58 } 59 return 60 } 61 62 var _ CredentialsProvider = (*ChainedCredentialsProvider)(nil)