#!/usr/bin/env python3  
# -*- coding: utf-8 -*-  
"""
@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
@AUTHOR: ASJRD018
@NAME: AnsjerOA
@software: PyCharm
@DATE: 2018/8/13 15:36
@Version: python3.6
@MODIFY DECORD:ansjer dev
@file: TokenObject.py
@Contact: chanjunkai@163.com
"""
import jwt, time, datetime

OAUTH_ACCESS_TOKEN_SECRET = 'a+%zy^=@xxx%'
OAUTH_REFRESH_TOKEN_SECRET = 'r+%zy^=@xaa%'
OAUTH_ACCESS_TOKEN_TIME = datetime.timedelta(days=7)
# refresh_token超时
OAUTH_REFRESH_TOKEN_TIME = datetime.timedelta(days=30)


class TokenObject:

    def __init__(self, token=None):
        self.token = token
        self.code = 0
        self.userID = None
        self.valid()

    def valid(self):
        try:
            res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
            self.userID = res.get('userID', None)

        except jwt.ExpiredSignatureError as e:
            print(repr(e))
            self.code = 309
        except Exception as e:
            self.code = 309
        else:
            return res

    def generate(self, 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_token = jwt.encode(
                {'userID': data['userID'], 'exp': access_expire + now_stamp},
                OAUTH_ACCESS_TOKEN_SECRET,
                algorithm='HS256')
            refresh_token = jwt.encode(
                {'userID': data['userID'], 'exp': refresh_expire + now_stamp},
                OAUTH_REFRESH_TOKEN_SECRET,
                algorithm='HS256')
            res = {
                'access_token': access_token.decode('utf-8'),
                'access_expire': access_expire,
                'refresh_expire': refresh_expire,
                'refresh_token': refresh_token.decode('utf-8'),
            }
        except Exception as e:
            self.code = 309
            print(repr(e))
        else:
            return res

    def refresh(self):
        try:
            res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
        except jwt.ExpiredSignatureError as e:
            print('过期')
            print(repr(e))
            self.code = 309
        except Exception as e:
            self.code = 309
            print(repr(e))
        else:
            userID = res['userID']
            self.userID = userID
            refreshRes = self.generate(data={'userID': userID})
            return refreshRes


# tko = TokenObject('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6Inh4YXh4YSIsImV4cCI6MTU1OTYxOTczOH0.P8EIriN8KBUSUJlML6a7BmWS5TEaMyiZ6h9BVVkptZ0')
# res = tko.generate(data={'id': 'xxaxxa'})

# print(tko.id)
