123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/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
- )
- 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)
|