CloudVod.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2018/12/5 9:30
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: CloudVod.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. from django.views.generic.base import View
  15. from django.utils.decorators import method_decorator
  16. from django.views.decorators.csrf import csrf_exempt
  17. from Object.TokenObject import TokenObject
  18. from Object.ResponseObject import ResponseObject
  19. from django.http import JsonResponse
  20. from aliyunsdkcore import client
  21. from aliyunsdksts.request.v20150401 import AssumeRoleRequest
  22. import json
  23. import oss2
  24. import jwt
  25. from Ansjer.config import UID_TOKEN_KEY
  26. from Object.UidTokenObject import UidTokenObject
  27. # 设备信息添加
  28. class CloudVodView(View):
  29. @method_decorator(csrf_exempt)
  30. def dispatch(self, *args, **kwargs):
  31. return super(CloudVodView, self).dispatch(*args, **kwargs)
  32. def get(self, request, *args, **kwargs):
  33. request.encoding = 'utf-8'
  34. operation = kwargs.get('operation')
  35. return self.validation(request.GET, operation)
  36. def post(self, request, *args, **kwargs):
  37. request.encoding = 'utf-8'
  38. operation = kwargs.get('operation')
  39. return self.validation(request.POST, operation)
  40. def validation(self, request_dict, operation):
  41. response = ResponseObject()
  42. if operation is None:
  43. return response.json(444, 'error path')
  44. if operation == 'getSts':
  45. # 移动侦测获取设备sts证书
  46. return self.do_getSts(request_dict, response)
  47. elif operation == 'xxx':
  48. token = request_dict.get('token', None)
  49. tko = TokenObject(token)
  50. tko.valid()
  51. response.lang = tko.lang
  52. if tko.code != 0:
  53. return response.json(tko.code)
  54. userID = tko.userID
  55. else:
  56. return response.json(10)
  57. def do_getSts(self, request_dict, response):
  58. '''
  59. 生成sts上传授权
  60. '''
  61. # uidToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJGVFNMTDhITTQzN1ozOFdVMTExQSJ9.GIBt8SgY-3yRt9mlihtvRwLM-MT8uVPDKCUQ2yvV3Vo'
  62. uidToken = request_dict.get('uidToken', None)
  63. utko = UidTokenObject(uidToken)
  64. if utko.flag is False:
  65. return response.json(444, 'uidToken')
  66. UID = utko.UID
  67. endpoint = 'oss-cn-shenzhen.aliyuncs.com'
  68. access_key_id = 'LTAIyMkGfEdogyL9'
  69. access_key_secret = '71uIjpsqVOmF7DAITRyRuc259jHOjO'
  70. bucket_name = 'cloudvod1'
  71. # role_arn是角色的资源名称。
  72. role_arn = 'acs:ram::1901342792446414:role/stsoss'
  73. clt = client.AcsClient(access_key_id, access_key_secret, 'cn-shenzhen')
  74. req = AssumeRoleRequest.AssumeRoleRequest()
  75. # 设置返回值格式为JSON。
  76. req.set_accept_format('json')
  77. req.set_RoleArn(role_arn)
  78. req.set_RoleSessionName(UID)
  79. req.set_DurationSeconds(3600)
  80. policys = {
  81. "Version": "1",
  82. "Statement": [
  83. {
  84. "Action": [
  85. "oss:PutObject",
  86. "oss:DeleteObject",
  87. ],
  88. "Resource": ["acs:oss:*:*:cloudvod1/*"],
  89. "Effect": "Allow",
  90. "Condition": {
  91. "IpAddress": {
  92. "acs:SourceIp": "120.237.157.184"
  93. }
  94. }
  95. }
  96. ]
  97. }
  98. req.set_Policy(Policy=json.dumps(policys))
  99. body = clt.do_action(req)
  100. # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
  101. token = json.loads(body)
  102. print(token)
  103. res = {
  104. 'AccessKeyId': token['Credentials']['AccessKeyId'],
  105. 'AccessKeySecret': token['Credentials']['AccessKeySecret'],
  106. 'SecurityToken': token['Credentials']['SecurityToken'],
  107. 'Expiration': token['Credentials']['Expiration'],
  108. 'expire': '3600',
  109. 'endpoint': endpoint,
  110. 'bucket_name': bucket_name,
  111. 'arn': token['AssumedRoleUser']['Arn'],
  112. 'code': 0,
  113. 'storage':'{UID}/{Channel}/'.format(UID=UID,Channel=Channel)
  114. }
  115. return JsonResponse(status=200, data=res)