#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved. @AUTHOR: ASJRD018 @NAME: AnsjerFormal @software: PyCharm @DATE: 2018/12/5 9:30 @Version: python3.6 @MODIFY DECORD:ansjer dev @file: CloudVod.py @Contact: chanjunkai@163.com """ from django.views.generic.base import View from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from Object.TokenObject import TokenObject from Object.ResponseObject import ResponseObject from django.http import JsonResponse from aliyunsdkcore import client from aliyunsdksts.request.v20150401 import AssumeRoleRequest import json import oss2 import jwt from Ansjer.config import UID_TOKEN_KEY from Object.UidTokenObject import UidTokenObject # 设备信息添加 class CloudVodView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(CloudVodView, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, operation) def validation(self, request_dict, operation): response = ResponseObject() if operation is None: return response.json(444, 'error path') if operation == 'getSts': # 移动侦测获取设备sts证书 return self.do_getSts(request_dict, response) elif operation == 'xxx': token = request_dict.get('token', None) tko = TokenObject(token) tko.valid() response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID else: return response.json(10) def do_getSts(self, request_dict, response): ''' 生成sts上传授权 ''' # uidToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJGVFNMTDhITTQzN1ozOFdVMTExQSJ9.GIBt8SgY-3yRt9mlihtvRwLM-MT8uVPDKCUQ2yvV3Vo' uidToken = request_dict.get('uidToken', None) utko = UidTokenObject(uidToken) if utko.flag is False: return response.json(444, 'uidToken') UID = utko.UID endpoint = 'oss-cn-shenzhen.aliyuncs.com' access_key_id = 'LTAIyMkGfEdogyL9' access_key_secret = '71uIjpsqVOmF7DAITRyRuc259jHOjO' bucket_name = 'cloudvod1' # role_arn是角色的资源名称。 role_arn = 'acs:ram::1901342792446414:role/stsoss' clt = client.AcsClient(access_key_id, access_key_secret, 'cn-shenzhen') req = AssumeRoleRequest.AssumeRoleRequest() # 设置返回值格式为JSON。 req.set_accept_format('json') req.set_RoleArn(role_arn) req.set_RoleSessionName(UID) req.set_DurationSeconds(3600) policys = { "Version": "1", "Statement": [ { "Action": [ "oss:PutObject", "oss:DeleteObject", ], "Resource": ["acs:oss:*:*:cloudvod1/*"], "Effect": "Allow", "Condition": { "IpAddress": { "acs:SourceIp": "120.237.157.184" } } } ] } req.set_Policy(Policy=json.dumps(policys)) body = clt.do_action(req) # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。 token = json.loads(body) 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':'{UID}/{Channel}/'.format(UID=UID,Channel=Channel) } return JsonResponse(status=200, data=res)