IotCoreController.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import time
  5. import boto3
  6. from django.views import View
  7. from Model.models import Device_User, Device_Info, RegionCountryModel, iotdeviceInfoModel
  8. from Object.IOTCore.IotObject import ChinaIOTClient, AsiaIOTClient, EuropeIOTClient, AmericaIOTClient
  9. from Object.ResponseObject import ResponseObject
  10. from Service.CommonService import CommonService
  11. class IotCoreView(View):
  12. def get(self, request, *args, **kwargs):
  13. request.encoding = 'utf-8'
  14. request_dict = request.GET
  15. operation = kwargs.get('operation', None)
  16. return self.validate(operation, request_dict)
  17. def post(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. request_dict = request.POST
  20. operation = kwargs.get('operation', None)
  21. return self.validate(operation, request_dict)
  22. def validate(self, operation, request_dict):
  23. response = ResponseObject()
  24. if operation == 'createProvisioningClaim':
  25. return self.create_provisioning_claim(request_dict, response)
  26. elif operation == 'createKeysAndCertificate':
  27. return self.create_keys_and_certificate(request_dict, response)
  28. else:
  29. return response.json(404)
  30. # 即时预置注册 :已放弃
  31. def create_provisioning_claim(self, request_dict, response):
  32. uid = request_dict.get('uid', None)
  33. token = request_dict.get('token', None)
  34. time_stamp = request_dict.get('time_stamp', None)
  35. if uid and token and time_stamp:
  36. token = int(CommonService.decode_data(token))
  37. time_stamp = int(time_stamp)
  38. now_time = int(time.time())
  39. distance = now_time - time_stamp
  40. # if token != time_stamp and distance > 600: 暂时去掉延时
  41. if token != time_stamp:
  42. return response.json(404)
  43. region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
  44. if not region_country_qs.exists():
  45. return response.json(173)
  46. region_country_qs = RegionCountryModel.objects.filter(number=region_country_qs[0]['userID__region_country'])
  47. if region_country_qs.exists():
  48. user_region = region_country_qs[0]
  49. if user_region.region_id == 1:
  50. iotClient = ChinaIOTClient()
  51. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  52. elif user_region.region_id == 2:
  53. iotClient = AsiaIOTClient()
  54. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  55. elif user_region.region_id == 3:
  56. iotClient = EuropeIOTClient()
  57. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  58. else:
  59. iotClient = AmericaIOTClient()
  60. return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
  61. else:
  62. return response.json(444)
  63. # CVM注册 :正使用
  64. def create_keys_and_certificate(self, request_dict, response):
  65. uid = request_dict.get('uid', None)
  66. uid_code = request_dict.get('uid_code', None)
  67. token = request_dict.get('token', None)
  68. time_stamp = request_dict.get('time_stamp', None)
  69. if uid and token and time_stamp and uid_code:
  70. uid_code = CommonService.decode_data(uid_code)
  71. token = int(CommonService.decode_data(token))
  72. time_stamp = int(time_stamp)
  73. now_time = int(time.time())
  74. distance = now_time - time_stamp
  75. # if token != time_stamp and distance > 600: 暂时去掉延时
  76. # if token != time_stamp or uid != uid_code or distance > 600 :
  77. # return response.json(404)
  78. region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
  79. if not region_country_qs.exists():
  80. return response.json(173)
  81. uid_list = []
  82. for i in iotdeviceInfoModel.objects.values('uid'):
  83. # 把数据表里的uid加到uid_list
  84. uid_list.append(i['uid'])
  85. # 判断设备是否已注册证书
  86. if uid not in uid_list:
  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)
  100. Device_Info.objects.filter(UID=uid).update(endpoint=res[0]['endpoint'])
  101. iotdeviceInfoModel.objects.create(uid=uid, certificateId=res[0]['certificateId'],
  102. certificatePem=res[0]['certificatePem'],
  103. publicKey=res[0]['publicKey'],
  104. privateKey=res[0]['privateKey'],
  105. Thingname=res[1]['ThingName'])
  106. return response.json(0, {'res': res})
  107. else:
  108. # print('此设备已注册证书')
  109. return response.json(10042)
  110. else:
  111. return response.json(444)