123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #!/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)
|