1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import hashlib
- import json
- import time
- import uuid
- import boto3
- from django.http import HttpResponse, JsonResponse
- from django.views import View
- from Ansjer.config import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN
- from Controller.DeviceConfirmRegion import Device_Region
- from Model.models import Device_User, Device_Info, iotdeviceInfoModel, UIDCompanySerialModel, \
- SerialNumberModel
- from Object.IOTCore.IotObject import IOTClient
- from Object.ResponseObject import ResponseObject
- from Service.CommonService import CommonService
- class S3GetStsView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- request_dict = request.GET
- operation = kwargs.get('operation', None)
- return self.validate(operation, request_dict, request)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- request_dict = request.POST
- operation = kwargs.get('operation', None)
- return self.validate(operation, request_dict, request)
- def validate(self, operation, request_dict, request):
- response = ResponseObject()
- if operation == 'ota':
- return self.ota(request_dict, response, request)
- else:
- return response.json(404)
- # 授权ota升级s3预签名
- def ota(self, request_dict, response, request):
- mold = request_dict.get('mold', None) #0国内, 1国外
- region_name = request_dict.get('region_name', None)
- bucket_name = request_dict.get('bucket_name', None)
- endpoint = request_dict.get('endpoint', None)
- filepath = request_dict.get('filepath', None)
- role_name = request_dict.get('jobname', None)
- mold = int(mold)
- try:
- aws_access_key_id = AWS_ACCESS_KEY_ID[mold]
- aws_secret_access_key = AWS_SECRET_ACCESS_KEY[mold]
- aws_arn = AWS_ARN[mold]
- except:
- res = {'code': 404, 'msg': 'mold not exists!'}
- return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
- ###############
- boto3_sts = boto3.client(
- 'sts',
- aws_access_key_id=aws_access_key_id,
- aws_secret_access_key=aws_secret_access_key,
- region_name=region_name
- )
- Policy = {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Action": "s3:*",
- "Resource": ["{aws_arn}:::{bucket_name}/{filepath}*".
- format(aws_arn=aws_arn, bucket_name=bucket_name, filepath=filepath)]
- }
- ]
- }
- response = boto3_sts.get_federation_token(
- Name='{role_name}'.format(role_name=role_name),
- Policy=json.dumps(Policy),
- DurationSeconds=7200
- )
- ##############
- res = {
- 'AccessKeyId': response['Credentials']['AccessKeyId'],
- 'AccessKeySecret': response['Credentials']['SecretAccessKey'],
- 'SessionToken': response['Credentials']['SessionToken'],
- 'Expiration': response['Credentials']['Expiration'],
- 'expire': 900,
- 'endpoint': endpoint,
- 'bucket_name': bucket_name,
- 'arn': response['FederatedUser']['Arn'],
- 'region': region_name,
- 'bucket_mold': mold
- }
- return JsonResponse(status=200, data=res)
|