- correct startup of applications using gevent - introduce startup scripts (eveai_app) - caching manager for all configurations
63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
import jinja2
|
|
from flask import render_template, request, jsonify, redirect, current_app
|
|
from flask_login import current_user
|
|
from common.utils.nginx_utils import prefixed_url_for
|
|
|
|
|
|
def not_found_error(error):
|
|
if not current_user.is_authenticated:
|
|
return redirect(prefixed_url_for('security.login'))
|
|
current_app.logger.error(f"Not Found Error: {error}")
|
|
return render_template('error/404.html'), 404
|
|
|
|
|
|
def internal_server_error(error):
|
|
if not current_user.is_authenticated:
|
|
return redirect(prefixed_url_for('security.login'))
|
|
current_app.logger.error(f"Internal Server Error: {error}")
|
|
return render_template('error/500.html'), 500
|
|
|
|
|
|
def not_authorised_error(error):
|
|
if not current_user.is_authenticated:
|
|
return redirect(prefixed_url_for('security.login'))
|
|
current_app.logger.error(f"Not Authorised Error: {error}")
|
|
return render_template('error/401.html')
|
|
|
|
|
|
def access_forbidden(error):
|
|
if not current_user.is_authenticated:
|
|
return redirect(prefixed_url_for('security.login'))
|
|
current_app.logger.error(f"Access Forbidden: {error}")
|
|
return render_template('error/403.html')
|
|
|
|
|
|
def key_error_handler(error):
|
|
# Check if the KeyError is specifically for 'tenant'
|
|
if str(error) == "'tenant'":
|
|
return redirect(prefixed_url_for('security.login'))
|
|
# For other KeyErrors, you might want to log the error and return a generic error page
|
|
current_app.logger.error(f"Key Error: {error}")
|
|
return render_template('error/generic.html', error_message="An unexpected error occurred"), 500
|
|
|
|
|
|
def register_error_handlers(app):
|
|
app.register_error_handler(404, not_found_error)
|
|
app.register_error_handler(500, internal_server_error)
|
|
app.register_error_handler(401, not_authorised_error)
|
|
app.register_error_handler(403, not_authorised_error)
|
|
app.register_error_handler(KeyError, key_error_handler)
|
|
|
|
@app.errorhandler(jinja2.TemplateNotFound)
|
|
def template_not_found(error):
|
|
app.logger.error(f'Template not found: {error.name}')
|
|
app.logger.error(f'Search Paths: {app.jinja_loader.list_templates()}')
|
|
return f'Template not found: {error.name}. Check logs for details.', 404
|
|
|
|
@app.errorhandler(jinja2.TemplateSyntaxError)
|
|
def template_syntax_error(error):
|
|
app.logger.error(f'Template syntax error: {error.message}')
|
|
app.logger.error(f'In template {error.filename}, line {error.lineno}')
|
|
return f'Template syntax error: {error.message}', 500
|
|
|