console/SWSCloudAPI/Utils/decorators.py

48 lines
1.5 KiB
Python

from functools import wraps
import validators
from flask import g, request, jsonify
from SWSCloudAPI.Utils import Tokens
from SWSCloudCore.models import Users
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
# validate email
if not validators.email(request.json.get('email')):
return jsonify(status='error', message='invalid email format')
# verify email/password
if not Users.auth(request.json.get('email'), request.json.get('password')):
return jsonify(status='error', message='invalid auth')
#
return f(*args, **kwargs)
return decorated_function
def content_type(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if request.headers.get('Content-Type') != 'application/json':
return jsonify(status='error', message='content-type must be application/json')
return f(*args, **kwargs)
return decorated_function
def auth_token(f):
@wraps(f)
def decorated_function(*args, **kwargs):
#
g.auth_token = request.headers.get('X-Auth-Token', None)
#
if not g.auth_token:
return jsonify(status='error', message='X-Auth-Token not specified')
# check exists token
if not Tokens.exists(g.auth_token):
return jsonify(status='error', message='token not exists')
#
g.tokens = Tokens()
g.user = g.tokens.get(g.auth_token)
return f(*args, **kwargs)
return decorated_function