diff --git a/src/mesh/http/ContentHandler.cpp b/src/mesh/http/ContentHandler.cpp index 4799494ef..1676359e7 100644 --- a/src/mesh/http/ContentHandler.cpp +++ b/src/mesh/http/ContentHandler.cpp @@ -124,9 +124,12 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) ResourceNode *nodeHotspotApple = new ResourceNode("/hotspot-detect.html", "GET", &handleHotspot); ResourceNode *nodeHotspotAndroid = new ResourceNode("/generate_204", "GET", &handleHotspot); - ResourceNode *nodeSPIFFS = new ResourceNode("/spiffs", "GET", &handleSPIFFS); - ResourceNode *nodeUpdateSPIFFS = new ResourceNode("/spiffs/update", "POST", &handleUpdateSPIFFS); - ResourceNode *nodeDeleteSPIFFS = new ResourceNode("/spiffs/delete", "GET", &handleDeleteSPIFFSContent); + ResourceNode *nodeAdmin = new ResourceNode("/admin", "GET", &handleAdmin); + ResourceNode *nodeAdminSettings = new ResourceNode("/admin/settings", "GET", &handleAdminSettings); + ResourceNode *nodeAdminSettingsApply = new ResourceNode("/admin/settings/apply", "POST", &handleAdminSettingsApply); + ResourceNode *nodeAdminSPIFFS = new ResourceNode("/admin/spiffs", "GET", &handleSPIFFS); + ResourceNode *nodeUpdateSPIFFS = new ResourceNode("/admin/spiffs/update", "POST", &handleUpdateSPIFFS); + ResourceNode *nodeDeleteSPIFFS = new ResourceNode("/admin/spiffs/delete", "GET", &handleDeleteSPIFFSContent); ResourceNode *nodeRestart = new ResourceNode("/restart", "POST", &handleRestart); ResourceNode *nodeFormUpload = new ResourceNode("/upload", "POST", &handleFormUpload); @@ -137,6 +140,7 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) ResourceNode *nodeJsonSpiffsBrowseStatic = new ResourceNode("/json/spiffs/browse/static", "GET", &handleSpiffsBrowseStatic); ResourceNode *nodeJsonDelete = new ResourceNode("/json/spiffs/delete/static", "DELETE", &handleSpiffsDeleteStatic); + ResourceNode *nodeRoot = new ResourceNode("/*", "GET", &handleStatic); // Secure nodes @@ -154,7 +158,10 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) secureServer->registerNode(nodeJsonReport); secureServer->registerNode(nodeUpdateSPIFFS); secureServer->registerNode(nodeDeleteSPIFFS); - secureServer->registerNode(nodeSPIFFS); + secureServer->registerNode(nodeAdmin); + secureServer->registerNode(nodeAdminSPIFFS); + secureServer->registerNode(nodeAdminSettings); + secureServer->registerNode(nodeAdminSettingsApply); secureServer->registerNode(nodeRoot); // This has to be last // Insecure nodes @@ -172,7 +179,10 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) insecureServer->registerNode(nodeJsonReport); insecureServer->registerNode(nodeUpdateSPIFFS); insecureServer->registerNode(nodeDeleteSPIFFS); - insecureServer->registerNode(nodeSPIFFS); + insecureServer->registerNode(nodeAdmin); + insecureServer->registerNode(nodeAdminSPIFFS); + insecureServer->registerNode(nodeAdminSettings); + insecureServer->registerNode(nodeAdminSettingsApply); insecureServer->registerNode(nodeRoot); // This has to be last } @@ -374,12 +384,9 @@ void handleStatic(HTTPRequest *req, HTTPResponse *res) res->setHeader("Content-Type", "text/html"); if (!file.available()) { DEBUG_MSG("File not available - %s\n", filenameGzip.c_str()); - res->println( - "Web server is running.

The content you are looking for can't be found. Please see: FAQ.

Experimental " - "Web Content OTA Update -- Click " - "this just once and wait. Be patient!
"); + res->println("Web server is running.

The content you are looking for can't be found. Please see: FAQ.

admin"); } else { res->setHeader("Content-Encoding", "gzip"); } @@ -697,6 +704,7 @@ void handleUpdateSPIFFS(HTTPRequest *req, HTTPResponse *res) res->setHeader("Access-Control-Allow-Origin", "*"); // res->setHeader("Access-Control-Allow-Methods", "POST"); + res->println("

Meshtastic

\n"); res->println("Downloading Meshtastic Web Content..."); WiFiClientSecure *client = new WiFiClientSecure; @@ -783,6 +791,7 @@ void handleDeleteSPIFFSContent(HTTPRequest *req, HTTPResponse *res) res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "GET"); + res->println("

Meshtastic

\n"); res->println("Deleting SPIFFS Content in /static/*"); File root = SPIFFS.open("/"); @@ -798,16 +807,67 @@ void handleDeleteSPIFFSContent(HTTPRequest *req, HTTPResponse *res) } file = root.openNextFile(); } + res->println("


Back to admin\n"); } +void handleAdmin(HTTPRequest *req, HTTPResponse *res) +{ + res->setHeader("Content-Type", "text/html"); + res->setHeader("Access-Control-Allow-Origin", "*"); + res->setHeader("Access-Control-Allow-Methods", "GET"); + + res->println("

Meshtastic

\n"); + res->println("Settings
\n"); + res->println("Manage Web Content
\n"); + res->println("Device Report
\n"); +} + +void handleAdminSettings(HTTPRequest *req, HTTPResponse *res) +{ + res->setHeader("Content-Type", "text/html"); + res->setHeader("Access-Control-Allow-Origin", "*"); + res->setHeader("Access-Control-Allow-Methods", "GET"); + + res->println("

Meshtastic

\n"); + res->println("This isn't done.\n"); + res->println("
\n"); + res->println("\n"); + res->println("\n"); + res->println("\n"); + res->println("\n"); + res->println("\n"); + res->println("\n"); + res->println("\n"); + res->println("
Set?Settingcurrent valuenew value
WiFi SSIDfalse
WiFi Passwordfalse
Smart Position Updatefalse
is_always_poweredfalse
is_always_poweredfalse
\n"); + res->println("\n"); + res->println("\n"); + res->println("\n"); + res->println("


Back to admin\n"); +} + +void handleAdminSettingsApply(HTTPRequest *req, HTTPResponse *res) +{ + res->setHeader("Content-Type", "text/html"); + res->setHeader("Access-Control-Allow-Origin", "*"); + res->setHeader("Access-Control-Allow-Methods", "POST"); + res->println("

Meshtastic

\n"); + res->println( + "Settings Applied. "); + + res->println("Settings Applied. Please wait.\n"); +} + + void handleSPIFFS(HTTPRequest *req, HTTPResponse *res) { res->setHeader("Content-Type", "text/html"); res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "GET"); - res->println("Delete Web Content

println("

Meshtastic

\n"); + res->println("Delete Web Content

Be patient!"); + res->println("


Back to admin\n"); } void handleRestart(HTTPRequest *req, HTTPResponse *res) @@ -816,9 +876,10 @@ void handleRestart(HTTPRequest *req, HTTPResponse *res) res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "GET"); - DEBUG_MSG("***** Restarted on HTTP(s) Request *****\n"); + res->println("

Meshtastic

\n"); res->println("Restarting"); + DEBUG_MSG("***** Restarted on HTTP(s) Request *****\n"); webServerThread->requestRestart = (millis() / 1000) + 5; } diff --git a/src/mesh/http/ContentHandler.h b/src/mesh/http/ContentHandler.h index 4dfb86944..541fcff39 100644 --- a/src/mesh/http/ContentHandler.h +++ b/src/mesh/http/ContentHandler.h @@ -18,6 +18,9 @@ void handleReport(HTTPRequest *req, HTTPResponse *res); void handleUpdateSPIFFS(HTTPRequest *req, HTTPResponse *res); void handleDeleteSPIFFSContent(HTTPRequest *req, HTTPResponse *res); void handleSPIFFS(HTTPRequest *req, HTTPResponse *res); +void handleAdmin(HTTPRequest *req, HTTPResponse *res); +void handleAdminSettings(HTTPRequest *req, HTTPResponse *res); +void handleAdminSettingsApply(HTTPRequest *req, HTTPResponse *res); // Interface to the PhoneAPI to access the protobufs with messages