39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
import logging
|
|
|
|
from flask import request, abort as flask_abort, jsonify
|
|
from auth.auth import get_authenticated_user, get_validated_token
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
DEFAULT_MESSAGE = {}
|
|
DEFAULT_MESSAGE[400] = 'Invalid Request'
|
|
DEFAULT_MESSAGE[401] = 'Unauthorized'
|
|
DEFAULT_MESSAGE[403] = 'Permission Denied'
|
|
DEFAULT_MESSAGE[404] = 'Not Found'
|
|
DEFAULT_MESSAGE[409] = 'Conflict'
|
|
|
|
def abort(status_code, message=None, **kwargs):
|
|
message = (str(message) % kwargs if message else
|
|
DEFAULT_MESSAGE.get(status_code, ''))
|
|
|
|
# Add the user information.
|
|
auth_user = get_authenticated_user()
|
|
auth_token = get_validated_token()
|
|
if auth_user:
|
|
message = '%s (user: %s)' % (message, auth_user.username)
|
|
elif auth_token:
|
|
message = '%s (token: %s)' % (message,
|
|
auth_token.friendly_name or auth_token.code)
|
|
|
|
# Log the abort.
|
|
logger.warning('Error %s: %s. Arguments: %s' % (status_code, message,
|
|
request.view_args))
|
|
|
|
resp = jsonify({'error': message})
|
|
resp.status_code = status_code
|
|
|
|
# Report the abort to the user.
|
|
|
|
flask_abort(resp)
|