Browse Source

获取sts令牌增加捕获异常

peng 2 năm trước cách đây
mục cha
commit
4d45536fee
1 tập tin đã thay đổi với 75 bổ sung72 xóa
  1. 75 72
      Controller/CloudStorage.py

+ 75 - 72
Controller/CloudStorage.py

@@ -342,82 +342,85 @@ class CloudStorageView(View):
         uid = uid_obj.UID
         channel = uid_obj.channel
         now_time = int(time.time())
-        uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel).values(
-            "bucket__mold",
-            "bucket__bucket",
-            "bucket__endpoint",
-            "bucket__region",
-            "endTime").order_by(
-            'addTime')
-        if not uid_bucket_qs.exists():
-            res = {'code': 405, 'msg': 'Not purchased or expired!'}
-            return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
+        try:
+            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel).values(
+                "bucket__mold",
+                "bucket__bucket",
+                "bucket__endpoint",
+                "bucket__region",
+                "endTime").order_by(
+                'addTime')
+            if not uid_bucket_qs.exists():
+                res = {'code': 405, 'msg': 'Not purchased or expired!'}
+                return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
 
-        # 亚马逊 s3 sts
-        sts_crd_qs = StsCrdModel.objects.filter(uid=uid, channel=channel).values("addTime", "data")
-        if sts_crd_qs.exists():
-            end_time = int(sts_crd_qs[0]["addTime"]) + 5000
-            if end_time > now_time:
-                res = json.loads(sts_crd_qs[0]["data"])
-                return JsonResponse(status=200, data=res)
+            # 亚马逊 s3 sts
+            sts_crd_qs = StsCrdModel.objects.filter(uid=uid, channel=channel).values("addTime", "data")
+            if sts_crd_qs.exists():
+                end_time = int(sts_crd_qs[0]["addTime"]) + 5000
+                if end_time > now_time:
+                    res = json.loads(sts_crd_qs[0]["data"])
+                    return JsonResponse(status=200, data=res)
 
-        storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
-        bucket_name = uid_bucket_qs[0]['bucket__bucket']
-        endpoint = uid_bucket_qs[0]['bucket__endpoint']
-        region_id = uid_bucket_qs[0]['bucket__region']
+            storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+            bucket_name = uid_bucket_qs[0]['bucket__bucket']
+            endpoint = uid_bucket_qs[0]['bucket__endpoint']
+            region_id = uid_bucket_qs[0]['bucket__region']
 
-        try:
-            aws_access_key_id = AWS_ACCESS_KEY_ID[uid_bucket_qs[0]["bucket__mold"]]
-            aws_secret_access_key = AWS_SECRET_ACCESS_KEY[uid_bucket_qs[0]["bucket__mold"]]
-            aws_arn = AWS_ARN[uid_bucket_qs[0]["bucket__mold"]]
-        except:
-            res = {'code': 404, 'msg': 'mold not exists!'}
-            return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
+            try:
+                aws_access_key_id = AWS_ACCESS_KEY_ID[uid_bucket_qs[0]["bucket__mold"]]
+                aws_secret_access_key = AWS_SECRET_ACCESS_KEY[uid_bucket_qs[0]["bucket__mold"]]
+                aws_arn = AWS_ARN[uid_bucket_qs[0]["bucket__mold"]]
+            except:
+                res = {'code': 404, 'msg': 'mold not exists!'}
+                return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
 
-        boto3_sts = boto3.client(
-            'sts',
-            aws_access_key_id=aws_access_key_id,
-            aws_secret_access_key=aws_secret_access_key,
-            region_name=region_id
-        )
-        policy = {
-            "Version": "2012-10-17",
-            "Statement": [
-                {
-                    "Effect": "Allow",
-                    "Action": "s3:*",
-                    "Resource": ["{aws_arn}:::{bucket_name}/{uid_channel}*".
-                                     format(aws_arn=aws_arn, bucket_name=bucket_name, uid_channel=storage)]
-                }
-            ]
-        }
-        response = boto3_sts.get_federation_token(
-            Name='{role_name}'.format(role_name=uid + '_' + str(channel)),
-            Policy=json.dumps(policy),
-            DurationSeconds=7200
-        )
-        res = {
-            'AccessKeyId': response['Credentials']['AccessKeyId'],
-            'AccessKeySecret': response['Credentials']['SecretAccessKey'],
-            'SessionToken': response['Credentials']['SessionToken'],
-            'Expiration': response['Credentials']['Expiration'],
-            'expire': 900,
-            'endpoint': endpoint,
-            'bucket_name': bucket_name,
-            'arn': response['FederatedUser']['Arn'],
-            'code': 0,
-            'storage': storage,
-            'endTime': uid_bucket_qs[0]['endTime'],
-            'ip': ip,
-            'region': region_id,
-            'bucket_mold': uid_bucket_qs[0]['bucket__mold']
-        }
-        if sts_crd_qs.exists():
-            sts_crd_qs.update(data=json.dumps(res, default=str), addTime=now_time)
-        else:
-            StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res, default=str),
-                                       addTime=now_time, type=1)
-        return JsonResponse(status=200, data=res)
+            boto3_sts = boto3.client(
+                'sts',
+                aws_access_key_id=aws_access_key_id,
+                aws_secret_access_key=aws_secret_access_key,
+                region_name=region_id
+            )
+            policy = {
+                "Version": "2012-10-17",
+                "Statement": [
+                    {
+                        "Effect": "Allow",
+                        "Action": "s3:*",
+                        "Resource": ["{aws_arn}:::{bucket_name}/{uid_channel}*".
+                                         format(aws_arn=aws_arn, bucket_name=bucket_name, uid_channel=storage)]
+                    }
+                ]
+            }
+            response = boto3_sts.get_federation_token(
+                Name='{role_name}'.format(role_name=uid + '_' + str(channel)),
+                Policy=json.dumps(policy),
+                DurationSeconds=7200
+            )
+            res = {
+                'AccessKeyId': response['Credentials']['AccessKeyId'],
+                'AccessKeySecret': response['Credentials']['SecretAccessKey'],
+                'SessionToken': response['Credentials']['SessionToken'],
+                'Expiration': response['Credentials']['Expiration'],
+                'expire': 900,
+                'endpoint': endpoint,
+                'bucket_name': bucket_name,
+                'arn': response['FederatedUser']['Arn'],
+                'code': 0,
+                'storage': storage,
+                'endTime': uid_bucket_qs[0]['endTime'],
+                'ip': ip,
+                'region': region_id,
+                'bucket_mold': uid_bucket_qs[0]['bucket__mold']
+            }
+            if sts_crd_qs.exists():
+                sts_crd_qs.update(data=json.dumps(res, default=str), addTime=now_time)
+            else:
+                StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res, default=str),
+                                           addTime=now_time, type=1)
+            return JsonResponse(status=200, data=res)
+        except Exception as e:
+            return response.json(500, repr(e))
 
     @staticmethod
     def do_query_vod_list(request_dict, user_id, response):  # 获取视频播放列表