/* * Server page definitions */ void initServer() { //settings page server.on("/settings", HTTP_GET, [](){ serveSettings(0); }); server.on("/settings/wifi", HTTP_GET, [](){ if (!(wifiLock && otaLock)) { serveSettings(1); }else{ serveMessage(500, "Access Denied", txd, 254); } }); server.on("/settings/leds", HTTP_GET, [](){ serveSettings(2); }); server.on("/settings/ui", HTTP_GET, [](){ serveSettings(3); }); server.on("/settings/sync", HTTP_GET, [](){ serveSettings(4); }); server.on("/settings/time", HTTP_GET, [](){ serveSettings(5); }); server.on("/settings/sec", HTTP_GET, [](){ serveSettings(6); }); server.on("/favicon.ico", HTTP_GET, [](){ if(!handleFileRead("/favicon.ico")) { server.send_P(200, "image/x-icon", favicon, 156); } }); server.on("/sliders", HTTP_GET, serveIndex); server.on("/welcome", HTTP_GET, [](){ serveSettings(255); }); server.on("/reset", HTTP_GET, [](){ serveMessage(200,"Rebooting now...","(takes ~20 seconds, wait for auto-redirect)",79); reset(); }); server.on("/settings/wifi", HTTP_POST, [](){ if (!(wifiLock && otaLock)) handleSettingsSet(1); serveMessage(200,"WiFi settings saved.","Rebooting now...",255); reset(); }); server.on("/settings/leds", HTTP_POST, [](){ handleSettingsSet(2); serveMessage(200,"LED settings saved.","Redirecting...",1); }); server.on("/settings/ui", HTTP_POST, [](){ handleSettingsSet(3); serveMessage(200,"UI settings saved.","Reloading to apply theme...",122); }); server.on("/settings/sync", HTTP_POST, [](){ handleSettingsSet(4); if (hueAttempt) { serveMessage(200,"Hue setup result",hueError,253); } else { serveMessage(200,"Sync settings saved.","Redirecting...",1); } hueAttempt = false; }); server.on("/settings/time", HTTP_POST, [](){ handleSettingsSet(5); serveMessage(200,"Time settings saved.","Redirecting...",1); }); server.on("/settings/sec", HTTP_POST, [](){ handleSettingsSet(6); serveMessage(200,"Security settings saved.","Rebooting now... (takes ~20 seconds, wait for auto-redirect)",139); reset(); }); server.on("/version", HTTP_GET, [](){ server.send(200, "text/plain", (String)VERSION); }); server.on("/uptime", HTTP_GET, [](){ server.send(200, "text/plain", (String)millis()); }); server.on("/freeheap", HTTP_GET, [](){ server.send(200, "text/plain", (String)ESP.getFreeHeap()); }); server.on("/power", HTTP_GET, [](){ String val = ""; if (strip.currentMilliamps == 0) { val = "Power calculation disabled"; } else { val += (String)strip.currentMilliamps; val += "mA currently"; } serveMessage(200, val, "This is just an estimate (does not account for factors like wire resistance). It is NOT a measurement!", 254); }); server.on("/u", HTTP_GET, [](){ server.setContentLength(strlen_P(PAGE_usermod)); server.send(200, "text/html", ""); server.sendContent_P(PAGE_usermod); }); server.on("/teapot", HTTP_GET, [](){ serveMessage(418, "418. I'm a teapot.", "(Tangible Embedded Advanced Project Of Twinkling)", 254); }); server.on("/build", HTTP_GET, [](){ getBuildInfo(); server.send(200, "text/plain", obuf); }); //if OTA is allowed if (!otaLock){ server.on("/edit", HTTP_GET, [](){ server.send(200, "text/html", PAGE_edit); }); #ifdef USEFS server.on("/edit", HTTP_PUT, handleFileCreate); server.on("/edit", HTTP_DELETE, handleFileDelete); server.on("/edit", HTTP_POST, [](){ server.send(200, "text/plain", ""); }, handleFileUpload); server.on("/list", HTTP_GET, handleFileList); #endif //init ota page #ifndef WLED_DISABLE_OTA httpUpdater.setup(&server); #else server.on("/update", HTTP_GET, [](){ serveMessage(500, "Not implemented", "OTA updates are unsupported in this build.", 254); }); #endif } else { server.on("/edit", HTTP_GET, [](){ serveMessage(500, "Access Denied", txd, 254); }); server.on("/update", HTTP_GET, [](){ serveMessage(500, "Access Denied", txd, 254); }); server.on("/list", HTTP_GET, [](){ serveMessage(500, "Access Denied", txd, 254); }); } //this ceased working somehow /*server.on("/", HTTP_GET, [](){ serveIndexOrWelcome(); });*/ //called when the url is not defined here, ajax-in; get-settings server.onNotFound([](){ DEBUG_PRINTLN("Not-Found HTTP call:"); DEBUG_PRINTLN("URI: " + server.uri()); DEBUG_PRINTLN("Body: " + server.arg(0)); //workaround for subpage issue if (server.uri().length() == 1) { serveIndexOrWelcome(); return; } if(!handleSet(server.uri())){ if(!handleAlexaApiCall(server.uri(),server.arg(0))) server.send(404, "text/plain", "Not Found"); } }); #ifndef ARDUINO_ARCH_ESP32 const char * headerkeys[] = {"User-Agent"}; server.collectHeaders(headerkeys,sizeof(headerkeys)/sizeof(char*)); #else String ua = "User-Agent"; server.collectHeaders(ua); #endif } void serveIndexOrWelcome() { if (!showWelcomePage){ serveIndex(); }else{ serveSettings(255); } } void serveRealtimeError(bool settings) { String mesg = "The "; mesg += (settings)?"settings":"WLED"; mesg += " UI is not available while receiving real-time data ("; if (realtimeIP[0] == 0) { mesg += "E1.31"; } else { mesg += "UDP from "; mesg += realtimeIP[0]; for (int i = 1; i < 4; i++) { mesg += "."; mesg += realtimeIP[i]; } } mesg += ")."; server.send(200, "text/plain", mesg); } void getCSSColors() { char cs[6][9]; getThemeColors(cs); oappend("