baidu.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package s3
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aws/aws-sdk-go/aws"
  6. "github.com/aws/aws-sdk-go/aws/credentials"
  7. "github.com/aws/aws-sdk-go/aws/session"
  8. v4 "github.com/aws/aws-sdk-go/aws/signer/v4"
  9. "github.com/aws/aws-sdk-go/service/s3"
  10. "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"
  11. "github.com/seaweedfs/seaweedfs/weed/remote_storage"
  12. "github.com/seaweedfs/seaweedfs/weed/util"
  13. )
  14. func init() {
  15. remote_storage.RemoteStorageClientMakers["baidu"] = new(BaiduRemoteStorageMaker)
  16. }
  17. type BaiduRemoteStorageMaker struct{}
  18. func (s BaiduRemoteStorageMaker) HasBucket() bool {
  19. return true
  20. }
  21. func (s BaiduRemoteStorageMaker) Make(conf *remote_pb.RemoteConf) (remote_storage.RemoteStorageClient, error) {
  22. client := &s3RemoteStorageClient{
  23. supportTagging: true,
  24. conf: conf,
  25. }
  26. accessKey := util.Nvl(conf.BaiduAccessKey, os.Getenv("BDCLOUD_ACCESS_KEY"))
  27. secretKey := util.Nvl(conf.BaiduSecretKey, os.Getenv("BDCLOUD_SECRET_KEY"))
  28. config := &aws.Config{
  29. Endpoint: aws.String(conf.BaiduEndpoint),
  30. Region: aws.String(conf.BaiduRegion),
  31. S3ForcePathStyle: aws.Bool(false),
  32. S3DisableContentMD5Validation: aws.Bool(true),
  33. }
  34. if accessKey != "" && secretKey != "" {
  35. config.Credentials = credentials.NewStaticCredentials(accessKey, secretKey, "")
  36. }
  37. sess, err := session.NewSession(config)
  38. if err != nil {
  39. return nil, fmt.Errorf("create baidu session: %w", err)
  40. }
  41. sess.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
  42. sess.Handlers.Build.PushFront(skipSha256PayloadSigning)
  43. client.conn = s3.New(sess)
  44. return client, nil
  45. }