#!/usr/bin/env python # -*- coding: utf-8 -*- """ ~~~~~ :copyright: (c) 2015 by Halfmoon Labs, Inc. :copyright: (c) 2017 by Stanislav Pankratov :license: MIT, see LICENSE for more details. """ import json import traceback from jwt import DecodeError from blockchainauth.tokenizer import Tokenizer class AuthMessage: def __init__(self): raise NotImplementedError('') def _payload(self): raise NotImplementedError('') def token(self): if not hasattr(self, '_token'): self._token = self.tokenizer.encode(self._payload(), self.private_key) return self._token def json(self): return json.loads(self.decode(self.token(), self.tokenizer)) @classmethod def decode(cls, token): if not isinstance(token, (str, unicode)): raise ValueError('Token must be a string') # decode the token without any verification return Tokenizer.decode(token) @classmethod def verify(cls, token, tokenizer=Tokenizer()): # decode the token try: decoded_token = cls.decode(token) except DecodeError: traceback.print_exc() return False return all([method(token, tokenizer, decoded_token) for method in cls.verify_methods])