StsOssController.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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: 2019/5/10 8:43
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: StsOssController.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. from django.views.generic import View
  15. from Object.ResponseObject import ResponseObject
  16. from Object.TokenObject import TokenObject
  17. from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY, OSS_ROLE_ARN
  18. from aliyunsdkcore import client
  19. from aliyunsdksts.request.v20150401 import AssumeRoleRequest
  20. import json
  21. from var_dump import var_dump
  22. class StsOssView(View):
  23. def get(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. operation = kwargs.get('operation')
  26. return self.validation(request.GET, operation)
  27. def post(self, request, *args, **kwargs):
  28. request.encoding = 'utf-8'
  29. operation = kwargs.get('operation')
  30. return self.validation(request.POST, operation)
  31. def validation(self, request_dict, operation):
  32. response = ResponseObject()
  33. from var_dump import var_dump
  34. # var_dump(request_dict)
  35. token = request_dict.get('token', None)
  36. if operation == 'uidPreview':
  37. tko = TokenObject(token)
  38. if tko.code == 0:
  39. userID = tko.userID
  40. return self.uid_preview(userID, response)
  41. else:
  42. return response.json(tko.code)
  43. else:
  44. return response.json(444)
  45. def uid_preview(self, userID, response):
  46. storage = '{userID}/uid_preview/'.format(userID=userID)
  47. bucket_name = 'apg'
  48. endpoint = 'oss-cn-shenzhen.aliyuncs.com'
  49. region_id = 'cn-shenzhen'
  50. clt = client.AcsClient(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, region_id)
  51. req = AssumeRoleRequest.AssumeRoleRequest()
  52. req.set_accept_format('json')
  53. req.set_RoleArn(OSS_ROLE_ARN)
  54. req.set_RoleSessionName(userID)
  55. req.set_DurationSeconds(3600)
  56. Resource_access = "acs:oss:*:*:{bucket_name}/{userID}*".format(bucket_name=bucket_name,
  57. userID=userID)
  58. Resource_access_root = "acs:oss:*:*:{bucket_name}".format(bucket_name=bucket_name)
  59. # Resource_access_root = "acs:oss:*:*:{bucket_name}".format(bucket_name=bucket_name)
  60. print(Resource_access)
  61. # policys = {
  62. # "Version": "1",
  63. # "Statement": [
  64. # {
  65. # "Action": ["oss:PutObject", "oss:DeleteObject", "oss:GetObject", "oss:List*"],
  66. # # "Action": ["*"],
  67. # "Resource": [Resource_access],
  68. # # "Resource": ["*"],
  69. # "Effect": "Allow",
  70. # "Condition": {
  71. # # "IpAddress": {"acs:SourceIp": ip}
  72. # # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
  73. # # "IpAddress": {"acs:SourceIp": "*"}
  74. # }
  75. # },
  76. # #######
  77. # ]
  78. # }
  79. policys = {
  80. "Version": "1",
  81. "Statement": [
  82. {
  83. "Effect": "Allow",
  84. "Action": [
  85. "oss:List*",
  86. "oss:Put*",
  87. "oss:Get*"
  88. ],
  89. "Resource": [
  90. "acs:oss:*:*:151564262337939513800138001/uid_preview"
  91. ],
  92. "Condition": {}
  93. },
  94. {
  95. "Effect": "Allow",
  96. "Action": [
  97. "oss:ListObjects"
  98. ],
  99. "Resource": [
  100. "acs:oss:*:*:151564262337939513800138001"
  101. ],
  102. "Condition": {
  103. "StringLike": {
  104. "oss:Prefix": [
  105. ""
  106. ]
  107. },
  108. "StringEquals": {
  109. "oss:Delimiter": "/"
  110. }
  111. }
  112. }
  113. ]
  114. }
  115. req.set_Policy(Policy=json.dumps(policys))
  116. body = clt.do_action(req)
  117. # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
  118. token = json.loads(body.decode('utf-8'))
  119. print(token)
  120. res = {
  121. 'AccessKeyId': token['Credentials']['AccessKeyId'],
  122. 'AccessKeySecret': token['Credentials']['AccessKeySecret'],
  123. 'SecurityToken': token['Credentials']['SecurityToken'],
  124. 'Expiration': token['Credentials']['Expiration'],
  125. 'expire': 3600,
  126. 'endpoint': endpoint,
  127. 'bucket_name': bucket_name,
  128. 'arn': token['AssumedRoleUser']['Arn'],
  129. 'code': 0,
  130. 'storage': storage,
  131. }
  132. return response.json(0, res)