#pragma once // ============================================================================= // web_server.h – HTTP-Webinterface für Statusanzeige und Konfiguration // Projekt: MQTT-Display LaserCutter // // Basierend auf ESPAsyncWebServer (non-blocking, Task-safe). // // Routen: // GET / – Statusseite (Session, Gesamtzeit, WLAN/MQTT-Status) // GET /config – Konfigurationsformular (MQTT, Gratiszeit, Polarität) // POST /config – Konfiguration speichern (NVS via SettingsManager) // POST /reset – Gesamtzeit zurücksetzen (laserTracker.resetTotal()) // GET /update – OTA-Update-Seite (ElegantOTA) // POST /update – Firmware-Upload (ElegantOTA) // // Verwendung: // webServer.begin(); // einmalig in setup(), nach WiFi-Connect // // kein loop() nötig – ESPAsyncWebServer ist vollständig async // ============================================================================= #include // Forward-Declarations: ESPAsyncWebServer.h nur in web_server.cpp einbinden // (verhindert HTTP_GET/POST-Enum-Konflikt mit WiFiManager in main.cpp) class AsyncWebServer; class AsyncWebServerRequest; class WebServerManager { public: WebServerManager(); // Routen registrieren und Server starten (einmalig in setup()) void begin(); private: AsyncWebServer* _server; // PIMPL: Pointer, full type only in web_server.cpp void registerRoutes(); // HTTP-Basic-Auth pruefen; gibt false zurueck und sendet 401 wenn nicht autorisiert bool requireAuth(AsyncWebServerRequest* request); // HTML-Seiten als Strings aufbauen String buildStatusPage(); String buildConfigPage(); }; // Globale Instanz extern WebServerManager webServer;