Source code for app.mod_api.decorators

from functools import wraps

from flask import current_app, request
from itsdangerous import URLSafeSerializer

from app.mod_api.errors import InvalidUsage


[docs]def valid_facility(f): """A decorator to return a 404 if the facilitry is not there. :param f: Function to decorate. :type f: function :return: Decorated function. :rtype: function """ @wraps(f) def decorated_function(*args, **kwargs): if 'facility' in kwargs.keys(): if kwargs['facility'] not in current_app.facilities.keys(): raise InvalidUsage('facility not found', status_code=404) return f(*args, **kwargs) return decorated_function
[docs]def valid_token(f): """A decorator to check if there is a token and if its valid. :param f: Function to decorate. :type f: function :return: Decorated function. :rtype: function """ @wraps(f) def decorated_function(*args, **kwargs): s = URLSafeSerializer(current_app.config['SECRET_KEY'], salt=kwargs['facility']) if 'token' not in request.args: raise InvalidUsage('no token', status_code=401) try: s.loads(request.args.get('token')) except: raise InvalidUsage('bad token', status_code=401) return f(*args, **kwargs) return decorated_function