TokenObject.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import logging
  2. import jwt
  3. import time
  4. import requests
  5. import datetime
  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, DETECT_PUSH_DOMAINS, LOGGER
  9. from Model.models import StsFrequency
  10. logger = logging.getLogger('token')
  11. class TokenObject:
  12. def __init__(self, token=None, returntpye='currency'):
  13. if token == 'local':
  14. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTg0MzUxODk2MjgyMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM2ODAzMTc1OTYiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODcyNzcwNjB9.c0LV_XyxwbzUlYqMJqx7vw9f19Jv-0kGnUHuu_go-mo'
  15. if token == 'test':
  16. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1Njk5OTg4OTYsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.VAQtT9AbCCfXcrNj9DL5cvVasMDoI7AP8ptgU1GoMu8'
  17. today = datetime.datetime.today()
  18. today_date = datetime.datetime(today.year, today.month, today.day)
  19. self.today_timestamp = int(today_date.timestamp())
  20. self.token = token
  21. self.lang = None
  22. self.userID = None
  23. self.user = ''
  24. self.code = 0
  25. self.valid()
  26. self.returntpye = returntpye
  27. def valid(self):
  28. if self.token is None:
  29. self.code = 309
  30. return
  31. try:
  32. self.token = self.token.replace("Bearer ", "")
  33. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  34. self.userID = res.get('userID', None)
  35. self.lang = res.get('lang', None)
  36. self.user = res.get('user', '')
  37. # 刷新登录时间
  38. # if self.userID:
  39. # print(self.user)
  40. # redisObj = RedisObject(db=3)
  41. # redisObj.set_data(key=self.userID, val=self.user, expire=300)
  42. except jwt.ExpiredSignatureError as e:
  43. self.code = 309
  44. logger.info('errLine:{}, errMsg:{}, token:{}'.format(e.__traceback__.tb_lineno, repr(e), self.token))
  45. return
  46. except Exception as e:
  47. self.code = 309
  48. logger.info('errLine:{}, errMsg:{}, token:{}'.format(e.__traceback__.tb_lineno, repr(e), self.token))
  49. return
  50. else:
  51. if not self.userID:
  52. self.code = 309
  53. logger.info('errMsg:{}, token:{}'.format('缺少用户ID', self.token))
  54. return
  55. else:
  56. if self.userID:
  57. self.code = 0
  58. return res
  59. else:
  60. self.code = 309
  61. return
  62. def generate(self, data=None):
  63. if data is None:
  64. data = {}
  65. try:
  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. logger.info(
  94. '用户登录信息, data:{}, access_token:{}, refresh_token:{}'.format(data, access_token, refresh_token))
  95. except Exception as e:
  96. self.code = 309
  97. logger.info('errLine:{}, errMsg:{}, token:{}'.format(e.__traceback__.tb_lineno, repr(e), self.token))
  98. print(repr(e))
  99. else:
  100. self.code = 0
  101. return res
  102. def encryption(self, data=None):
  103. if data is None:
  104. data = {}
  105. try:
  106. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  107. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  108. now_stamp = int(time.time())
  109. access_data = data
  110. refresh_data = data
  111. access_data['exp'] = access_expire + now_stamp
  112. refresh_data['exp'] = refresh_expire + now_stamp
  113. access_token = jwt.encode(access_data,
  114. OAUTH_ACCESS_TOKEN_SECRET,
  115. algorithm='HS256')
  116. return access_token
  117. except Exception as e:
  118. self.code = 309
  119. print(repr(e))
  120. def refresh(self):
  121. if not self.token:
  122. self.code = 309
  123. return
  124. try:
  125. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  126. except jwt.ExpiredSignatureError as e:
  127. print('过期')
  128. print(repr(e))
  129. self.code = 309
  130. logger.info('errLine:{}, errMsg:{}, token:{}'.format(e.__traceback__.tb_lineno, repr(e), self.token))
  131. except Exception as e:
  132. self.code = 309
  133. logger.info('errLine:{}, errMsg:{}, token:{}'.format(e.__traceback__.tb_lineno, repr(e), self.token))
  134. print(repr(e))
  135. else:
  136. self.code = 0
  137. userID = res.get('userID', '')
  138. user = res.get('user', '')
  139. lang = self.lang
  140. self.userID = userID
  141. self.user = user
  142. refreshRes = self.generate(data={'userID': userID, 'lang': lang, 'user': user})
  143. return refreshRes