Pārlūkot izejas kodu

feat: support aliyun oss auth v4 (#3886)

Co-authored-by: owen <owen@owen.hawk-toad.ts.net>
S96EA 11 mēneši atpakaļ
vecāks
revīzija
13cd409575
3 mainītis faili ar 15 papildinājumiem un 2 dzēšanām
  1. 3 0
      api/.env.example
  2. 2 0
      api/config.py
  3. 10 2
      api/extensions/storage/aliyun_storage.py

+ 3 - 0
api/.env.example

@@ -54,6 +54,9 @@ ALIYUN_OSS_BUCKET_NAME=your-bucket-name
 ALIYUN_OSS_ACCESS_KEY=your-access-key
 ALIYUN_OSS_SECRET_KEY=your-secret-key
 ALIYUN_OSS_ENDPOINT=your-endpoint
+ALIYUN_OSS_AUTH_VERSION=v1
+ALIYUN_OSS_REGION=your-region
+
 # Google Storage configuration
 GOOGLE_STORAGE_BUCKET_NAME=yout-bucket-name
 GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON=your-google-service-account-json-base64-string

+ 2 - 0
api/config.py

@@ -215,6 +215,8 @@ class Config:
         self.ALIYUN_OSS_ACCESS_KEY=get_env('ALIYUN_OSS_ACCESS_KEY')
         self.ALIYUN_OSS_SECRET_KEY=get_env('ALIYUN_OSS_SECRET_KEY')
         self.ALIYUN_OSS_ENDPOINT=get_env('ALIYUN_OSS_ENDPOINT')
+        self.ALIYUN_OSS_REGION=get_env('ALIYUN_OSS_REGION')
+        self.ALIYUN_OSS_AUTH_VERSION=get_env('ALIYUN_OSS_AUTH_VERSION')
         self.GOOGLE_STORAGE_BUCKET_NAME = get_env('GOOGLE_STORAGE_BUCKET_NAME')
         self.GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64 = get_env('GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64')
 

+ 10 - 2
api/extensions/storage/aliyun_storage.py

@@ -13,13 +13,21 @@ class AliyunStorage(BaseStorage):
 
     def __init__(self, app: Flask):
         super().__init__(app)
+
         app_config = self.app.config
         self.bucket_name = app_config.get('ALIYUN_OSS_BUCKET_NAME')
+        oss_auth_method = aliyun_s3.Auth
+        region = None
+        if app_config.get('ALIYUN_OSS_AUTH_VERSION') == 'v4':
+            oss_auth_method = aliyun_s3.AuthV4
+            region = app_config.get('ALIYUN_OSS_REGION')
+        oss_auth = oss_auth_method(app_config.get('ALIYUN_OSS_ACCESS_KEY'), app_config.get('ALIYUN_OSS_SECRET_KEY'))
         self.client = aliyun_s3.Bucket(
-            aliyun_s3.Auth(app_config.get('ALIYUN_OSS_ACCESS_KEY'), app_config.get('ALIYUN_OSS_SECRET_KEY')),
+            oss_auth,
             app_config.get('ALIYUN_OSS_ENDPOINT'),
             self.bucket_name,
-            connect_timeout=30
+            connect_timeout=30,
+            region=region,
         )
 
     def save(self, filename, data):