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)