TokenObject.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 Model.models import Device_User
  18. class TokenObject:
  19. def __init__(self, token=None):
  20. if token == 'debug':
  21. token = 'x'
  22. if token == 'test':
  23. token = 'x'
  24. self.token = token
  25. self.code = 0
  26. self.lang = None
  27. self.userID = None
  28. def valid(self):
  29. try:
  30. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  31. self.userID = res.get('userID', None)
  32. self.lang = res.get('lang', None)
  33. # 刷新登录时间
  34. device_user = Device_User.objects.get(userID=self.userID)
  35. device_user.online = True
  36. device_user.save()
  37. except jwt.ExpiredSignatureError as e:
  38. print('过期')
  39. print(repr(e))
  40. self.code = 307
  41. except Exception as e:
  42. self.code = 305
  43. else:
  44. return res
  45. def generate(self, data={}):
  46. try:
  47. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  48. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  49. now_stamp = int(time.time())
  50. access_data = data
  51. refresh_data = data
  52. access_data['exp'] = access_expire+now_stamp
  53. refresh_data['exp'] = refresh_expire+now_stamp
  54. access_token = jwt.encode(access_data,
  55. OAUTH_ACCESS_TOKEN_SECRET,
  56. algorithm='HS256')
  57. refresh_token = jwt.encode(
  58. refresh_data,
  59. OAUTH_REFRESH_TOKEN_SECRET,
  60. algorithm='HS256')
  61. res = {
  62. 'access_token': access_token.decode('utf-8'),
  63. 'access_expire': access_expire,
  64. 'refresh_expire': refresh_expire,
  65. 'refresh_token': refresh_token.decode('utf-8'),
  66. }
  67. except Exception as e:
  68. self.code = 45
  69. print(repr(e))
  70. else:
  71. return res
  72. def refresh(self):
  73. try:
  74. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  75. except jwt.ExpiredSignatureError as e:
  76. print('过期')
  77. print(repr(e))
  78. self.code = 307
  79. except Exception as e:
  80. self.code = 45
  81. print(repr(e))
  82. else:
  83. userID = res['userID']
  84. lang = res['lang']
  85. refreshRes = self.generate(data={'userID': userID, 'lang': lang})
  86. return refreshRes