TokenObject.py 5.5 KB

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