TokenObject.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 == 'local':
  21. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VybmFtZSI6IjEzODAwMTM4MDAxIiwiZXhwIjoxNTQ3NjA4NDg0fQ.i-zPz6fCXJKws3o3cETYms0Sgw3fkdfe8HuB-929AyY'
  22. if token == 'test':
  23. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTE1NjQyNjIzMzc5Mzk1MTM4MDAxMzgwMDEiLCJsYW5nIjoiZW4iLCJleHAiOjE1NDcwMTMzMjV9.4Q-hqqihFClYKCIoUd16ZZe2FRvpElmio6P25Qpg26Q'
  24. self.token = token
  25. self.lang = None
  26. self.userID = None
  27. self.user = ''
  28. self.valid()
  29. if token is None:
  30. self.code = 309
  31. else:
  32. self.code = 0
  33. def valid(self):
  34. try:
  35. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  36. self.userID = res.get('userID', None)
  37. self.lang = res.get('lang', None)
  38. self.user = res.get('user', '')
  39. # 刷新登录时间
  40. device_user = Device_User.objects.get(userID=self.userID)
  41. device_user.online = True
  42. device_user.save()
  43. except jwt.ExpiredSignatureError as e:
  44. print('过期')
  45. print(repr(e))
  46. self.code = 309
  47. except Exception as e:
  48. self.code = 309
  49. else:
  50. self.code = 0
  51. return res
  52. def generate(self, data={}):
  53. try:
  54. access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
  55. refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
  56. now_stamp = int(time.time())
  57. access_data = data
  58. refresh_data = data
  59. access_data['exp'] = access_expire + now_stamp
  60. refresh_data['exp'] = refresh_expire + now_stamp
  61. access_token = jwt.encode(access_data,
  62. OAUTH_ACCESS_TOKEN_SECRET,
  63. algorithm='HS256')
  64. refresh_token = jwt.encode(
  65. refresh_data,
  66. OAUTH_REFRESH_TOKEN_SECRET,
  67. algorithm='HS256')
  68. res = {
  69. 'access_token': access_token.decode('utf-8'),
  70. 'access_expire': access_expire,
  71. 'refresh_expire': refresh_expire,
  72. 'refresh_token': refresh_token.decode('utf-8'),
  73. }
  74. except Exception as e:
  75. self.code = 309
  76. print(repr(e))
  77. else:
  78. self.code = 0
  79. return res
  80. def refresh(self):
  81. try:
  82. res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
  83. except jwt.ExpiredSignatureError as e:
  84. print('过期')
  85. print(repr(e))
  86. self.code = 309
  87. except Exception as e:
  88. self.code = 309
  89. print(repr(e))
  90. else:
  91. self.code = 0
  92. userID = res.get('userID','')
  93. lang = res.get('lang','')
  94. user = res.get('user','')
  95. refreshRes = self.generate(data={'userID': userID, 'lang': lang,'user':user})
  96. return refreshRes