TokenObject.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerOA
  7. @software: PyCharm
  8. @DATE: 2018/8/13 15:36
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: TokenObject.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. from Ansjer.config import OAUTH_ACCESS_TOKEN_SECRET, OAUTH_REFRESH_TOKEN_SECRET, OAUTH_ACCESS_TOKEN_TIME, \
  15. OAUTH_REFRESH_TOKEN_TIME
  16. import jwt, time
  17. from Object.RedisObject import RedisObject
  18. class TokenObject:
  19. def __init__(self, token=None, returntpye='currency'):
  20. if token == 'local':
  21. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTg0MzUxODk2MjgyMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM2ODAzMTc1OTYiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODcyNzcwNjB9.c0LV_XyxwbzUlYqMJqx7vw9f19Jv-0kGnUHuu_go-mo'
  22. if token == 'test':
  23. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1Njk5OTg4OTYsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.VAQtT9AbCCfXcrNj9DL5cvVasMDoI7AP8ptgU1GoMu8'
  24. self.token = token
  25. self.lang = None
  26. self.userID = None
  27. self.user = ''
  28. self.code = 0
  29. # 令牌校验
  30. self.valid()
  31. self.returntpye = returntpye
  32. def valid(self):
  33. if self.token is None:
  34. self.code = 309
  35. return
  36. try:
  37. self.token= self.token.replace("Bearer ", "")
  38. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  39. # print(res)
  40. self.userID = res.get('userID', None)
  41. self.lang = res.get('lang', None)
  42. self.user = res.get('user', '')
  43. # 刷新登录时间
  44. # if self.userID:
  45. # print(self.user)
  46. # redisObj = RedisObject(db=3)
  47. # redisObj.set_data(key=self.userID, val=self.user, expire=300)
  48. except jwt.ExpiredSignatureError as e:
  49. print('过期')
  50. print(repr(e))
  51. self.code = 309
  52. return
  53. except Exception as e:
  54. self.code = 309
  55. return
  56. else:
  57. if not self.userID:
  58. self.code = 309
  59. return
  60. else:
  61. if self.userID:
  62. self.code = 0
  63. return res
  64. else:
  65. self.code = 309
  66. return
  67. # token加密
  68. def generate(self, data={}):
  69. try:
  70. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  71. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  72. now_stamp = int(time.time())
  73. access_data = data
  74. refresh_data = data
  75. access_data['exp'] = access_expire + now_stamp
  76. refresh_data['exp'] = refresh_expire + now_stamp
  77. access_token = jwt.encode(access_data,
  78. OAUTH_ACCESS_TOKEN_SECRET,
  79. algorithm='HS256')
  80. refresh_token = jwt.encode(
  81. refresh_data,
  82. OAUTH_REFRESH_TOKEN_SECRET,
  83. algorithm='HS256')
  84. res = {
  85. 'access_token': access_token.decode('utf-8'),
  86. 'access_expire': access_expire,
  87. 'refresh_expire': refresh_expire,
  88. 'refresh_token': refresh_token.decode('utf-8'),
  89. }
  90. if self.returntpye=='pc':
  91. res = {
  92. 'token': access_token.decode('utf-8'),
  93. 'access_expire': access_expire,
  94. 'refresh_expire': refresh_expire,
  95. 'refresh_token': refresh_token.decode('utf-8'),
  96. }
  97. except Exception as e:
  98. self.code = 309
  99. print(repr(e))
  100. else:
  101. self.code = 0
  102. return res
  103. def encryption(self, data={}):
  104. try:
  105. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  106. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  107. now_stamp = int(time.time())
  108. access_data = data
  109. refresh_data = data
  110. access_data['exp'] = access_expire + now_stamp
  111. refresh_data['exp'] = refresh_expire + now_stamp
  112. access_token = jwt.encode(access_data,
  113. OAUTH_ACCESS_TOKEN_SECRET,
  114. algorithm='HS256')
  115. return access_token.decode('utf-8')
  116. except Exception as e:
  117. self.code = 309
  118. print(repr(e))
  119. else:
  120. self.code = 0
  121. return res
  122. def refresh(self):
  123. if not self.token:
  124. self.code = 309
  125. return
  126. try:
  127. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  128. except jwt.ExpiredSignatureError as e:
  129. print('过期')
  130. print(repr(e))
  131. self.code = 309
  132. except Exception as e:
  133. self.code = 309
  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. refreshRes = self.generate(data={'userID': userID, 'lang': lang, 'user': user})
  141. return refreshRes
  142. # import jwt
  143. #
  144. #
  145. # token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTMzODg0NDE4NTE5MTM4MDAxMzgwMDAiLCJleHAiOjE1NTU1NTEwNjUsInVzZXIiOiIxMTFAcXEuY29tIiwibGFuZyI6ImVuIn0.waPlfIBucSA7rFfnsxOKIVJ_cL6xiP33cAiz1IDoteY'
  146. # res = jwt.decode(token, 'a+jbgnw%@1%zy^=@dn62%', algorithms='HS256')
  147. # print(res)