| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | 
							- #!/usr/bin/env python3
 
- # -*- coding: utf-8 -*-
 
- import hashlib
 
- import json
 
- import time
 
- import uuid
 
- import boto3
 
- from django.views import View
 
- from Model.models import Device_User, Device_Info, RegionCountryModel, iotdeviceInfoModel
 
- from Object.IOTCore.IotObject import ChinaIOTClient, AsiaIOTClient, EuropeIOTClient, AmericaIOTClient
 
- 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)
 
-     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)
 
-     def validate(self, operation, request_dict):
 
-         response = ResponseObject()
 
-         if operation == 'createProvisioningClaim':
 
-             return self.create_provisioning_claim(request_dict, response)
 
-         elif operation == 'createKeysAndCertificate':
 
-             return self.create_keys_and_certificate(request_dict, response)
 
-         else:
 
-             return response.json(404)
 
-     # 即时预置注册  :已放弃
 
-     def create_provisioning_claim(self, request_dict, response):
 
-         uid = request_dict.get('uid', None)
 
-         token = request_dict.get('token', None)
 
-         time_stamp = request_dict.get('time_stamp', None)
 
-         if uid and token and time_stamp:
 
-             token = int(CommonService.decode_data(token))
 
-             time_stamp = int(time_stamp)
 
-             now_time = int(time.time())
 
-             distance = now_time - time_stamp
 
-             # if token != time_stamp and distance > 600: 暂时去掉延时
 
-             if token != time_stamp:
 
-                 return response.json(404)
 
-             region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
 
-             if not region_country_qs.exists() or region_country_qs[0]['userID__region_country'] == 0 :
 
-                 return response.json(173)
 
-             region_country_qs = RegionCountryModel.objects.filter(number=region_country_qs[0]['userID__region_country'])
 
-             if region_country_qs.exists():
 
-                 user_region = region_country_qs[0]
 
-                 if user_region.region_id == 1:
 
-                     iotClient = ChinaIOTClient()
 
-                     return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
 
-                 elif user_region.region_id == 2:
 
-                     iotClient = AsiaIOTClient()
 
-                     return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
 
-                 elif user_region.region_id == 3:
 
-                     iotClient = EuropeIOTClient()
 
-                     return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
 
-                 else:
 
-                     iotClient = AmericaIOTClient()
 
-                     return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
 
-         else:
 
-             return response.json(444)
 
-     # CVM注册  :正使用
 
-     def create_keys_and_certificate(self, request_dict, response):
 
-         uid = request_dict.get('uid', None)
 
-         uid_code = request_dict.get('uid_code', None)
 
-         token = request_dict.get('token', None)
 
-         time_stamp = request_dict.get('time_stamp', None)
 
-         if uid and token and time_stamp and uid_code:
 
-             uid_code = CommonService.decode_data(uid_code)
 
-             token = int(CommonService.decode_data(token))
 
-             time_stamp = int(time_stamp)
 
-             now_time = int(time.time())
 
-             distance = now_time - time_stamp
 
-             # if token != time_stamp and distance > 600: 暂时去掉延时
 
-             if token != time_stamp or uid != uid_code or distance > 600 :
 
-                 return response.json(404)
 
-             region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
 
-             if not region_country_qs.exists() or region_country_qs[0]['userID__region_country'] == 0 :
 
-                 return response.json(173)
 
-             iotqs = iotdeviceInfoModel.objects.filter(uid=uid)
 
-             # 判断设备是否已注册证书
 
-             if not iotqs.exists():
 
-                 region_country_qs = RegionCountryModel.objects.filter(
 
-                     number=region_country_qs[0]['userID__region_country'])
 
-                 if region_country_qs.exists():
 
-                     user_region = region_country_qs[0]
 
-                     if user_region.region_id == 1:
 
-                         iotClient = ChinaIOTClient()
 
-                     elif user_region.region_id == 2:
 
-                         iotClient = AsiaIOTClient()
 
-                     elif user_region.region_id == 3:
 
-                         iotClient = EuropeIOTClient()
 
-                     else:
 
-                         iotClient = AmericaIOTClient()
 
-                     res = iotClient.create_keys_and_certificate(uid)
 
-                     nowTime = int(time.time())
 
-                     token_iot_number = hashlib.md5((str(uuid.uuid1()) + str(nowTime)).encode('utf-8')).hexdigest()
 
-                     Device_Info.objects.filter(UID=uid).update(endpoint=res[0]['endpoint'], token_iot_number=token_iot_number )
 
-                     iotdeviceInfoModel.objects.create(uid=uid, certificateId=res[0]['certificateId'],
 
-                                                       certificatePem=res[0]['certificatePem'],
 
-                                                       publicKey=res[0]['publicKey'],
 
-                                                       privateKey=res[0]['privateKey'],
 
-                                                       Thingname=res[1]['ThingName'])
 
-                     return response.json(0, {'res': res})
 
-             else:
 
-                 dev_qs = Device_Info.objects.filter(UID=uid)
 
-                 iot = iotdeviceInfoModel.objects.get(uid=uid)
 
-                 res = {
 
-                     'certificateId': iot.certificateId,
 
-                     'certificatePem': iot.certificatePem,
 
-                     'publicKey': iot.publicKey,
 
-                     'privateKey': iot.privateKey,
 
-                     'endpoint': dev_qs[0].endpoint
 
-                 }
 
-                 # print('此设备已注册证书')
 
-                 return response.json(0, {'res': res})
 
-         else:
 
-             return response.json(444)
 
 
  |