浏览代码

update cloudStorage sts

lang 4 年之前
父节点
当前提交
26400142fe
共有 2 个文件被更改,包括 93 次插入7 次删除
  1. 82 1
      Controller/CloudStorage.py
  2. 11 6
      Controller/TestApi.py

+ 82 - 1
Controller/CloudStorage.py

@@ -77,7 +77,8 @@ class CloudStorageView(View):
             return self.do_pay_by_ali_callback(request)
         elif operation == 'getsignsts':
             ip = CommonService.get_ip_address(request)
-            return self.do_get_sign_sts(request_dict, ip, response)
+            # return self.do_get_sign_sts(request_dict, ip, response)
+            return self.do_get_sign_sts_test(request_dict, ip, response)
         elif operation == 'storeplaylist':
             return self.do_store_playlist(request_dict, response)
         elif operation == 'signplaym3u8':
@@ -105,6 +106,86 @@ class CloudStorageView(View):
             else:
                 return response.json(414)
 
+    def do_get_sign_sts_test(self, request_dict, ip, response):
+            uidToken = request_dict.get('uidToken', None)
+            utko = UidTokenObject(uidToken)
+            if utko.flag is False:
+                return response.json(444, 'uidToken')
+            uid = utko.UID
+            channel = utko.channel
+            print(channel)
+            print(uid)
+            now_time = int(time.time())
+            ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time). \
+                values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
+            if ubqs.exists():
+                if ubqs[0]["bucket__mold"] == 1:
+                    # 亚马逊 s3 sts
+                    sts_qs = StsCrdModel.objects.filter(uid=uid, channel=channel). \
+                        values("addTime", "data")
+                    if sts_qs.exists():
+                        endTime = int(sts_qs[0]["addTime"]) + 3500
+                        if endTime > now_time:
+                            print(endTime)
+                            print(now_time)
+                            res = json.loads(sts_qs[0]["data"])
+                            return JsonResponse(status=200, data=res)
+                        # 套餐id
+                    storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                    bucket_name = ubqs[0]['bucket__bucket']
+                    endpoint = ubqs[0]['bucket__endpoint']
+                    region_id = ubqs[0]['bucket__region']
+
+                    ###############
+                    REGION_NAME = region_id
+                    boto3_sts = boto3.client(
+                        'sts',
+                        aws_access_key_id='AKIA2E67UIMD45Y3HL53',
+                        aws_secret_access_key='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',
+                        region_name=REGION_NAME
+                    )
+                    Policy = {
+                        "Version": "2012-10-17",
+                        "Statement": [
+                            {
+                                "Effect": "Allow",
+                                "Action": "s3:*",
+                                "Resource": ["arn:aws:s3:::azvod1/{uid_channel}/*".
+                                                 format(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': '3600',
+                        'endpoint': endpoint,
+                        'bucket_name': bucket_name,
+                        'arn': response['FederatedUser']['Arn'],
+                        'code': 0,
+                        'storage': storage,
+                        'endTime': ubqs[0]['endTime'],
+                        'ip': ip,
+                    }
+                    if sts_qs.exists():
+                        sts_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)
+                else:
+                    res = {'code': 404, 'msg': 'data not exists!'}
+                    return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                        content_type="application/json,charset=utf-8")
+
     def do_test_play_m3u8(self, request_dict, response):
         playlist_entries = [
             {

+ 11 - 6
Controller/TestApi.py

@@ -98,7 +98,7 @@ class testView(View):
             return self.queryInterface(request_dict, userID, response)
         elif operation == 'generateToken':
             userID = '158943604783713800138000'
-            return self.generate_token()
+            return self.generate_token(request_dict,userID)
         else:
             return 12344444
 
@@ -677,8 +677,13 @@ class testView(View):
             vod_play_list.append({'name': vod['time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
         return response.json(0, vod_play_list)
 
-    def generate_token(self):
-        tko = TokenObject()
-        res = tko.generate(
-            data={'userID': 158943604783713800138000, 'lang': 'cn', 'user': '13527261476', 'm_code': '123413243214'})
-        return JsonResponse(status=200, data=res)
+    def generate_token(self,request_dict,userID):
+        #UserIdToken
+        # tko = TokenObject()
+        # res = tko.generate(
+        #     data={'userID': 158943604783713800138000, 'lang': 'cn', 'user': '13527261476', 'm_code': '123413243214'})
+
+        #uidToken
+        utko = UidTokenObject()
+        res = utko.generate(data={'uid':'86YC8Z192VB1VMKU111A','channel':1})
+        return JsonResponse(status=200, data=res,safe=False)