TokenObject.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import datetime
  2. import jwt
  3. import time
  4. import requests
  5. from Model.models import TokenRecord
  6. from Object.RedisObject import RedisObject
  7. from Ansjer.config import OAUTH_ACCESS_TOKEN_SECRET, OAUTH_REFRESH_TOKEN_SECRET, OAUTH_ACCESS_TOKEN_TIME, \
  8. OAUTH_REFRESH_TOKEN_TIME, CONFIG_INFO, CONFIG_TEST, CONFIG_CN, DETECT_PUSH_DOMAINS, LOGGER
  9. class TokenObject:
  10. def __init__(self, token=None, returntpye='currency'):
  11. if token == 'local':
  12. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTg0MzUxODk2MjgyMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM2ODAzMTc1OTYiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODcyNzcwNjB9.c0LV_XyxwbzUlYqMJqx7vw9f19Jv-0kGnUHuu_go-mo'
  13. if token == 'test':
  14. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1Njk5OTg4OTYsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.VAQtT9AbCCfXcrNj9DL5cvVasMDoI7AP8ptgU1GoMu8'
  15. self.token = token
  16. self.lang = None
  17. self.userID = None
  18. self.user = ''
  19. self.code = 0
  20. self.valid()
  21. self.returntpye = returntpye
  22. def valid(self):
  23. if self.token is None:
  24. self.code = 309
  25. return
  26. try:
  27. self.token = self.token.replace("Bearer ", "")
  28. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  29. self.userID = res.get('userID', None)
  30. self.lang = res.get('lang', None)
  31. self.user = res.get('user', '')
  32. # 刷新登录时间
  33. # if self.userID:
  34. # print(self.user)
  35. # redisObj = RedisObject(db=3)
  36. # redisObj.set_data(key=self.userID, val=self.user, expire=300)
  37. except jwt.ExpiredSignatureError as e:
  38. self.code = 309
  39. # self.update_token(repr(e))
  40. return
  41. except Exception as e:
  42. self.code = 309
  43. # self.update_token(repr(e))
  44. return
  45. else:
  46. if not self.userID:
  47. self.code = 309
  48. # self.update_token('缺少用户ID')
  49. return
  50. else:
  51. if self.userID:
  52. self.code = 0
  53. return res
  54. else:
  55. self.code = 309
  56. return
  57. def generate(self, old_refresh_token=None, data=None):
  58. if data is None:
  59. data = {}
  60. now_time = int(time.time())
  61. try:
  62. if CONFIG_INFO == CONFIG_TEST or CONFIG_INFO == CONFIG_CN:
  63. access_expire = int(datetime.timedelta(days=60).total_seconds())
  64. refresh_expire = int(datetime.timedelta(days=60).total_seconds())
  65. else:
  66. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  67. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  68. now_stamp = int(time.time())
  69. access_data = data
  70. refresh_data = data
  71. access_data['exp'] = access_expire + now_stamp
  72. refresh_data['exp'] = refresh_expire + now_stamp
  73. access_token = jwt.encode(access_data,
  74. OAUTH_ACCESS_TOKEN_SECRET,
  75. algorithm='HS256')
  76. refresh_token = jwt.encode(
  77. refresh_data,
  78. OAUTH_REFRESH_TOKEN_SECRET,
  79. algorithm='HS256')
  80. res = {
  81. 'access_token': access_token,
  82. 'access_expire': access_expire,
  83. 'refresh_expire': refresh_expire,
  84. 'refresh_token': refresh_token,
  85. }
  86. if self.returntpye == 'pc':
  87. res = {
  88. 'token': access_token,
  89. 'access_expire': access_expire,
  90. 'refresh_expire': refresh_expire,
  91. 'refresh_token': refresh_token,
  92. }
  93. # if old_refresh_token:
  94. # token_qs = TokenRecord.objects.filter(refresh_token=old_refresh_token, user_id=data['userID'])
  95. # if token_qs.exists():
  96. # token_qs.update(refresh_token=refresh_token, access_token=access_token, updated_time=now_time)
  97. # else:
  98. # TokenRecord.objects.create(access_token=access_token, refresh_token=refresh_token, data=data,
  99. # created_time=now_time, updated_time=now_time, user_id=data['userID'])
  100. # else:
  101. # TokenRecord.objects.create(access_token=access_token, refresh_token=refresh_token, data=data,
  102. # created_time=now_time, updated_time=now_time, user_id=data['userID'])
  103. except Exception as e:
  104. self.code = 309
  105. # if old_refresh_token:
  106. # TokenRecord.objects.filter(refresh_token=old_refresh_token, user_id=data['userID']).update(
  107. # code=self.code, error_info=e, update_time=now_time)
  108. print(repr(e))
  109. else:
  110. self.code = 0
  111. return res
  112. def encryption(self, data=None):
  113. if data is None:
  114. data = {}
  115. try:
  116. if CONFIG_INFO == CONFIG_TEST or CONFIG_INFO == CONFIG_CN:
  117. access_expire = int(datetime.timedelta(days=60).total_seconds())
  118. refresh_expire = int(datetime.timedelta(days=60).total_seconds())
  119. else:
  120. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  121. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  122. now_stamp = int(time.time())
  123. access_data = data
  124. refresh_data = data
  125. access_data['exp'] = access_expire + now_stamp
  126. refresh_data['exp'] = refresh_expire + now_stamp
  127. access_token = jwt.encode(access_data,
  128. OAUTH_ACCESS_TOKEN_SECRET,
  129. algorithm='HS256')
  130. return access_token
  131. except Exception as e:
  132. self.code = 309
  133. print(repr(e))
  134. def refresh(self):
  135. if not self.token:
  136. self.code = 309
  137. return
  138. try:
  139. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  140. except jwt.ExpiredSignatureError as e:
  141. print('过期')
  142. print(repr(e))
  143. self.code = 309
  144. # self.update_token(repr(e))
  145. except Exception as e:
  146. self.code = 309
  147. # self.update_token(repr(e))
  148. print(repr(e))
  149. else:
  150. self.code = 0
  151. userID = res.get('userID', '')
  152. user = res.get('user', '')
  153. lang = self.lang
  154. self.userID = userID
  155. self.user = user
  156. refreshRes = self.generate(self.token, data={'userID': userID, 'lang': lang, 'user': user})
  157. return refreshRes
  158. def update_token(self, e):
  159. TokenRecord.objects.filter(access_token=self.token).update(code=self.code, error_info=e,
  160. updated_time=int(time.time()))