IotCoreController.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import hashlib
  4. import json
  5. import time
  6. import uuid
  7. import boto3
  8. from django.views import View
  9. from Model.models import Device_User, Device_Info, RegionCountryModel, iotdeviceInfoModel
  10. from Object.IOTCore.IotObject import ChinaIOTClient, AsiaIOTClient, EuropeIOTClient, AmericaIOTClient
  11. from Object.ResponseObject import ResponseObject
  12. from Service.CommonService import CommonService
  13. class IotCoreView(View):
  14. def get(self, request, *args, **kwargs):
  15. request.encoding = 'utf-8'
  16. request_dict = request.GET
  17. operation = kwargs.get('operation', None)
  18. return self.validate(operation, request_dict)
  19. def post(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. request_dict = request.POST
  22. operation = kwargs.get('operation', None)
  23. return self.validate(operation, request_dict)
  24. def validate(self, operation, request_dict):
  25. response = ResponseObject()
  26. if operation == 'createProvisioningClaim':
  27. return self.create_provisioning_claim(request_dict, response)
  28. elif operation == 'createKeysAndCertificate':
  29. return self.create_keys_and_certificate(request_dict, response)
  30. else:
  31. return response.json(404)
  32. # 即时预置注册 :已放弃
  33. def create_provisioning_claim(self, request_dict, response):
  34. uid = request_dict.get('uid', None)
  35. token = request_dict.get('token', None)
  36. time_stamp = request_dict.get('time_stamp', None)
  37. if uid and token and time_stamp:
  38. token = int(CommonService.decode_data(token))
  39. time_stamp = int(time_stamp)
  40. now_time = int(time.time())
  41. distance = now_time - time_stamp
  42. # if token != time_stamp and distance > 600: 暂时去掉延时
  43. if token != time_stamp :
  44. return response.json(404)
  45. region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
  46. if not region_country_qs.exists() or region_country_qs[0]['userID__region_country'] == 0 :
  47. return response.json(173)
  48. region_country_qs = RegionCountryModel.objects.filter(number=region_country_qs[0]['userID__region_country'])
  49. if region_country_qs.exists():
  50. user_region = region_country_qs[0]
  51. if user_region.region_id == 1:
  52. iotClient = ChinaIOTClient()
  53. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  54. elif user_region.region_id == 2:
  55. iotClient = AsiaIOTClient()
  56. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  57. elif user_region.region_id == 3:
  58. iotClient = EuropeIOTClient()
  59. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  60. else:
  61. iotClient = AmericaIOTClient()
  62. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  63. else:
  64. return response.json(444)
  65. # CVM注册 :正使用
  66. def create_keys_and_certificate(self, request_dict, response):
  67. uid = request_dict.get('uid', None)
  68. uid_code = request_dict.get('uid_code', None)
  69. token = request_dict.get('token', None)
  70. time_stamp = request_dict.get('time_stamp', None)
  71. device_version = request_dict.get('device_version', None)
  72. if uid and token and time_stamp and uid_code:
  73. uid_code = CommonService.decode_data(uid_code)
  74. token = int(CommonService.decode_data(token))
  75. time_stamp = int(time_stamp)
  76. now_time = int(time.time())
  77. distance = now_time - time_stamp
  78. # if token != time_stamp and distance > 600: 暂时去掉延时
  79. if token != time_stamp or uid != uid_code :
  80. return response.json(404)
  81. region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
  82. if not region_country_qs.exists() or region_country_qs[0]['userID__region_country'] == 0 :
  83. return response.json(173)
  84. iotqs = iotdeviceInfoModel.objects.filter(uid=uid)
  85. # 判断设备是否已注册证书
  86. if not iotqs.exists():
  87. region_country_qs = RegionCountryModel.objects.filter(
  88. number=region_country_qs[0]['userID__region_country'])
  89. if region_country_qs.exists():
  90. user_region = region_country_qs[0]
  91. if user_region.region_id == 1:
  92. iotClient = ChinaIOTClient()
  93. elif user_region.region_id == 2:
  94. iotClient = AsiaIOTClient()
  95. elif user_region.region_id == 3:
  96. iotClient = EuropeIOTClient()
  97. else:
  98. iotClient = AmericaIOTClient()
  99. res = iotClient.create_keys_and_certificate(uid, device_version)
  100. nowTime = int(time.time())
  101. token_iot_number = hashlib.md5((str(uuid.uuid1()) + str(nowTime)).encode('utf-8')).hexdigest()
  102. Device_Info.objects.filter(UID=uid).update(endpoint=res[0]['endpoint'], token_iot_number=token_iot_number )
  103. iotdeviceInfoModel.objects.create(uid=uid, certificateId=res[0]['certificateId'],
  104. certificatePem=res[0]['certificatePem'],
  105. publicKey=res[0]['publicKey'],
  106. privateKey=res[0]['privateKey'],
  107. Thingname=res[1]['ThingName'])
  108. return response.json(0, {'res': res})
  109. else:
  110. dev_qs = Device_Info.objects.filter(UID=uid)
  111. iot = iotdeviceInfoModel.objects.get(uid=uid)
  112. res = {
  113. 'certificateId': iot.certificateId,
  114. 'certificatePem': iot.certificatePem,
  115. 'publicKey': iot.publicKey,
  116. 'privateKey': iot.privateKey,
  117. 'endpoint': dev_qs[0].endpoint
  118. }
  119. # print('此设备已注册证书')
  120. return response.json(0, {'res': res})
  121. else:
  122. return response.json(444)