from flask import Flask, render_template_string, request, redirect, url_for, flash import json import os # Added os import from src.config_manager import ConfigManager app = Flask(__name__) app.secret_key = os.urandom(24) # Needed for flash messages config_manager = ConfigManager() CONFIG_PAGE_TEMPLATE = """ LED Matrix Config

LED Matrix Configuration

{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% endif %} {% endwith %}

Main Configuration ({{ main_config_path }})

Secrets Configuration ({{ secrets_config_path }})

""" @app.route('/') def display_config_route(): active_tab = request.args.get('tab', 'main') # Default to 'main' tab main_config_data = {} secrets_config_data = {} error_message = None try: main_config_data = config_manager.get_raw_file_content('main') except Exception as e: flash(f"Error loading main config: {str(e)}", "error") try: secrets_config_data = config_manager.get_raw_file_content('secrets') except Exception as e: flash(f"Error loading secrets config: {str(e)}", "error") main_config_json = json.dumps(main_config_data, indent=4, sort_keys=True) secrets_config_json = json.dumps(secrets_config_data, indent=4, sort_keys=True) return render_template_string(CONFIG_PAGE_TEMPLATE, main_config_json=main_config_json, secrets_config_json=secrets_config_json, active_tab=active_tab, main_config_path=config_manager.get_config_path(), secrets_config_path=config_manager.get_secrets_path()) @app.route('/save', methods=['POST']) def save_config_route(): config_type = request.form.get('config_type', 'main') data_to_save_str = "" if config_type == 'main': data_to_save_str = request.form['main_config_data'] elif config_type == 'secrets': data_to_save_str = request.form['secrets_config_data'] else: flash("Invalid configuration type specified for saving.", "error") return redirect(url_for('display_config_route')) try: new_data = json.loads(data_to_save_str) config_manager.save_raw_file_content(config_type, new_data) flash(f"{config_type.capitalize()} configuration saved successfully!", "success") except json.JSONDecodeError: flash(f"Error: Invalid JSON format submitted for {config_type} config.", "error") except Exception as e: flash(f"Error saving {config_type} configuration: {str(e)}", "error") return redirect(url_for('display_config_route', tab=config_type)) # Redirect back to the same tab if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)