AppToApp.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # @Author : Rocky
  2. # @File : AppToApp.py
  3. # @Time : 2023/12/28 11:13
  4. import hashlib
  5. import logging
  6. import time
  7. import uuid
  8. from django.http import JsonResponse
  9. from django.views import View
  10. from model.models import UserModel, AlexaAuthModel
  11. from object.ResObject import ResObject
  12. from service.CommonService import CommonService
  13. class Oa2View(View):
  14. def get(self, request, *args, **kwargs):
  15. request.encoding = 'utf-8'
  16. operation = kwargs.get('operation')
  17. return self.validation(request.GET, operation)
  18. def post(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. operation = kwargs.get('operation')
  21. return self.validation(request.POST, operation)
  22. def validation(self, request_dict, operation):
  23. response = ResObject()
  24. if operation == 'getAuthCodeAndToken': # 获取用户验证码和令牌
  25. return self.get_auth_code_and_token(request_dict, response)
  26. elif operation == 'getTokenWithAuthCode': # 根据用户验证码获取访问令牌
  27. return self.get_token_with_auth_code(request_dict, response)
  28. elif operation == 'updateAmazonToken': # 更新亚马逊令牌
  29. return self.update_amazon_token(request_dict)
  30. else:
  31. return self.print_url(operation, request_dict, response)
  32. @staticmethod
  33. def get_auth_code_and_token(request_dict, response):
  34. user_id = request_dict.get('user_id', None)
  35. region_code = request_dict.get('region_code', None)
  36. if not all([user_id, region_code]):
  37. return response.json(10, 'error params')
  38. try:
  39. now_time = int(time.time())
  40. user_authorization_code = hashlib.md5((str(uuid.uuid1()) + str(now_time)).encode('utf-8')).hexdigest()
  41. access_token = CommonService.encrypt_data(randomlength=32)
  42. refresh_token = CommonService.encrypt_data(randomlength=32)
  43. user_qs = UserModel.objects.filter(userID=user_id)
  44. # 用户不存在则创建
  45. if not user_qs.exists():
  46. code = CommonService.encrypt_data(32)
  47. UserModel.objects.create(userID=user_id, access_token=access_token, refresh_token=refresh_token, code=code,
  48. user_authorization_code=user_authorization_code, region_code=region_code,
  49. addTime=now_time, updTime=now_time)
  50. else:
  51. user_qs.update(access_token=access_token, refresh_token=refresh_token, region_code=region_code,
  52. user_authorization_code=user_authorization_code, updTime=now_time)
  53. res = {
  54. 'user_authorization_code': user_authorization_code,
  55. 'access_token': access_token,
  56. 'refresh_token': refresh_token
  57. }
  58. return response.json(0, res)
  59. except Exception as e:
  60. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  61. @staticmethod
  62. def get_token_with_auth_code(request_dict, response):
  63. logger = logging.getLogger('django')
  64. logger.info('根据用户验证码获取访问令牌参数{}'.format(request_dict))
  65. user_authorization_code = request_dict.get('code', None)
  66. if not user_authorization_code:
  67. return response.json(10, 'error params')
  68. user_qs = UserModel.objects.filter(user_authorization_code=user_authorization_code).values('userID',
  69. 'access_token',
  70. 'refresh_token')
  71. if not user_qs.exists():
  72. return response.json(10, 'user not exists')
  73. access_token = user_qs[0]['access_token']
  74. refresh_token = user_qs[0]['refresh_token']
  75. res_json = {
  76. "access_token": access_token,
  77. "token_type": "bearer",
  78. "expires_in": 3600,
  79. "refresh_token": refresh_token,
  80. }
  81. return JsonResponse(res_json)
  82. @staticmethod
  83. def update_amazon_token(request_dict):
  84. user_id = request_dict.get('user_id')
  85. access_token = request_dict.get('access_token')
  86. refresh_token = request_dict.get('refresh_token')
  87. if not all([user_id, access_token, refresh_token]):
  88. return JsonResponse({}, status=500)
  89. try:
  90. now_time = int(time.time())
  91. AlexaAuthModel.objects.filter(userID=user_id).update(
  92. access_token=access_token, refresh_token=refresh_token, expiresTime=now_time + 3000, updTime=now_time)
  93. return JsonResponse({})
  94. except Exception as e:
  95. return JsonResponse({}, status=500)
  96. @staticmethod
  97. def print_url(operation, request_dict, response):
  98. logger = logging.getLogger('django')
  99. logger.info('打印请求:{} {}'.format(operation, request_dict))
  100. return JsonResponse({})