|
@@ -29,7 +29,7 @@ from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
|
|
|
from django.views.generic.base import View
|
|
|
|
|
|
from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
|
|
|
- SERVER_DOMAIN_SSL
|
|
|
+ SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN
|
|
|
from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
|
|
|
ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User
|
|
|
from Object.AliPayObject import AliPayObject
|
|
@@ -329,142 +329,77 @@ class CloudStorageView(View):
|
|
|
values("bucket__mold", "bucket__bucket", "bucket__endpoint",
|
|
|
"bucket__region", "endTime").order_by('addTime')[:1]
|
|
|
if ubqs.exists():
|
|
|
- if ubqs[0]["bucket__mold"] == 0:
|
|
|
- # 阿里云 oss sts
|
|
|
- oc_qs = OssCrdModel.objects.filter(uid=uid, channel=channel). \
|
|
|
- values("addTime", "data")
|
|
|
- if oc_qs.exists():
|
|
|
- endTime = int(oc_qs[0]["addTime"]) + 3500
|
|
|
- if endTime > now_time:
|
|
|
- print(endTime)
|
|
|
- print(now_time)
|
|
|
- res = json.loads(oc_qs[0]["data"])
|
|
|
- return JsonResponse(status=200, data=res)
|
|
|
+ # 亚马逊 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']
|
|
|
- access_key_id = OSS_STS_ACCESS_KEY
|
|
|
- access_key_secret = OSS_STS_ACCESS_SECRET
|
|
|
- region_id = ubqs[0]['bucket__region']
|
|
|
- role_arn = OSS_ROLE_ARN
|
|
|
- clt = client.AcsClient(access_key_id, access_key_secret, region_id)
|
|
|
- req = AssumeRoleRequest.AssumeRoleRequest()
|
|
|
- # 设置返回值格式为JSON。
|
|
|
- req.set_accept_format('json')
|
|
|
- req.set_RoleArn(role_arn)
|
|
|
- req.set_RoleSessionName(uid + '_' + channel)
|
|
|
- req.set_DurationSeconds(3600)
|
|
|
- Resource_access = "acs:oss:*:*:{bucket_name}/{uid_channel}*". \
|
|
|
- format(bucket_name=bucket_name, uid_channel=storage)
|
|
|
- print(Resource_access)
|
|
|
- policys = {
|
|
|
- "Version": "1",
|
|
|
- "Statement": [
|
|
|
- {
|
|
|
- "Action": ["oss:PutObject", "oss:DeleteObject", ],
|
|
|
- "Resource": [Resource_access],
|
|
|
- "Effect": "Allow",
|
|
|
- "Condition": {
|
|
|
- "IpAddress": {"acs:SourceIp": ip}
|
|
|
- # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
|
|
|
- # "IpAddress": {"acs:SourceIp": "*"}
|
|
|
- }
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
- req.set_Policy(Policy=json.dumps(policys))
|
|
|
- body = clt.do_action(req)
|
|
|
- # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
|
|
|
- token = json.loads(body.decode('utf-8'))
|
|
|
- print(token)
|
|
|
- res = {
|
|
|
- 'AccessKeyId': token['Credentials']['AccessKeyId'],
|
|
|
- 'AccessKeySecret': token['Credentials']['AccessKeySecret'],
|
|
|
- 'SecurityToken': token['Credentials']['SecurityToken'],
|
|
|
- 'Expiration': token['Credentials']['Expiration'],
|
|
|
- 'expire': '3600',
|
|
|
- 'endpoint': endpoint,
|
|
|
- 'bucket_name': bucket_name,
|
|
|
- 'arn': token['AssumedRoleUser']['Arn'],
|
|
|
- 'code': 0,
|
|
|
- 'storage': storage,
|
|
|
- 'endTime': ubqs[0]['endTime'],
|
|
|
- 'ip': ip}
|
|
|
- if oc_qs.exists():
|
|
|
- oc_qs.update(data=json.dumps(res), addTime=now_time)
|
|
|
- else:
|
|
|
- OssCrdModel.objects.create \
|
|
|
- (uid=uid, channel=channel, data=json.dumps(res), addTime=now_time)
|
|
|
- return JsonResponse(status=200, data=res)
|
|
|
- elif 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
|
|
|
- )
|
|
|
- print('--------2--test')
|
|
|
- print(REGION_NAME)
|
|
|
- Policy = {
|
|
|
- "Version": "2012-10-17",
|
|
|
- "Statement": [
|
|
|
- {
|
|
|
- "Effect": "Allow",
|
|
|
- "Action": "s3:*",
|
|
|
- "Resource": ["arn:aws:s3:::{bucket_name}/{uid_channel}*".
|
|
|
- format(bucket_name=bucket_name, uid_channel=storage)]
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
- print(Policy)
|
|
|
- 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!'}
|
|
|
+ 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']
|
|
|
+
|
|
|
+ try:
|
|
|
+ aws_access_key_id = AWS_ACCESS_KEY_ID[ubqs[0]["bucket__mold"]]
|
|
|
+ aws_secret_access_key = AWS_SECRET_ACCESS_KEY[ubqs[0]["bucket__mold"]]
|
|
|
+ aws_arn = AWS_ARN[ubqs[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': '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")
|
|
|
res = {'code': 405, 'msg': 'Not purchased or expired!'}
|
|
|
return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
|
|
|
|
|
@@ -476,21 +411,22 @@ class CloudStorageView(View):
|
|
|
|
|
|
dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False).values('vodPrimaryUserID',
|
|
|
'vodPrimaryMaster')
|
|
|
- if not dv_qs.exists():
|
|
|
- return response.json(12)
|
|
|
- if dv_qs[0]['vodPrimaryUserID'] != '' and dv_qs[0]['vodPrimaryUserID'] != userID:
|
|
|
- return response.json(10034)
|
|
|
+ # if not dv_qs.exists():
|
|
|
+ # return response.json(12)
|
|
|
+ # if dv_qs[0]['vodPrimaryUserID'] != '' and dv_qs[0]['vodPrimaryUserID'] != userID:
|
|
|
+ # return response.json(10034)
|
|
|
now_time = int(time.time())
|
|
|
- bv_qs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time).order_by('addTime')
|
|
|
+ bv_qs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time).values('bucket_id').order_by('addTime')
|
|
|
if not bv_qs.exists():
|
|
|
return response.json(10030)
|
|
|
vh_qs = VodHlsModel.objects.filter \
|
|
|
- (uid=uid, channel=channel, time__range=(startTime, endTime), endTime__gte=now_time). \
|
|
|
+ (uid=uid, channel=channel, endTime__gte=now_time,time__range=(startTime, endTime), bucket_id=bv_qs[0]['bucket_id']). \
|
|
|
values("id", "time", "sec", "bucket__bucket", "fg", "bucket__endpoint", "bucket__region", "bucket__mold")
|
|
|
vod_play_list = []
|
|
|
-
|
|
|
- aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
|
|
|
- aws_secret_access_key = 'ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw'
|
|
|
+ if not vh_qs.exists():
|
|
|
+ return response.json(0, vod_play_list)
|
|
|
+ aws_access_key_id = AWS_ACCESS_KEY_ID[vh_qs[0]["bucket__mold"]]
|
|
|
+ aws_secret_access_key = AWS_SECRET_ACCESS_KEY[vh_qs[0]["bucket__mold"]]
|
|
|
session = Session(
|
|
|
aws_access_key_id=aws_access_key_id,
|
|
|
aws_secret_access_key=aws_secret_access_key,
|
|
@@ -502,57 +438,29 @@ class CloudStorageView(View):
|
|
|
bucket__mold = vod["bucket__mold"]
|
|
|
bucket_name = vod["bucket__bucket"]
|
|
|
endpoint = vod["bucket__endpoint"]
|
|
|
- # bucket__region = vod["bucket__region"]
|
|
|
- if bucket__mold == 0:
|
|
|
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
|
|
|
- bucket = oss2.Bucket(auth, endpoint, bucket_name)
|
|
|
- m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
|
|
|
- format(uid=uid, channel=channel, time=vod['time'])
|
|
|
- ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
|
|
|
- format(uid=uid, channel=channel, time=vod['time'])
|
|
|
- url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
|
|
|
- urllst = url.split('?')
|
|
|
- url_start = urllib.parse.unquote(urllst[0])
|
|
|
- url_end = urllst[1]
|
|
|
- vod_play_url = '{url_start}?{url_end}'. \
|
|
|
- format(url_start=url_start, url_end=url_end)
|
|
|
- thumb = bucket.sign_url('GET', ts, 3600,
|
|
|
- params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
|
|
|
- vod_play_list.append({'name': vod['time'], 'sign_url': vod_play_url,
|
|
|
- 'thumb': thumb, 'sec': vod['sec'], 'vod_id': vod['id']})
|
|
|
- elif bucket__mold == 1:
|
|
|
-
|
|
|
- # aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
|
|
|
- # aws_secret_access_key = 'ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw'
|
|
|
- # session = Session(
|
|
|
- # aws_access_key_id=aws_access_key_id,
|
|
|
- # aws_secret_access_key=aws_secret_access_key,
|
|
|
- # region_name=bucket__region
|
|
|
- # )
|
|
|
- # conn = session.client('s3')
|
|
|
-
|
|
|
- thumbspng = '{uid}/vod{channel}/{time}/Thumb.jpeg'. \
|
|
|
- format(uid=uid, channel=channel, time=vod['time'])
|
|
|
- response_url = conn.generate_presigned_url(
|
|
|
- 'get_object',
|
|
|
- Params={
|
|
|
- 'Bucket': bucket_name,
|
|
|
- 'Key': thumbspng
|
|
|
- },
|
|
|
- ExpiresIn=3600
|
|
|
- )
|
|
|
- vod_url = '{server_domain}/cloudstorage/signplaym3u8?' \
|
|
|
- 'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
|
|
|
- format(server_domain=SERVER_DOMAIN, uid=uid, channel=channel, time=vod['time'])
|
|
|
- ts_num = int(vod['fg']) & 0xf
|
|
|
- vod_play_list.append({
|
|
|
- 'name': vod['time'],
|
|
|
- 'sign_url': vod_url,
|
|
|
- 'thumb': response_url,
|
|
|
- 'sec': vod['sec'],
|
|
|
- 'ts_num': ts_num,
|
|
|
- 'vod_id': vod['id']
|
|
|
- }),
|
|
|
+ bucket__region = vod["bucket__region"]
|
|
|
+ thumbspng = '{uid}/vod{channel}/{time}/Thumb.jpeg'. \
|
|
|
+ format(uid=uid, channel=channel, time=vod['time'])
|
|
|
+ response_url = conn.generate_presigned_url(
|
|
|
+ 'get_object',
|
|
|
+ Params={
|
|
|
+ 'Bucket': bucket_name,
|
|
|
+ 'Key': thumbspng
|
|
|
+ },
|
|
|
+ ExpiresIn=3600
|
|
|
+ )
|
|
|
+ vod_url = '{server_domain}/cloudstorage/signplaym3u8?' \
|
|
|
+ 'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
|
|
|
+ format(server_domain=SERVER_DOMAIN, uid=uid, channel=channel, time=vod['time'])
|
|
|
+ ts_num = int(vod['fg']) & 0xf
|
|
|
+ vod_play_list.append({
|
|
|
+ 'name': vod['time'],
|
|
|
+ 'sign_url': vod_url,
|
|
|
+ 'thumb': response_url,
|
|
|
+ 'sec': vod['sec'],
|
|
|
+ 'ts_num': ts_num,
|
|
|
+ 'vod_id': vod['id']
|
|
|
+ }),
|
|
|
return response.json(0, vod_play_list)
|
|
|
|
|
|
def do_store_playlist(self, request_dict, response):
|
|
@@ -582,44 +490,25 @@ class CloudStorageView(View):
|
|
|
bucket_id = ub_qs_data['bucket__id']
|
|
|
end_time = int(storeTime) + store_day * 86400
|
|
|
if ub_qs_data['status'] == 1:
|
|
|
- if ub_qs_data["bucket__mold"] == 0:
|
|
|
- oss_crd_qs = OssCrdModel.objects.filter(uid=UID, channel=channel)
|
|
|
- if oss_crd_qs.exists():
|
|
|
- VodHlsModel.objects.create(
|
|
|
- uid=UID,
|
|
|
- channel=channel,
|
|
|
- time=storeTime,
|
|
|
- endTime=end_time,
|
|
|
- bucket_id=bucket_id,
|
|
|
- sec=sec,
|
|
|
- )
|
|
|
- res = {'code': 0, 'msg': '存储成功'}
|
|
|
- return HttpResponse(json.dumps(res, ensure_ascii=False),
|
|
|
- content_type="application/json,charset=utf-8")
|
|
|
- else:
|
|
|
- res = {'code': 404, 'msg': '设备未购买'}
|
|
|
- return HttpResponse(json.dumps(res, ensure_ascii=False),
|
|
|
- content_type="application/json,charset=utf-8")
|
|
|
- elif ub_qs_data['bucket__mold'] == 1:
|
|
|
- sts_qs = StsCrdModel.objects.filter(uid=UID, channel=channel, type=1). \
|
|
|
- values("addTime", "data")
|
|
|
- if sts_qs.exists():
|
|
|
- VodHlsModel.objects.create(
|
|
|
- uid=UID,
|
|
|
- channel=channel,
|
|
|
- time=storeTime,
|
|
|
- endTime=end_time,
|
|
|
- bucket_id=bucket_id,
|
|
|
- fg=fg,
|
|
|
- sec=sec,
|
|
|
- )
|
|
|
- res = {'code': 0, 'msg': '存储成功'}
|
|
|
- return HttpResponse(json.dumps(res, ensure_ascii=False),
|
|
|
- content_type="application/json,charset=utf-8")
|
|
|
- else:
|
|
|
- res = {'code': 404, 'msg': '设备未购买'}
|
|
|
- return HttpResponse(json.dumps(res, ensure_ascii=False),
|
|
|
- content_type="application/json,charset=utf-8")
|
|
|
+ sts_qs = StsCrdModel.objects.filter(uid=UID, channel=channel, type=1). \
|
|
|
+ values("addTime", "data")
|
|
|
+ if sts_qs.exists():
|
|
|
+ VodHlsModel.objects.create(
|
|
|
+ uid=UID,
|
|
|
+ channel=channel,
|
|
|
+ time=storeTime,
|
|
|
+ endTime=end_time,
|
|
|
+ bucket_id=bucket_id,
|
|
|
+ fg=fg,
|
|
|
+ sec=sec,
|
|
|
+ )
|
|
|
+ res = {'code': 0, 'msg': '存储成功'}
|
|
|
+ return HttpResponse(json.dumps(res, ensure_ascii=False),
|
|
|
+ content_type="application/json,charset=utf-8")
|
|
|
+ else:
|
|
|
+ res = {'code': 404, 'msg': '设备未购买'}
|
|
|
+ return HttpResponse(json.dumps(res, ensure_ascii=False),
|
|
|
+ content_type="application/json,charset=utf-8")
|
|
|
else:
|
|
|
res = {'code': 404, 'msg': '设备未开启'}
|
|
|
return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
|
|
@@ -1365,9 +1254,7 @@ class CloudStorageView(View):
|
|
|
if switch_commodity_id:
|
|
|
# 切换设备套餐关联
|
|
|
using_uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=int(time.time())).values("id", "uid",
|
|
|
- "endTime",
|
|
|
- "bucket__content").order_by(
|
|
|
- 'addTime')
|
|
|
+ "endTime","bucket__content").order_by('addTime')
|
|
|
|
|
|
if not using_uid_bucket.exists():
|
|
|
return response.json(10030)
|