|
@@ -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='ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw',
|
|
|
+ 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 = [
|
|
|
{
|