|
@@ -35,7 +35,6 @@ import oss2
|
|
import paypalrestsdk
|
|
import paypalrestsdk
|
|
import logging
|
|
import logging
|
|
from aliyunsdkcore import client
|
|
from aliyunsdkcore import client
|
|
-from aliyunsdksts.request.v20150401 import AssumeRoleRequest
|
|
|
|
from django.http import JsonResponse, HttpResponse
|
|
from django.http import JsonResponse, HttpResponse
|
|
from django.utils.decorators import method_decorator
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
@@ -533,294 +532,6 @@ class testView(View):
|
|
# return response
|
|
# return response
|
|
# return HttpResponse(status=200, content=playlist)
|
|
# return HttpResponse(status=200, content=playlist)
|
|
|
|
|
|
- def do_test_get_sign_sts(self, request_dict, ip, response):
|
|
|
|
- # uid = 'GZL2PEFJPLY7W6BG111A'
|
|
|
|
- # channel = 2
|
|
|
|
- uid = 'VVDHCVBYDKFMJRWA111A'
|
|
|
|
- channel = 1
|
|
|
|
- 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"] == 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)
|
|
|
|
- # 套餐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
|
|
|
|
- )
|
|
|
|
- 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 + '_' + 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_get_sign_sts(self, request_dict, ip, response):
|
|
|
|
- # uid = 'GZL2PEFJPLY7W6BG111A'
|
|
|
|
- # channel = 2
|
|
|
|
- uid = '86YC8Z192VB1VMKU111A'
|
|
|
|
- channel = 1
|
|
|
|
- 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"] == 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)
|
|
|
|
- # 套餐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
|
|
|
|
- )
|
|
|
|
- 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 + '_' + 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_pay_by_ali(self, request_dict, userID, response):
|
|
def do_pay_by_ali(self, request_dict, userID, response):
|
|
uid = request_dict.get('uid', None)
|
|
uid = request_dict.get('uid', None)
|
|
rank = request_dict.get('rank', None)
|
|
rank = request_dict.get('rank', None)
|