123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
- @AUTHOR: ASJRD018
- @NAME: Ansjer
- @software: PyCharm
- @DATE: 2018/5/22 13:58
- @Version: python3.6
- @MODIFY DECORD:ansjer dev
- @file: Test.py
- @Contact: chanjunkai@163.com
- """
- from django.views.generic.base import View
- import os
- '''
- http://192.168.136.40:8077/Test
- '''
- import json
- import math
- import time
- import urllib
- import datetime
- from Object.AliPayObject import AliPayObject
- import boto3
- from boto3.session import Session
- from botocore.exceptions import ClientError
- import oss2
- import paypalrestsdk
- import logging
- import requests
- import hashlib
- import hmac
- from aliyunsdkcore import client
- from aliyunsdksts.request.v20150401 import AssumeRoleRequest
- from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
- from django.utils.decorators import method_decorator
- from django.views.decorators.csrf import csrf_exempt
- from django.views.generic.base import View
- from Object.RedisObject import RedisObject
- from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
- from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
- SERVER_DOMAIN_SSL
- from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, CompanySerialModel, SerialNumberModel, CompanyModel, VPGModel
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Object.UidTokenObject import UidTokenObject
- from Service.CommonService import CommonService
- from Service.ModelService import ModelService
- from Object.m3u8generate import PlaylistGenerator
- from Model.models import Device_User, Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidPushModel
- SERVER_DOMAIN = 'http://test.dvema.com/'
- ACCESS_KEY = "AKIA2E67UIMD3CYTIWPA"
- SECRET_KEY = "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"
- # 测试接口sdk
- class testView(View):
- @method_decorator(csrf_exempt)
- def dispatch(self, *args, **kwargs):
- return super(testView, self).dispatch(*args, **kwargs)
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.GET, request, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.POST, request, operation)
- def validation(self, request_dict, request, operation):
- response = ResponseObject()
- # operation => cloudVod/path
- if operation is None:
- return response.json(444, 'error path')
- elif operation == 'tests':
- res = make_password(123456)
- return JsonResponse(status=200, data=res,safe=False)
- elif operation == 'cbu':
- return self.createBucket()
- elif operation == 'vodList':
- ip = CommonService.get_ip_address(request)
- userID = '158943594633713800138000'
- return self.do_test_query_vod_list(userID, ip, request_dict, response)
- elif operation == 'signplaym3u8':
- return self.do_sign_play_m3u8(request_dict, response)
- elif operation == 'get_sign_sts':
- ip = CommonService.get_ip_address(request)
- return self.do_test_get_sign_sts(request_dict, ip, response)
- elif operation == 'eqi_query':
- userID = '158943594633713800138000'
- return self.queryInterface(request_dict, userID, response)
- elif operation == 'getAlexa':
- userID = '158943594633713800138000'
- return self.queryInterface(request_dict, userID, response)
- elif operation == 'generateToken':
- userID = '158943604783713800138000'
- return self.generate_token(request_dict,userID)
- elif operation == 'test_upload_s3':
- userID = '158943604783713800138000'
- return self.test_upload_s3(request_dict)
- elif operation == 'rekognition':
- userID = '158943604783713800138000'
- return self.testRekognition(request,request_dict)
- else:
- return 123
- def createBucket(self):
- #查看桶列表
- # url = "https://azvod1.s3-ap-northeast-1.amazonaws.com"
- # session = Session(ACCESS_KEY, SECRET_KEY)
- # s3_client = session.client('s3', endpoint_url=url)
- # results = s3_client.list_buckets()
- # return JsonResponse(status=200, data={'code': 200, 'msg': results['Buckets']})
- # Create bucket
- session = Session(ACCESS_KEY, SECRET_KEY)
- s3_client = session.client('s3')
- #上传
- # s3_client.put_object(Bucket="azvod1", Key="file/rule.txt", Body=open(r"E:\download\Shadowsocks-4.1.10.0\user-rule.txt", 'rb').read())
- #下载
- resp = s3_client.get_object(Bucket="azvod1", Key="file/rule.txt")
- with open('local.txt', 'wb') as f:
- f.write(resp['Body'].read())
- # 新查询设备字段
- def queryInterface(self, request_dict, userID, response):
- page = request_dict.get('page', None)
- line = request_dict.get('line', None)
- NickName = request_dict.get('NickName', None)
- uid = request_dict.get('uid', None)
- page = int(page)
- line = int(line)
- response.lang = 'cn'
- userID = userID
- dvqs = Device_Info.objects.filter(userID_id=userID)
- # # 已重置的设备
- # dvqs = dvqs.filter(~Q(isExist=2))
- if NickName:
- dvqs = dvqs.filter(NickName__icontains=NickName)
- if uid:
- dvqs = dvqs.filter(UID=uid)
- # count = dvqs.count()
- #分页
- dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
- 'View_Password', 'ChannelIndex', 'Type', 'isShare',
- 'primaryUserID', 'primaryMaster', 'data_joined',
- 'version',
- 'isVod', 'isExist', 'NotificationMode')
- dvls = CommonService.qs_to_list(dvql)
- uid_list = []
- for dvl in dvls:
- uid_list.append(dvl['UID'])
- # if dvl['isShare'] is False:
- # uid_list.append(dvl['UID'])
- ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
- values('bucket__content', 'status', 'channel', 'endTime', 'uid')
- upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
- nowTime = int(time.time())
- data = []
- # 设备拓展信息表
- us_qs = UidSetModel.objects.filter(uid__in=uid_list). \
- values('uid', 'version', 'nickname', 'detect_interval')
- uv_dict = {}
- for us in us_qs:
- uv_dict[us['uid']] = {'version': us['version'],
- 'nickname': us['nickname'],
- 'detect_interval': us['detect_interval']}
- for p in dvls:
- p['vod'] = []
- for dm in ubqs:
- if p['UID'] == dm['uid']:
- if dm['endTime'] > nowTime:
- p['vod'].append(dm)
- p['preview'] = []
- for up in upqs:
- if p['UID'] == up['uid']:
- obj = 'uid_preview/{uid}/channel_{channel}.png'. \
- format(uid=up['uid'], channel=up['channel'])
- img_sign = bucket.sign_url('GET', obj, 300)
- p['preview'].append(img_sign)
- p_uid = p['UID']
- if p_uid in uv_dict:
- # 设备版本号
- p['uid_version'] = uv_dict[p_uid]['version']
- p['detect_interval'] = uv_dict[p_uid]['detect_interval']
- # 设备昵称 调用影子信息昵称,先阶段不可
- if uv_dict[p_uid]['nickname']:
- p['NickName'] = uv_dict[p_uid]['nickname']
- else:
- # 设备版本号
- p['uid_version'] = ''
- data.append(p)
- return response.json(0, data)
- #获取播放列表
- def do_test_query_vod_list(self, userID, ip, request_dict, response):
- uid = 'GZL2PEFJPLY7W6BG111A'
- channel = 2
- userID = '158943594633713800138000'
- dv_qs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False)
- if not dv_qs.exists():
- return response.json(12)
- vod_play_list = []
- bucket_name = 'azvod1'
- aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
- aws_secret_access_key = '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'
- session = Session(
- aws_access_key_id=aws_access_key_id,
- aws_secret_access_key=aws_secret_access_key,
- region_name='ap-northeast-1'
- )
- conn = session.client('s3')
- thumbspng = '{uid}/vod{channel}/{time}/thumbs.png'. \
- format(uid=uid, channel=channel, time=1590485548)
- response_url = conn.generate_presigned_url(
- 'get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': thumbspng
- },
- ExpiresIn=3600
- )
- # m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
- # format(uid=uid, channel=channel, time=vod['time'])
- thumb_url = response_url
- vod_url = 'http://192.168.136.191:8000/testApi/signplaym3u8?' \
- 'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
- format(ip=ip, uid=uid, channel=channel, time=1590485548)
- vod_play_list.append({
- 'name': 1590485548,
- 'sign_url': vod_url,
- 'thumb': thumb_url,
- 'sec': 12})
- return response.json(0, vod_play_list)
- #生成m3u8列表
- def do_sign_play_m3u8(self, request_dict, response):
- uid = 'GZL2PEFJPLY7W6BG111A'
- channel = 2
- storeTime = 1591344070
- fg = 6
- bucket__region = 'ap-northeast-1'
- bucket_name = 'azvod1'
- aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
- aws_secret_access_key = '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'
- session = Session(
- aws_access_key_id=aws_access_key_id,
- aws_secret_access_key=aws_secret_access_key,
- region_name=bucket__region
- )
- '''
- http://test.dvema.com/cloudstorage/signplaym3u8?uid=VVDHCVBYDKFMJRWA111A&channel=1&time=1586940120&sign=tktktktk
- '''
- conn = session.client('s3')
- playlist_entries = []
- for i in range(fg):
- thumbspng = '{uid}/vod{channel}/{time}/ts{i}.ts'. \
- format(uid=uid, channel=channel, time=storeTime, i=i)
- response_url = conn.generate_presigned_url(
- 'get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': thumbspng
- },
- ExpiresIn=86400
- )
- # m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
- # format(uid=uid, channel=channel, time=vod['time'])
- playlist_entries.append({
- 'name': response_url,
- 'duration': 10,
- })
- playlist = PlaylistGenerator(playlist_entries).generate()
- response = HttpResponse(playlist)
- response['Content-Type'] = 'application/octet-stream'
- response['Content-Disposition'] = 'attachment;filename="play.m3u8"'
- return response
- # return HttpResponse(playlist)
- # response = HttpResponse(playlist, content_type="application/vnd.apple.mpegurl")
- # # response = HttpResponse(playlist, content_type="application/octet-stream")
- # return response
- # 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='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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 + '_' + 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='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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 + '_' + 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):
- uid = request_dict.get('uid', None)
- rank = request_dict.get('rank', None)
- channel = request_dict.get('channel', None)
- qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False)
- if not qs.exists():
- return response.json(12)
- if not channel or not rank:
- return response.json(444, 'channel,rank')
- smqs = Store_Meal.objects.filter(id=rank). \
- values("currency", "price", "content", "day", "bucket__storeDay", "bucket__region", "type")
- if not smqs.exists():
- # 套餐不存在
- return response.json(173)
- if smqs[0]['type'] != 1:
- return response.json(10, '不支持支付宝支付')
- currency = smqs[0]['currency']
- price = smqs[0]['price']
- content = smqs[0]['content']
- day = smqs[0]['day']
- nowTime = int(time.time())
- ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=nowTime). \
- values("bucket__storeDay", "bucket__region")
- if ubqs.exists():
- if ubqs[0]['bucket__region'] != smqs[0]['bucket__region']:
- return response.json(712) # 区域不一致
- elif ubqs[0]['bucket__storeDay'] != smqs[0]['bucket__storeDay']:
- return response.json(713) # 不可更改套餐
- # 续费流程
- nowTime = int(time.time())
- # 新增流程
- orderID = CommonService.createOrderID()
- try:
- aliPayObj = AliPayObject()
- alipay = aliPayObj.conf()
- order_string = alipay.api_alipay_trade_wap_pay(
- out_trade_no=orderID,
- total_amount=price,
- subject="测试哟",
- return_url="{SERVER_DOMAIN_SSL}cloudVod/payOK".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
- notify_url="{SERVER_DOMAIN_SSL}cloudVod/aliPayCallback".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
- # return_url="http://192.168.136.40/cloudVod/payOK",
- # notify_url="http://192.168.136.40/cloudVod/aliPayCallback"
- )
- except Exception as e:
- print(repr(e))
- return response.json(10, repr(e))
- if order_string:
- redirectUrl = aliPayObj.alipay_prefix + order_string
- Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID, desc=content,
- price=price, currency=currency, addTime=nowTime, updTime=nowTime,
- endTime=nowTime + int(day) * 3600 * 24, rank_id=rank, payType=1)
- return JsonResponse(status=200,
- data={'result_code': 0, 'reason': 'success',
- 'result': {"redirectUrl": redirectUrl, "orderID": orderID},
- 'error_code': 0})
- else:
- return response.json(10, '生成订单错误')
- def do_filter_playlist(self, request_dict, userID, response):
- startTime = int(request_dict.get('startTime', None))
- endTime = int(request_dict.get('endTime', None))
- uid = request_dict.get('uid', None)
- channel = request_dict.get('channel', None)
- dvqs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False)
- if not dvqs.exists():
- return response.json(12)
- ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values('status')
- if not ubqs.exists():
- return response.json(10, '设备未购买')
- nowTime = int(time.time())
- # vodqs = VodHlsModel.objects.filter(uid=uid, channel=channel, time__range=(startTime, endTime),
- # endTime__gte=nowTime) \
- # .values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region")
- vodqs = VodHlsModel.objects.filter(uid=uid, channel=channel) \
- .values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region")
- vod_play_list = []
- print(vodqs)
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- for vod in vodqs:
- bucket_name = vod["bucket__bucket"]
- endpoint = vod["bucket__endpoint"]
- 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']})
- return response.json(0, vod_play_list)
- def generate_token(self,request_dict,userID):
- # UserIdToken
- tko = TokenObject()
- res = tko.generate(
- data={'userID': 158943594633713800138000, 'lang': 'cn', 'user': '597471180@qq.com', 'm_code': '123413243214'})
- #uidToken
- # utko = UidTokenObject()
- # res = utko.generate(data={'uid': 'XKWZSC5FCJYT19B7111A','channel': 1})
- return JsonResponse(status=200, data=res,safe=False)
- def test_upload_s3(self,request_dict):
- times = '2021-05-24 11:37:04+00:00'
- test = CommonService.str_to_timestamp(times)
- exit(test)
- # redisObject = RedisObject()
- # res = redisObject.rpush('serial_lock', 'serial_lock')
- #
- # exit(res)
- #
- # res = CompanyModel.objects.filter(id=3).delete()
- # exit(res)
- #
- # testd = hmac.new('AWS4rf/xnQ3jIgY8bj7Sz4An4KbYct2sq2MbrfmP8rVV'.encode("utf-8"), '20210223'.encode("utf-8"), hashlib.sha256).digest()
- # region_sign = hmac.new(testd, 'cn-northwest-1'.encode("utf-8"), hashlib.sha256).hexdigest()
- # exit(region_sign)
- # kService = sign(kRegion, 's3')
- # kSigning = sign(kService, 'aws4_request')
- # exit(CommonService.getIpIpInfo("120.197.196.156",'CN'))
- exit(1123123)
- aws_key = "ASIA2MMWBR4DXDM36CEN" #【你的 aws_access_key】
- aws_secret = "qLmvltAthKkD5tGuFP/LE5YEmiD/iVBwuC3PneHm" #【你的 aws_access_key】
- aws_session_token = "IQoJb3JpZ2luX2VjEFIaDmNuLW5vcnRod2VzdC0xIkgwRgIhAL60RpDvgWluwYehRrb3NgFDgMZYEOzqnwAgz3NH/2jiAiEA2G026WLnK4h38wctp6Wt7jnfJSUdyr7GJ7NKUCU4kKkq8QIIfxAAGgw3MTM4MTYxMTY5OTkiDNKIYzjvazWRomqCeSrOAgGuglgcUw3/QGPBLb1B5WpYU0RXw+UTfS4UIpmXHvJ8wUR6y50H0QxAWv5ADGXDam7gVV+jxcQpB6X9RZgHiDmnpzKO6PrRtevSoh89F519ffumHdoNpRNGA04vh4XcPIfLsaETgDAUFkWY2Ha3OxaDgF8+6R+0OsGNTSTmQO2yr2u3LfsoSVn6+vTLHOq8O5+xVMzFJzVzffJJenB5n2Tm2DiLoCPLZbKrm5i4bHPCb4+e6T9H8G/OqI15k8Tdu4xr6hkObTb2DmTwFcTRYXLy14iU6S+8j59UcBg1LUVz7Ygenoz6kvj0t4SGN8ogShFdZtxFp9yl5hVHzNg8/JiKbm1AI8h1TD4F3zN+va1qrUa3wBUKK8uSOzG7CG4yX42NK6q5bx9B6sI53vWLeBBREgYB4gD7yOOFKjz8MPukVgoWDLKMZJzTqnnAgjAwqpOthQY6mAGHp2YELSBx8McgvRcHmv/Ebp2vhWYZRXOuNrX574ZVAmHsIbzQFkZvEoXOu3uIHY17cqskeJna2lXaSwZDnm0wIDCVHorcN2n1GjEG/JA6CNv2jYBtiG7DzllLzUe0B1OPFQsO7W9ctkSSlA51njWVGHkKiRfml51XXvMzxOV7APllBvglvFgGr2q8FfayNKYtf7VoaBMDYg=="
- session = Session(aws_access_key_id=aws_key,
- aws_secret_access_key=aws_secret,
- aws_session_token=aws_session_token,
- region_name="cn-northwest-1") # 此处根据自己的 s3 地区位置改变
- s3 = session.resource("s3")
- # client = session.client("s3")
- bucket = "cn-formal-cs-experience-7day-3month" # 【你 bucket 的名字】 # 首先需要保.证 s3 上已经存在该存储桶,否则报错
- upload_data = open("./././PushModel/tests.py", "rb")
- # upload_key = "XKWZSC5FCJYT19B7111A/test/test6/test.log"
- upload_key = "THY7M84KLDNZ9XE8111A/vod1/info.log"
- file_obj = s3.Bucket(bucket).put_object(Key=upload_key, Body=upload_data)
- print('---------------------')
- exit(file_obj)
- def testRekognition(self,request,request_dict):
- # ip = CommonService.get_ip_address(request)
- # ipInfo = CommonService.getIpIpInfo(ip,"CN")
- # # print(type(ipInfo))
- # # exit(ipInfo)
- # addr = CommonService.getAddr(ip)
- # dicts = {
- # 'ipInfo':ipInfo,
- # 'addr':addr,
- # }
- # return HttpResponse(json.dumps(dicts, ensure_ascii=False),
- # content_type="application/json,charset=utf-8")
- # client = boto3.client('s3', aws_access_key_id='AKIA2E67UIMD45Y3HL53',aws_secret_access_key='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',region_name='us-east-1')
- # exit(request.FILES)
- files = request.FILES.get('image')
- labels = int(request_dict.get('labels',5))
- minConfidence = int(request_dict.get('minConfidence',99))
- if not files:
- return HttpResponse('请上传图片!!!!')
- client = boto3.client('rekognition', aws_access_key_id='AKIA2E67UIMD6JD6TN3J',aws_secret_access_key='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',region_name='us-east-1')
- # image = open('E:/photo/a615fa40b8c476bab0f6eeb332e62a5a-1000.jpg', "rb")
- response = client.detect_labels(Image={'Bytes':files.read()},MaxLabels=labels,MinConfidence=minConfidence)
- # for obj in response['Labels']:
- # exit(obj)
- # if obj['Name'] == 'Person':
- # jsonstr = json.dumps(obj)
- return HttpResponse(json.dumps(response, ensure_ascii=False),
- content_type="application/json,charset=utf-8")
|