IotCoreController.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. if uid and token and time_stamp and uid_code:
  72. uid_code = CommonService.decode_data(uid_code)
  73. token = int(CommonService.decode_data(token))
  74. time_stamp = int(time_stamp)
  75. now_time = int(time.time())
  76. distance = now_time - time_stamp
  77. # if token != time_stamp and distance > 600: 暂时去掉延时
  78. if token != time_stamp or uid != uid_code or distance > 600 :
  79. return response.json(404)
  80. region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
  81. if not region_country_qs.exists() or region_country_qs[0]['userID__region_country'] == 0 :
  82. return response.json(173)
  83. iotqs = iotdeviceInfoModel.objects.filter(uid=uid)
  84. # 判断设备是否已注册证书
  85. if not iotqs.exists():
  86. region_country_qs = RegionCountryModel.objects.filter(
  87. number=region_country_qs[0]['userID__region_country'])
  88. if region_country_qs.exists():
  89. user_region = region_country_qs[0]
  90. if user_region.region_id == 1:
  91. iotClient = ChinaIOTClient()
  92. elif user_region.region_id == 2:
  93. iotClient = AsiaIOTClient()
  94. elif user_region.region_id == 3:
  95. iotClient = EuropeIOTClient()
  96. else:
  97. iotClient = AmericaIOTClient()
  98. res = iotClient.create_keys_and_certificate(uid)
  99. nowTime = int(time.time())
  100. token_iot_number = hashlib.md5((str(uuid.uuid1()) + str(nowTime)).encode('utf-8')).hexdigest()
  101. Device_Info.objects.filter(UID=uid).update(endpoint=res[0]['endpoint'], token_iot_number=token_iot_number )
  102. iotdeviceInfoModel.objects.create(uid=uid, certificateId=res[0]['certificateId'],
  103. certificatePem=res[0]['certificatePem'],
  104. publicKey=res[0]['publicKey'],
  105. privateKey=res[0]['privateKey'],
  106. Thingname=res[1]['ThingName'])
  107. return response.json(0, {'res': res})
  108. else:
  109. dev_qs = Device_Info.objects.filter(UID=uid)
  110. iot = iotdeviceInfoModel.objects.get(UID=uid)
  111. res = {
  112. 'certificateId': iot.certificateId,
  113. 'certificatePem': iot.certificatePem,
  114. 'publicKey': iot.publicKey,
  115. 'privateKey': iot.privateKey,
  116. 'endpoint': dev_qs[0]['endpoint']
  117. }
  118. # print('此设备已注册证书')
  119. return response.json(0, {'res': res})
  120. else:
  121. return response.json(444)