def get_jwt_token_info(request): status = 200 token_info = {} token = request.cookies.get('token') app = Config.getApp() if not token: app.logger.debug(__name__ + ' token is NOT available') status = 401 return status, token_info else: status_str, token_info = decode_jwt_token(token) app.logger.debug(__name__ + ' obtained token info: ' + str(token_info) + ' status: ' + status_str) if status_str != 'ok': # could be anonymous, but they're still not logged in status = 401 return status, token_info
def decode_jwt_token(token): status = 'ok' payload = {} app = Config.getApp() try: payload = jwt.decode(token, key) payload = remap_jwt_token(payload) if payload['sub'] == 'anonymous' or payload['isAnonymous'] == 'true': status = 'anonymous' app.logger.debug(__name__ + ' returning: ' + status + ' payload: ' + str(payload)) return status, payload except jwt.ExpiredSignatureError: status = 'expired' app.logger.debug(__name__ + ' returning: ' + status + ' payload: ' + str(payload)) return status, payload except jwt.InvalidTokenError: status = 'invalid' app.logger.debug(__name__ + ' returning: ' + status + ' payload: ' + str(payload)) return status, payload
def get(self): """get chemprops info based on search criteria""" callParams = ('ChemicalName', 'Abbreviation', 'TradeName', 'uSMILES') parser = reqparse.RequestParser( ) # marshmallow is preferred parser, this is technically deprecated but supported long term parser.add_argument('polfil', required=True, help=ChemPropsApiDoc.getDoc('get', '/', 'polfil')) parser.add_argument('nmId', required=True, help=ChemPropsApiDoc.getDoc('get', '/', 'nmId')) for p in callParams: parser.add_argument(p, required=(p == 'ChemicalName'), help=ChemPropsApiDoc.getDoc('get', '/', p)) args = parser.parse_args() cp = nmChemPropsAPI(args['nmId']) polfil = args['polfil'] params = dict() for p in callParams: if args[p] is not None: params[p] = args[p] rv = {} data = None try: if polfil == 'fil': # filler rv = cp.searchFillers(params) if rv is not None: data = { 'StandardName': rv['_id'], 'density': rv['_density'] } marshal(data, ChemPropsDto.chemprops) Config.getApp().logger.debug(__name__ + ' chemprops.get(\'' + polfil + '\', ' + str(params) + '): returned - ' + str(rv)) elif polfil == 'pol': # polymer rv = cp.searchPolymers(params) if rv is not None: Config.getApp().logger.debug(__name__ + ' chemprops.get(\'' + polfil + '\', ' + str(params) + '): returned - ' + str(rv)) data = { 'StandardName': rv['_stdname'], 'density': rv['_density'], 'uSMILES': rv['_id'] } marshal(data, ChemPropsDto.chemprops) else: return None, 400 # pol or fil required if data is not None: return data, 200 else: return None, 404 except: fullStr = traceback.format_exc() Config.getApp().logger.error(__name__ + 'error executing chemprops.get(\'' + polfil + '\', ' + str(params) + '): ' + fullStr) # data.StandardName = '' # data.density = float('nan') return None, 500