SensorGatewayController.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2022/4/26 9:01
  4. @Auth : Locky
  5. @File :SensorGatewayController.py
  6. @IDE :PyCharm
  7. """
  8. import random
  9. import string
  10. from django.views import View
  11. from Object.ResponseObject import ResponseObject
  12. from Service.CommonService import CommonService
  13. class SensorGateway(View):
  14. def get(self, request, *args, **kwargs):
  15. request.encoding = 'utf-8'
  16. operation = kwargs.get('operation')
  17. return self.validation(request.GET, request, operation)
  18. def post(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. operation = kwargs.get('operation')
  21. return self.validation(request.POST, request, operation)
  22. def validation(self, request_dict, request, operation):
  23. response = ResponseObject()
  24. if operation == 'getSensorId': # 返回唯一标识id给设备
  25. return self.getSensorId(request_dict, response)
  26. elif operation == 'registerToAWSIoTCore': # 注册到AWS IoT Core
  27. return self.registerToAWSIoTCore(request_dict, response)
  28. else:
  29. return response.json(404)
  30. @staticmethod
  31. def getSensorId(request_dict, response):
  32. """
  33. 传感器设备获取设备id
  34. @param request_dict: 请求参数
  35. @time_stamp: 时间戳
  36. @time_stamp_token: 时间戳token
  37. @param response: 响应对象
  38. @return: sensorId 六位的随机id
  39. """
  40. time_stamp = request_dict.get('time_stamp', None)
  41. time_stamp_token = request_dict.get('time_stamp_token', None)
  42. if not all([time_stamp, time_stamp_token]):
  43. return response.json(444, {'param': 'time_stamp, time_stamp_token'})
  44. try:
  45. # 时间戳token校验
  46. if not CommonService.check_time_stamp_token_without_distance(time_stamp_token, time_stamp):
  47. return response.json(13)
  48. sensor_id = ''.join(random.sample(string.ascii_letters + string.digits, 6))
  49. return response.json(0, {'sensor_id': sensor_id})
  50. except Exception as e:
  51. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  52. @staticmethod
  53. def registerToAWSIoTCore(request_dict, response):
  54. """
  55. 传感器设备注册到AWS IoT Core
  56. @param request_dict: 请求参数
  57. @request_dict sensor_id: 设备id
  58. @param response: 响应对象
  59. @return: res iot证书等数据
  60. """
  61. sensor_id = request_dict.get('sensor_id', None)
  62. time_stamp = request_dict.get('time_stamp', None)
  63. time_stamp_token = request_dict.get('time_stamp_token', None)
  64. if not all([sensor_id, time_stamp, time_stamp_token]):
  65. return response.json(444, {'param': 'sensor_id, time_stamp, time_stamp_token'})
  66. try:
  67. return response.json(0)
  68. except Exception as e:
  69. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))