from functools import wraps
import jwt
from flask import request, make_response, current_app, jsonify, g
def valid_token(func):
"""
checks if the authorization token is valid
:param func: callback function
:return:
"""
@wraps(func)
def decorator(*args, **kwargs):
if 'Authorization' in request.headers:
token = request.headers['Authorization']
try:
data = jwt.decode(token[7:], current_app.config['ACCESS_TOKEN_KEY'], algorithms=["HS256"])
g.userrole = data['userrole']
except Exception:
return make_response('Invalid token!', 401)
return func(*args, **kwargs)
else:
return make_response('token is missing!', 401)
return decorator
def customer_required(func):
"""
checks if the userrole is 'customer' or higher
:param func: callback function
:return:
"""
@wraps(func)
def decorator(*args, **kwargs):
if 'userrole' in g:
if g.userrole in ['customer', 'employee', 'admin']:
return func(*args, **kwargs)
return make_response('You shall not pass!', 401)
return decorator
def employee_required(func):
"""
checks if the userrole is 'employee' or higher
:param func: callback function
:return:
"""
@wraps(func)
def decorator(*args, **kwargs):
if 'userrole' in g:
if g.userrole in ['employee', 'admin']:
return func(*args, **kwargs)
return make_response('You shall not pass!', 401)
return decorator
def admin_required(func):
"""
checks if the userrole is 'admin'
:param func: callback function
:return:
"""
@wraps(func)
def decorator(*args, **kwargs):
if 'userrole' in g:
if g.userrole == 'admin':
return func(*args, **kwargs)
return make_response('You shall not pass!', 401)
return decorator