""" MCLogger – Flask Web-Panel Multi-Tenant mit Gruppen, Rollen & verschlüsselten DB-Zugangsdaten. Coolify-kompatibel: alle Einstellungen via ENV. """ from datetime import datetime from flask import Flask, session from config import Config from panel_db import init_databases, get_user_groups from blueprints.auth import auth from blueprints.site_admin import site_admin from blueprints.group_admin import group_admin from blueprints.panel import panel def create_app() -> Flask: app = Flask(__name__) app.secret_key = Config.SECRET_KEY # Blueprints registrieren app.register_blueprint(auth) app.register_blueprint(site_admin) app.register_blueprint(group_admin) app.register_blueprint(panel) # Panel-Datenbank-Tabellen anlegen try: init_databases() except Exception as e: app.logger.warning(f"DB-Initialisierung fehlgeschlagen (noch nicht konfiguriert?): {e}") # ── Template-Filter ─────────────────────────────────────── @app.template_filter("fmt_duration") def fmt_duration(seconds): if seconds is None: return "—" seconds = int(seconds) h = seconds // 3600 m = (seconds % 3600) // 60 s = seconds % 60 if h: return f"{h}h {m}m" elif m: return f"{m}m {s}s" return f"{s}s" @app.template_filter("fmt_dt") def fmt_dt(dt): if dt is None: return "—" if isinstance(dt, str): return dt return dt.strftime("%d.%m.%Y %H:%M:%S") @app.context_processor def inject_globals(): uid = session.get("user_id") try: groups = get_user_groups(uid) if uid else [] except Exception: groups = [] return { "now": datetime.now(), "app_version": "2.0.0", "author": "SimolZimol", "user_groups": groups, } return app app = create_app() if __name__ == "__main__": app.run(host=Config.HOST, port=Config.PORT, debug=Config.DEBUG)