"""Module to handle the React routes.""" import os import sys from flask import Blueprint, send_from_directory, render_template from configs import index_tags if getattr(sys, "frozen", False): # Running as a bundled app base_path = getattr(sys, "_MEIPASS", os.path.abspath(".")) else: # Running in a normal Python environment base_path = os.path.abspath(".") static_folder = os.path.join(base_path, "frontend-dist") react_bp = Blueprint( "react_bp", __name__, static_folder=static_folder, static_url_path="/", template_folder=static_folder, ) @react_bp.route("/", methods=["GET"]) @react_bp.route("/", methods=["GET"]) @react_bp.route("/", methods=["GET"]) def index(path=""): """Handle the index route.""" # Ensure static_folder is not None if react_bp.static_folder is None: raise ValueError("Static folder is not configured for the blueprint") # Normalize the path to prevent directory traversal safe_path = os.path.normpath(path) file_path = os.path.join(react_bp.static_folder, safe_path) if path and os.path.exists(file_path): return send_from_directory(react_bp.static_folder, safe_path) # Only allow certain paths to render index.html with tags allowed_paths = ["", "cache", "api", "testplayer", "account"] if safe_path.lower() in allowed_paths: data = index_tags.tags.get(safe_path.lower(), index_tags.tags.get("index", {})) return render_template("index.html", data=data) # Fallback: serve index.html for all other routes (SPA) return send_from_directory(react_bp.static_folder, "index.html")