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