123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/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: 2019/5/10 8:43
- @Version: python3.6
- @MODIFY DECORD:ansjer dev
- @file: StsOssController.py
- @Contact: chanjunkai@163.com
- """
- from django.views.generic import View
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY, OSS_ROLE_ARN
- from aliyunsdkcore import client
- from aliyunsdksts.request.v20150401 import AssumeRoleRequest
- import json
- from var_dump import var_dump
- class StsOssView(View):
- 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()
- from var_dump import var_dump
- # var_dump(request_dict)
- token = request_dict.get('token', None)
- if operation == 'uidPreview':
- tko = TokenObject(token)
- if tko.code == 0:
- userID = tko.userID
- return self.uid_preview(userID, response)
- else:
- return response.json(tko.code)
- else:
- return response.json(444)
- def uid_preview(self, userID, response):
- storage = '{userID}/uid_preview/'.format(userID=userID)
- bucket_name = 'apg'
- endpoint = 'oss-cn-shenzhen.aliyuncs.com'
- region_id = 'cn-shenzhen'
- clt = client.AcsClient(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, region_id)
- req = AssumeRoleRequest.AssumeRoleRequest()
- req.set_accept_format('json')
- req.set_RoleArn(OSS_ROLE_ARN)
- req.set_RoleSessionName(userID)
- req.set_DurationSeconds(3600)
- Resource_access = "acs:oss:*:*:{bucket_name}/{userID}*".\
- format(bucket_name=bucket_name,userID=userID)
- policys = {
- "Version": "1",
- "Statement": [
- {
- "Action": ["oss:PutObject", "oss:DeleteObject", "oss:GetObject",],
- # "Action": ["*"],
- # "Action": ["*"],
- "Resource": [Resource_access],
- # "Resource": ["*"],
- "Effect": "Allow",
- "Condition": {
- # "IpAddress": {"acs:SourceIp": ip}
- # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
- # "IpAddress": {"acs:SourceIp": "*"}
- }
- },
- #######
- {
- "Effect": "Allow",
- "Action": [
- "oss:ListObjects"
- ],
- "Resource": [
- "*"
- ]
- }
- ]
- }
- 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,
- }
- return response.json(0, res)
|