SuperPasswordTool.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UserDeviceShareController.py
  4. @Time : 2023/2/3 13:25
  5. @Author : guanhailong
  6. @Email : guanhailong@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import datetime
  10. import time
  11. import logging
  12. from django.db import transaction
  13. from Controller.CheckUserData import RandomStr
  14. from Model.models import Device_User, DeviceSuperPassword, SysMsgModel
  15. from Object.RedisObject import RedisObject
  16. from Object.ResponseObject import ResponseObject
  17. from Object.TokenObject import TokenObject
  18. from django.views import View
  19. from Service.CommonService import CommonService
  20. class SuperPasswordView(View):
  21. def get(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation')
  24. request_dict = request.GET
  25. return self.validation(request_dict, request, operation)
  26. def post(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. operation = kwargs.get('operation')
  29. request_dict = request.POST
  30. return self.validation(request_dict, request, operation)
  31. def validation(self, request_dict, request, operation):
  32. tko = TokenObject(
  33. request.META.get('HTTP_AUTHORIZATION'))
  34. lang = request_dict.get('lang', tko.lang)
  35. logger = logging.getLogger('info')
  36. logger.info("传参语言{}".format(lang))
  37. response = ResponseObject(lang)
  38. if tko.code != 0:
  39. return response.json(tko.code)
  40. userID = tko.userID
  41. if operation == 'getAuthorizationCode': # 用户提交请求
  42. return self.getAuthorizationCode(request_dict, response, userID)
  43. if operation == 'customerServiceManagement': # 审核用户请求/生成超级密码
  44. return self.customerServiceManagement(request_dict, response)
  45. if operation == 'getDeviceSuperPassword': # 查询用户请求表
  46. return self.getDeviceSuperPassword(request_dict, response)
  47. if operation == 'verifyTheVerificationCode': # 检验验证码
  48. return self.verifyTheVerificationCode(request_dict, response, userID)
  49. if operation == 'deleteInformation': # 删除信息
  50. return self.deleteInformation(request_dict, response)
  51. else:
  52. return response.json(404)
  53. def getAuthorizationCode(self, request_dict, response, userID):
  54. """
  55. 用户提交请求
  56. @param uid:设备id
  57. @param request_dict:请求参数
  58. @param response:响应对象
  59. @param describe:需求描述
  60. @param Purchase_channel:购买渠道描述
  61. @param orderID:订单id
  62. @param buyTime:购买时间
  63. @return:
  64. """
  65. uid = request_dict.get('uid', None)
  66. describe = request_dict.get('describe', None)
  67. if not all([uid, describe]):
  68. return response.json(444)
  69. purchase_channel = request_dict.get('purchase_channel', None)
  70. orderID = request_dict.get('orderID', None)
  71. buyTime = request_dict.get('buyTime', None)
  72. lang = request_dict.get('lang', 'en')
  73. try:
  74. now = int(time.time())
  75. addTime = now
  76. device_user_qs = Device_User.objects.filter(userID=userID)
  77. if not device_user_qs.exists():
  78. return response.json(173)
  79. if buyTime:
  80. buyTime = datetime.datetime.strptime(buyTime, '%Y-%m-%d')
  81. buyTime = CommonService.str_to_timestamp(str_time=str(buyTime))
  82. DeviceSuperPassword.objects.create(uid=uid, orderID=orderID, describe=describe,
  83. purchase_channel=purchase_channel, addTime=addTime, userID_id=userID,
  84. buyTime=buyTime, status=0, lang=lang)
  85. return response.json(0)
  86. except Exception as e:
  87. print('生成验证码异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  88. return response.json(500, repr(e))
  89. def customerServiceManagement(self, request_dict, response):
  90. """
  91. 审核用户请求/生成超级密码
  92. @param request_dict:请求参数
  93. @param response:响应对象
  94. @param hint:提示内容
  95. @return:
  96. """
  97. ID = request_dict.get('ID', None)
  98. userID = request_dict.get('userID', None)
  99. uid = request_dict.get('uid', None)
  100. status = request_dict.get('status', None)
  101. hint = request_dict.get('hint', None)
  102. lang = request_dict.get('lang', 'en')
  103. if not all({ID, uid, userID}):
  104. return response.json(444)
  105. now = int(time.time())
  106. try:
  107. with transaction.atomic():
  108. device_super_password_qs = DeviceSuperPassword.objects.filter(id=ID, uid=uid, userID=userID)
  109. if not device_super_password_qs.exists():
  110. return response.json(173)
  111. status = int(status)
  112. if status == 1:
  113. # 验证码生成
  114. super_code = RandomStr(6, True)
  115. super_password_id = "super_password_%s" % userID
  116. redisObj = RedisObject()
  117. redis = redisObj.set_data(key=super_password_id, val=super_code, expire=86400)
  118. if redis is False:
  119. return response.json(121)
  120. device_super_password_qs.update(status=status)
  121. if lang == 'en':
  122. msg = "Your authorization code is " + super_code + ",valid within 24 hours"
  123. else:
  124. msg = "您的授权代码:" + super_code + ",24小时内有效"
  125. SysMsgModel.objects.create(userID_id=userID, msg=msg, addTime=now, updTime=now, uid=uid,
  126. eventType=2)
  127. return response.json(0)
  128. if status == 0 and len(hint) > 1:
  129. device_super_password_qs.update(status=status, hint=hint)
  130. msg = hint
  131. SysMsgModel.objects.create(userID_id=userID, msg=msg, addTime=now, updTime=now, uid=uid,
  132. eventType=2)
  133. return response.json(0)
  134. return response.json(177)
  135. except Exception as e:
  136. print('修改状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  137. return response.json(500, repr(e))
  138. def getDeviceSuperPassword(self, request_dict, response):
  139. """
  140. 查询用户请求表
  141. @param request_dict:请求参数
  142. @param response:响应对象
  143. @return:
  144. """
  145. pageNo = request_dict.get('pageNo', None)
  146. pageSize = request_dict.get('pageSize', None)
  147. status = request_dict.get('status', None)
  148. userID = request_dict.get('userID', None)
  149. uid = request_dict.get('uid', None)
  150. if not all([pageNo, pageSize]):
  151. return response.json(444)
  152. page = int(pageNo)
  153. line = int(pageSize)
  154. try:
  155. device_super_password_qs = DeviceSuperPassword.objects.all()
  156. if status:
  157. device_super_password_qs = device_super_password_qs.filter(status=status)
  158. if userID:
  159. device_super_password_qs = device_super_password_qs.filter(userID=userID)
  160. if uid:
  161. device_super_password_qs = device_super_password_qs.filter(uid=uid)
  162. if not device_super_password_qs.exists():
  163. return response.json(0, [])
  164. count = device_super_password_qs.count()
  165. device_super_password_qs = device_super_password_qs.values('id',
  166. 'uid',
  167. 'userID',
  168. 'orderID',
  169. 'describe',
  170. 'purchase_channel',
  171. 'addTime',
  172. 'status',
  173. 'buyTime',
  174. 'hint',
  175. 'lang')
  176. device_super_password_qs = device_super_password_qs.order_by('-addTime')[
  177. (page - 1) * line:page * line]
  178. return response.json(0, {'list': list(device_super_password_qs), 'count': count})
  179. except Exception as e:
  180. print('查询异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  181. return response.json(500, repr(e))
  182. def verifyTheVerificationCode(self, request_dict, response, userID):
  183. """
  184. 检验验证码
  185. @param request_dict:请求参数
  186. @param response:响应对象
  187. @param userID:用户ID
  188. @param authcode:验证码
  189. @return:
  190. """
  191. authcode = request_dict.get('authcode', None)
  192. if authcode:
  193. authcode = CommonService.decode_data(authcode)
  194. if not len(authcode) == 6:
  195. return response.json(121)
  196. super_password_id = 'super_password_' + userID
  197. redisObj = RedisObject()
  198. # redis里面的验证码
  199. redis_image_code = redisObj.get_data(key=super_password_id)
  200. # 验证用户输入的验证码和redis中的验证码
  201. if redis_image_code is False or authcode.lower() != redis_image_code.lower():
  202. return response.json(121)
  203. else:
  204. return response.json(0)
  205. else:
  206. return response.json(444)
  207. def deleteInformation(self, request_dict, response):
  208. """
  209. 删除信息
  210. @param request_dict:请求参数
  211. @param response:响应对象
  212. @param id:主键
  213. """
  214. id = request_dict.get('id', None)
  215. if not id:
  216. return response.json(444)
  217. device_super_password_qs = DeviceSuperPassword.objects.filter(id=id)
  218. if not device_super_password_qs.exists():
  219. return response.json(173)
  220. device_super_password_qs.delete()
  221. return response.json(0)