IotCoreController.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 Controller.DeviceConfirmRegion import Device_Region
  10. from Model.models import Device_User, Device_Info, iotdeviceInfoModel, UIDCompanySerialModel, \
  11. SerialNumberModel
  12. from Object.IOTCore.IotObject import IOTClient
  13. from Object.ResponseObject import ResponseObject
  14. from Service.CommonService import CommonService
  15. class IotCoreView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. request_dict = request.GET
  19. operation = kwargs.get('operation', None)
  20. return self.validate(operation, request_dict, request)
  21. def post(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. request_dict = request.POST
  24. operation = kwargs.get('operation', None)
  25. return self.validate(operation, request_dict, request)
  26. def validate(self, operation, request_dict, request):
  27. response = ResponseObject()
  28. if operation == 'createKeysAndCertificate':
  29. return self.create_keys_and_certificate(request_dict, response, request)
  30. else:
  31. return response.json(404)
  32. # CVM注册 :正使用
  33. def create_keys_and_certificate(self, request_dict, response, request):
  34. serial_number = request_dict.get('serial_number', None)
  35. serial_number_code = request_dict.get('serial_number_code', None)
  36. token = request_dict.get('token', None)
  37. time_stamp = request_dict.get('time_stamp', None)
  38. device_version = request_dict.get('device_version', None)
  39. if serial_number and token and time_stamp and serial_number_code:
  40. uid_code = CommonService.decode_data(serial_number_code)
  41. token = int(CommonService.decode_data(token))
  42. time_stamp = int(time_stamp)
  43. now_time = int(time.time())
  44. distance = now_time - time_stamp
  45. # if token != time_stamp and distance > 600: 暂时去掉延时
  46. if token != time_stamp or serial_number != serial_number_code :
  47. return response.json(404)
  48. serial = serial_number[0:6]
  49. iotqs = iotdeviceInfoModel.objects.filter(serial_number__serial_number=serial)
  50. # 判断设备是否已注册证书
  51. if not iotqs.exists():
  52. ip = CommonService.get_ip_address(request)
  53. region_id = Device_Region().get_device_region(ip)
  54. iotClient = IOTClient(region_id)
  55. res = iotClient.create_keys_and_certificate(serial, device_version)
  56. nowTime = int(time.time())
  57. token_iot_number = hashlib.md5((str(uuid.uuid1()) + str(nowTime)).encode('utf-8')).hexdigest()
  58. sn = SerialNumberModel.objects.get(serial_number=serial)
  59. iotdeviceInfoModel.objects.create(serial_number=sn,
  60. endpoint=res[0]['endpoint'],
  61. certificate_id=res[0]['certificateId'],
  62. certificate_pem=res[0]['certificatePem'],
  63. public_key=res[0]['publicKey'],
  64. private_key=res[0]['privateKey'],
  65. thing_name=res[1]['ThingName'],
  66. token_iot_number=token_iot_number
  67. )
  68. return response.json(0, {'res': res})
  69. else:
  70. iot = iotqs[0]
  71. res = {
  72. 'certificateId': iot.certificate_id,
  73. 'certificatePem': iot.certificate_pem,
  74. 'publicKey': iot.public_key,
  75. 'privateKey': iot.private_key,
  76. 'endpoint': iot.endpoint
  77. }
  78. # print('此设备已注册证书')
  79. return response.json(0, {'res': res})
  80. else:
  81. return response.json(444)