123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- import jwt
- import time
- import requests
- from Model.models import TokenRecord
- from Object.RedisObject import RedisObject
- from Ansjer.config import OAUTH_ACCESS_TOKEN_SECRET, OAUTH_REFRESH_TOKEN_SECRET, OAUTH_ACCESS_TOKEN_TIME, \
- OAUTH_REFRESH_TOKEN_TIME, DETECT_PUSH_DOMAINS, LOGGER
- class TokenObject:
- def __init__(self, token=None, returntpye='currency'):
- if token == 'local':
- token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTg0MzUxODk2MjgyMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM2ODAzMTc1OTYiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODcyNzcwNjB9.c0LV_XyxwbzUlYqMJqx7vw9f19Jv-0kGnUHuu_go-mo'
- if token == 'test':
- token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1Njk5OTg4OTYsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.VAQtT9AbCCfXcrNj9DL5cvVasMDoI7AP8ptgU1GoMu8'
- self.token = token
- self.lang = None
- self.userID = None
- self.user = ''
- self.code = 0
- self.valid()
- self.returntpye = returntpye
- def valid(self):
- if self.token is None:
- self.code = 309
- return
- try:
- self.token = self.token.replace("Bearer ", "")
- res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
- self.userID = res.get('userID', None)
- self.lang = res.get('lang', None)
- self.user = res.get('user', '')
- # 刷新登录时间
- # if self.userID:
- # print(self.user)
- # redisObj = RedisObject(db=3)
- # redisObj.set_data(key=self.userID, val=self.user, expire=300)
- except jwt.ExpiredSignatureError as e:
- self.code = 309
- # self.update_token(repr(e))
- return
- except Exception as e:
- self.code = 309
- # self.update_token(repr(e))
- return
- else:
- if not self.userID:
- self.code = 309
- # self.update_token('缺少用户ID')
- return
- else:
- if self.userID:
- self.code = 0
- return res
- else:
- self.code = 309
- return
- def generate(self, old_refresh_token=None, data=None):
- if data is None:
- data = {}
- now_time = int(time.time())
- try:
- access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
- refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
- now_stamp = int(time.time())
- access_data = data
- refresh_data = data
- access_data['exp'] = access_expire + now_stamp
- refresh_data['exp'] = refresh_expire + now_stamp
- access_token = jwt.encode(access_data,
- OAUTH_ACCESS_TOKEN_SECRET,
- algorithm='HS256')
- refresh_token = jwt.encode(
- refresh_data,
- OAUTH_REFRESH_TOKEN_SECRET,
- algorithm='HS256')
- res = {
- 'access_token': access_token,
- 'access_expire': access_expire,
- 'refresh_expire': refresh_expire,
- 'refresh_token': refresh_token,
- }
- if self.returntpye == 'pc':
- res = {
- 'token': access_token,
- 'access_expire': access_expire,
- 'refresh_expire': refresh_expire,
- 'refresh_token': refresh_token,
- }
- # if old_refresh_token:
- # token_qs = TokenRecord.objects.filter(refresh_token=old_refresh_token, user_id=data['userID'])
- # if token_qs.exists():
- # token_qs.update(refresh_token=refresh_token, access_token=access_token, updated_time=now_time)
- # else:
- # TokenRecord.objects.create(access_token=access_token, refresh_token=refresh_token, data=data,
- # created_time=now_time, updated_time=now_time, user_id=data['userID'])
- # else:
- # TokenRecord.objects.create(access_token=access_token, refresh_token=refresh_token, data=data,
- # created_time=now_time, updated_time=now_time, user_id=data['userID'])
- except Exception as e:
- self.code = 309
- # if old_refresh_token:
- # TokenRecord.objects.filter(refresh_token=old_refresh_token, user_id=data['userID']).update(
- # code=self.code, error_info=e, update_time=now_time)
- print(repr(e))
- else:
- self.code = 0
- return res
- def encryption(self, data=None):
- if data is None:
- data = {}
- try:
- access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
- refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
- now_stamp = int(time.time())
- access_data = data
- refresh_data = data
- access_data['exp'] = access_expire + now_stamp
- refresh_data['exp'] = refresh_expire + now_stamp
- access_token = jwt.encode(access_data,
- OAUTH_ACCESS_TOKEN_SECRET,
- algorithm='HS256')
- return access_token
- except Exception as e:
- self.code = 309
- print(repr(e))
- def refresh(self):
- if not self.token:
- self.code = 309
- return
- try:
- res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
- except jwt.ExpiredSignatureError as e:
- print('过期')
- print(repr(e))
- self.code = 309
- # self.update_token(repr(e))
- except Exception as e:
- self.code = 309
- # self.update_token(repr(e))
- print(repr(e))
- else:
- self.code = 0
- userID = res.get('userID', '')
- user = res.get('user', '')
- lang = self.lang
- self.userID = userID
- self.user = user
- refreshRes = self.generate(self.token, data={'userID': userID, 'lang': lang, 'user': user})
- return refreshRes
- def update_token(self, e):
- TokenRecord.objects.filter(access_token=self.token).update(code=self.code, error_info=e,
- updated_time=int(time.time()))
|