# Imports from flask import Blueprint, render_template, request, abort, send_file from os import getenv as env import logging, os # Create blueprint bp = Blueprint( 'generic', __name__, template_folder=env('TEMPLATE_FOLDER', default='../templates'), static_folder=env('STATIC_FOLDER', default='../static') ) # Create logger log = logging.getLogger(__name__) # Route for index page @bp.route('/') def index(): return render_template('index.html') # Route for favicon @bp.route('/favicon.ico') def favicon(): return send_file('../static/content/other/favicon.ico') # Route for robots.txt @bp.route('/robots.txt') def robots(): return send_file('../static/content/other/robots.txt') # Route for sitemap.xml @bp.route('/sitemap.xml') def sitemap(): return send_file('../static/content/other/sitemap.xml') # Catch-all route for generic pages @bp.route('/') def catch_all(filename): try: return render_template(f'pages/{filename if filename.endswith(".html") else filename + ".html"}') except Exception as e: # If the template is not found, check if it is a directory os_path = os.path.join(bp.template_folder, 'pages', filename)[3:] if os.path.isdir(os_path): # walk through the directory and find all files pages = [] for root, dirs, files_in_dir in os.walk(os_path): for file in files_in_dir: pages.append(os.path.relpath(os.path.join(root, file), os_path)) for dir in dirs: pages.append(os.path.relpath(os.path.join(root, dir), os_path) + '/') # If it is a directory, render a directory page if not filename.endswith('/'): filename += '/' return render_template('bases/directory.html', directory=filename, pages=pages) # If it is a file, return a 404 error abort(404, f"Template '{filename}' not found: {e}")