/* * ═══════════════════════════════════════════════════════════════════════════════════ * SETTINGSWEBSERVER.CPP - Network Mode Settings Web Interface Implementation * ═══════════════════════════════════════════════════════════════════════════════════ */ #include "SettingsWebServer.hpp" #include "../ConfigManager/ConfigManager.hpp" #include "../Networking/Networking.hpp" #include "../Logging/Logging.hpp" SettingsWebServer::SettingsWebServer(AsyncWebServer& server, ConfigManager& configManager, Networking& networking) : _server(server) , _configManager(configManager) , _networking(networking) { } SettingsWebServer::~SettingsWebServer() { } void SettingsWebServer::begin() { LOG_INFO("SettingsWebServer - Initializing settings web interface"); // GET /settings - Main settings page _server.on("/settings", HTTP_GET, [this](AsyncWebServerRequest* request) { handleSettingsPage(request); } ); // POST /api/set-mode - Set network mode _server.on("/api/set-mode", HTTP_POST, [this](AsyncWebServerRequest* request) { handleSetMode(request); } ); // POST /api/reboot - Reboot device _server.on("/api/reboot", HTTP_POST, [this](AsyncWebServerRequest* request) { handleReboot(request); } ); LOG_INFO("SettingsWebServer - Endpoints registered"); LOG_INFO(" GET /settings - Settings page"); LOG_INFO(" POST /api/set-mode - Set network mode"); LOG_INFO(" POST /api/reboot - Reboot device"); } void SettingsWebServer::handleSettingsPage(AsyncWebServerRequest* request) { LOG_DEBUG("SettingsWebServer - Settings page requested"); String html = generateSettingsHTML(); request->send(200, "text/html", html); } void SettingsWebServer::handleSetMode(AsyncWebServerRequest* request) { if (!request->hasParam("mode", true)) { request->send(400, "text/plain", "Missing mode parameter"); return; } String mode = request->getParam("mode", true)->value(); LOG_INFO("SettingsWebServer - Mode change requested: %s", mode.c_str()); if (mode == "ap") { // Switch to permanent AP mode _configManager.setPermanentAPMode(true); _configManager.saveNetworkConfig(); LOG_INFO("✅ Permanent AP mode enabled - will activate on reboot"); request->send(200, "text/plain", "AP mode enabled. Device will reboot in 3 seconds."); // Reboot after 3 seconds delay(3000); ESP.restart(); } else if (mode == "station") { // Switch to station mode (router mode) _configManager.setPermanentAPMode(false); _configManager.saveNetworkConfig(); LOG_INFO("✅ Station mode enabled - will activate on reboot"); request->send(200, "text/plain", "Station mode enabled. Device will reboot in 3 seconds."); // Reboot after 3 seconds delay(3000); ESP.restart(); } else { request->send(400, "text/plain", "Invalid mode. Use 'ap' or 'station'"); } } void SettingsWebServer::handleReboot(AsyncWebServerRequest* request) { LOG_INFO("SettingsWebServer - Reboot requested"); request->send(200, "text/plain", "Rebooting device in 2 seconds..."); delay(2000); ESP.restart(); } String SettingsWebServer::generateSettingsHTML() { bool isAPMode = _networking.isInAPMode(); String currentIP = _networking.getLocalIP(); String deviceUID = _configManager.getDeviceUID(); String fwVersion = _configManager.getFwVersion(); String html = R"rawliteral(
Network Configuration
Direct Connection
192.168.4.1
Connect via Router
WiFi/Ethernet