|
@@ -342,82 +342,85 @@ class CloudStorageView(View):
|
|
uid = uid_obj.UID
|
|
uid = uid_obj.UID
|
|
channel = uid_obj.channel
|
|
channel = uid_obj.channel
|
|
now_time = int(time.time())
|
|
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
|
|
@staticmethod
|
|
def do_query_vod_list(request_dict, user_id, response): # 获取视频播放列表
|
|
def do_query_vod_list(request_dict, user_id, response): # 获取视频播放列表
|