48 lines
1.5 KiB
Python
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').encode()):
|
|
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
|