TokenObject.py 6.6 KB

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