#!/usr/bin/env python3 # -*- coding: utf-8 -*- import hashlib import json import time import uuid import boto3 from django.views import View 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 IotCoreView(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 == 'createKeysAndCertificate': return self.create_keys_and_certificate(request_dict, response, request) else: return response.json(404) # CVM注册 :正使用 def create_keys_and_certificate(self, request_dict, response, request): serial_number = request_dict.get('serial_number', None) serial_number_code = request_dict.get('serial_number_code', None) token = request_dict.get('token', None) time_stamp = request_dict.get('time_stamp', None) device_version = request_dict.get('device_version', None).replace('.', '_') # 物品组命名不能包含'.' language = request_dict.get('language', None) if serial_number and token and time_stamp and serial_number_code and device_version and language: uid_code = CommonService.decode_data(serial_number_code) token = int(CommonService.decode_data(token)) time_stamp = int(time_stamp) now_time = int(time.time()) distance = now_time - time_stamp thingGroup = device_version + '_' + language # if token != time_stamp and distance > 600: 暂时去掉延时 # if token != time_stamp or serial_number != serial_number_code : # return response.json(404) serial = serial_number[0:6] iotqs = iotdeviceInfoModel.objects.filter(serial_number__serial_number=serial) # 判断设备是否已注册证书 if not iotqs.exists(): ip = CommonService.get_ip_address(request) region_id = Device_Region().get_device_region(ip) iotClient = IOTClient(region_id) res = iotClient.create_keys_and_certificate(serial, thingGroup) nowTime = int(time.time()) token_iot_number = hashlib.md5((str(uuid.uuid1()) + str(nowTime)).encode('utf-8')).hexdigest() sn = SerialNumberModel.objects.get(serial_number=serial) iotdeviceInfoModel.objects.create(serial_number=sn, endpoint=res[0]['endpoint'], certificate_id=res[0]['certificateId'], certificate_pem=res[0]['certificatePem'], public_key=res[0]['publicKey'], private_key=res[0]['privateKey'], thing_name=res[1]['ThingName'], token_iot_number=token_iot_number ) res = { 'certificateId': res[0]['certificateId'], 'certificatePem': res[0]['certificatePem'], 'publicKey': res[0]['publicKey'], 'privateKey': res[0]['privateKey'], 'endpoint': res[0]['endpoint'] } return response.json(0, {'res': res}) else: iot = iotqs[0] res = { 'certificateId': iot.certificate_id, 'certificatePem': iot.certificate_pem, 'publicKey': iot.public_key, 'privateKey': iot.private_key, 'endpoint': iot.endpoint } # print('此设备已注册证书') return response.json(0, {'res': res}) else: return response.json(444)