TokenObject.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 AnsjerPush.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):
  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. def valid(self):
  32. if self.token is None:
  33. self.code = 309
  34. return
  35. try:
  36. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  37. # print(res)
  38. self.userID = res.get('userID', None)
  39. self.lang = res.get('lang', None)
  40. self.user = res.get('user', '')
  41. # 刷新登录时间
  42. if self.userID:
  43. print(self.user)
  44. redisObj = RedisObject(db=3)
  45. redisObj.set_data(key=self.userID, val=self.user, expire=300)
  46. except jwt.ExpiredSignatureError as e:
  47. print('过期')
  48. print(repr(e))
  49. self.code = 309
  50. return
  51. except Exception as e:
  52. self.code = 309
  53. return
  54. else:
  55. if not self.userID:
  56. self.code = 309
  57. return
  58. else:
  59. if self.userID:
  60. self.code = 0
  61. return res
  62. else:
  63. self.code = 309
  64. return
  65. # token加密
  66. def generate(self, data={}):
  67. try:
  68. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  69. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  70. now_stamp = int(time.time())
  71. access_data = data
  72. refresh_data = data
  73. access_data['exp'] = access_expire + now_stamp
  74. refresh_data['exp'] = refresh_expire + now_stamp
  75. access_token = jwt.encode(access_data,
  76. OAUTH_ACCESS_TOKEN_SECRET,
  77. algorithm='HS256')
  78. refresh_token = jwt.encode(
  79. refresh_data,
  80. OAUTH_REFRESH_TOKEN_SECRET,
  81. algorithm='HS256')
  82. res = {
  83. 'access_token': access_token.decode('utf-8'),
  84. 'access_expire': access_expire,
  85. 'refresh_expire': refresh_expire,
  86. 'refresh_token': refresh_token.decode('utf-8'),
  87. }
  88. except Exception as e:
  89. self.code = 309
  90. print(repr(e))
  91. else:
  92. self.code = 0
  93. return res
  94. def refresh(self):
  95. if not self.token:
  96. self.code = 309
  97. return
  98. try:
  99. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  100. except jwt.ExpiredSignatureError as e:
  101. print('过期')
  102. print(repr(e))
  103. self.code = 309
  104. except Exception as e:
  105. self.code = 309
  106. print(repr(e))
  107. else:
  108. self.code = 0
  109. userID = res.get('userID', '')
  110. user = res.get('user', '')
  111. lang = self.lang
  112. refreshRes = self.generate(data={'userID': userID, 'lang': lang, 'user': user})
  113. return refreshRes
  114. # import jwt
  115. #
  116. #
  117. # token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTMzODg0NDE4NTE5MTM4MDAxMzgwMDAiLCJleHAiOjE1NTU1NTEwNjUsInVzZXIiOiIxMTFAcXEuY29tIiwibGFuZyI6ImVuIn0.waPlfIBucSA7rFfnsxOKIVJ_cL6xiP33cAiz1IDoteY'
  118. # res = jwt.decode(token, 'a+jbgnw%@1%zy^=@dn62%', algorithms='HS256')
  119. # print(res)