From f9905ea416829fbd6f6dbfed763701664071f103 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Tue, 4 Jan 2022 19:26:50 -0800 Subject: [PATCH 1/7] MITM disabled --- src/nimble/BluetoothUtil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nimble/BluetoothUtil.cpp b/src/nimble/BluetoothUtil.cpp index 42ff06b7d..bf7b9e16c 100644 --- a/src/nimble/BluetoothUtil.cpp +++ b/src/nimble/BluetoothUtil.cpp @@ -516,7 +516,7 @@ void reinitBluetooth() ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_DISP_ONLY; ble_hs_cfg.sm_bonding = 1; - ble_hs_cfg.sm_mitm = 1; + ble_hs_cfg.sm_mitm = 0; ble_hs_cfg.sm_sc = 1; // per https://github.com/espressif/esp-idf/issues/5530#issuecomment-652933685 ble_hs_cfg.sm_our_key_dist = BLE_SM_PAIR_KEY_DIST_ID | BLE_SM_PAIR_KEY_DIST_ENC; From 841bc97a477aa12c25db657207aebfaed6c4beb6 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Wed, 5 Jan 2022 19:44:44 -0800 Subject: [PATCH 2/7] Revert "Merge pull request #94 from mc-hamster/BLE_NOPIN" This reverts commit c366d8151071691d800a850fc49bdf2cb926e3d8, reversing changes made to e9f01de051b28c4d45e589f08102d73b48823025. --- src/nimble/BluetoothUtil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nimble/BluetoothUtil.cpp b/src/nimble/BluetoothUtil.cpp index bf7b9e16c..42ff06b7d 100644 --- a/src/nimble/BluetoothUtil.cpp +++ b/src/nimble/BluetoothUtil.cpp @@ -516,7 +516,7 @@ void reinitBluetooth() ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_DISP_ONLY; ble_hs_cfg.sm_bonding = 1; - ble_hs_cfg.sm_mitm = 0; + ble_hs_cfg.sm_mitm = 1; ble_hs_cfg.sm_sc = 1; // per https://github.com/espressif/esp-idf/issues/5530#issuecomment-652933685 ble_hs_cfg.sm_our_key_dist = BLE_SM_PAIR_KEY_DIST_ID | BLE_SM_PAIR_KEY_DIST_ENC; From e2d1cce1bbb95cd7879ba36db47e7411a6b8a735 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 7 Jan 2022 20:20:47 -0800 Subject: [PATCH 3/7] Start of web admin --- src/mesh/http/ContentHandler.cpp | 31 +++++++++++++++++++++++-------- src/mesh/http/ContentHandler.h | 1 + 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/mesh/http/ContentHandler.cpp b/src/mesh/http/ContentHandler.cpp index 4799494ef..bd7e3d51e 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", "GET", &handleAdminSettings); + ResourceNode *nodeSPIFFS = 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); @@ -155,6 +158,8 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) secureServer->registerNode(nodeUpdateSPIFFS); secureServer->registerNode(nodeDeleteSPIFFS); secureServer->registerNode(nodeSPIFFS); + secureServer->registerNode(nodeAdmin); + secureServer->registerNode(nodeAdminSettings); secureServer->registerNode(nodeRoot); // This has to be last // Insecure nodes @@ -173,6 +178,8 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) insecureServer->registerNode(nodeUpdateSPIFFS); insecureServer->registerNode(nodeDeleteSPIFFS); insecureServer->registerNode(nodeSPIFFS); + insecureServer->registerNode(nodeAdmin); + insecureServer->registerNode(nodeAdminSettings); insecureServer->registerNode(nodeRoot); // This has to be last } @@ -376,10 +383,7 @@ void handleStatic(HTTPRequest *req, HTTPResponse *res) 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!
"); + "href=https://meshtastic.org/docs/getting-started/faq#wifi--web-browser>FAQ.

admin"); } else { res->setHeader("Content-Encoding", "gzip"); } @@ -800,13 +804,24 @@ void handleDeleteSPIFFSContent(HTTPRequest *req, HTTPResponse *res) } } +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("Manage Web Content
\n"); + res->println("Device Report
\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("Delete Web Content

Be patient!"); } diff --git a/src/mesh/http/ContentHandler.h b/src/mesh/http/ContentHandler.h index 4dfb86944..811102748 100644 --- a/src/mesh/http/ContentHandler.h +++ b/src/mesh/http/ContentHandler.h @@ -18,6 +18,7 @@ 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); // Interface to the PhoneAPI to access the protobufs with messages From 95f2d0c9334ed59f2c729e1b146c0ed508f48e55 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 7 Jan 2022 21:02:31 -0800 Subject: [PATCH 4/7] Fix build error. Forgot to save a file. --- src/mesh/http/ContentHandler.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/mesh/http/ContentHandler.cpp b/src/mesh/http/ContentHandler.cpp index bd7e3d51e..643f105b8 100644 --- a/src/mesh/http/ContentHandler.cpp +++ b/src/mesh/http/ContentHandler.cpp @@ -126,7 +126,7 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) ResourceNode *nodeAdmin = new ResourceNode("/admin", "GET", &handleAdmin); - // ResourceNode *nodeAdminSettings = new ResourceNode("/admin", "GET", &handleAdminSettings); + ResourceNode *nodeAdminSettings = new ResourceNode("/admin", "GET", &handleAdminSettings); ResourceNode *nodeSPIFFS = new ResourceNode("/admin/spiffs", "GET", &handleSPIFFS); ResourceNode *nodeUpdateSPIFFS = new ResourceNode("/admin/spiffs/update", "POST", &handleUpdateSPIFFS); ResourceNode *nodeDeleteSPIFFS = new ResourceNode("/admin/spiffs/delete", "GET", &handleDeleteSPIFFSContent); @@ -810,10 +810,20 @@ void handleAdmin(HTTPRequest *req, HTTPResponse *res) res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "GET"); + 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("WIP\n"); +} + void handleSPIFFS(HTTPRequest *req, HTTPResponse *res) { From fcd3170a0f891b72c6ee588d0bab103c8a7f3e08 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 7 Jan 2022 21:45:34 -0800 Subject: [PATCH 5/7] Page for admin settings and a post to apply --- src/mesh/http/ContentHandler.cpp | 41 +++++++++++++++++++++++++------- src/mesh/http/ContentHandler.h | 2 ++ 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/mesh/http/ContentHandler.cpp b/src/mesh/http/ContentHandler.cpp index 643f105b8..e179b0d29 100644 --- a/src/mesh/http/ContentHandler.cpp +++ b/src/mesh/http/ContentHandler.cpp @@ -124,10 +124,10 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) ResourceNode *nodeHotspotApple = new ResourceNode("/hotspot-detect.html", "GET", &handleHotspot); ResourceNode *nodeHotspotAndroid = new ResourceNode("/generate_204", "GET", &handleHotspot); - ResourceNode *nodeAdmin = new ResourceNode("/admin", "GET", &handleAdmin); - ResourceNode *nodeAdminSettings = new ResourceNode("/admin", "GET", &handleAdminSettings); - ResourceNode *nodeSPIFFS = new ResourceNode("/admin/spiffs", "GET", &handleSPIFFS); + ResourceNode *nodeAdminSettings = new ResourceNode("/admin/settings", "GET", &handleAdminSettings); + ResourceNode *nodeAdminSettingsApply = new ResourceNode("/admin/settings/apply", "GET", &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); @@ -140,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 @@ -157,9 +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 @@ -177,9 +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 } @@ -381,9 +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.

admin"); + 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"); } @@ -821,7 +824,27 @@ void handleAdminSettings(HTTPRequest *req, HTTPResponse *res) res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "GET"); - res->println("WIP\n"); + res->println("Delete Web Content

Be patient!"); + + res->println("
\n"); + res->println("\n"); + res->println("\n"); + res->println("
Set?Settingcurrent valuenew value
\n"); + res->println("\n"); + res->println("\n"); + res->println("\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( + "Settings Applied. "); + + res->println("Settings Applied. Please wait.\n"); } diff --git a/src/mesh/http/ContentHandler.h b/src/mesh/http/ContentHandler.h index 811102748..541fcff39 100644 --- a/src/mesh/http/ContentHandler.h +++ b/src/mesh/http/ContentHandler.h @@ -19,6 +19,8 @@ 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 From 398a5baa90aa0069aaa307681ddaec1fd1463e49 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 7 Jan 2022 22:04:08 -0800 Subject: [PATCH 6/7] Admin page framework is done. --- src/mesh/http/ContentHandler.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/mesh/http/ContentHandler.cpp b/src/mesh/http/ContentHandler.cpp index e179b0d29..fd30c5d0b 100644 --- a/src/mesh/http/ContentHandler.cpp +++ b/src/mesh/http/ContentHandler.cpp @@ -126,7 +126,7 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer) ResourceNode *nodeAdmin = new ResourceNode("/admin", "GET", &handleAdmin); ResourceNode *nodeAdminSettings = new ResourceNode("/admin/settings", "GET", &handleAdminSettings); - ResourceNode *nodeAdminSettingsApply = new ResourceNode("/admin/settings/apply", "GET", &handleAdminSettingsApply); + 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); @@ -704,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; @@ -790,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("/"); @@ -805,6 +807,7 @@ void handleDeleteSPIFFSContent(HTTPRequest *req, HTTPResponse *res) } file = root.openNextFile(); } + res->println("


Back to admin\n"); } void handleAdmin(HTTPRequest *req, HTTPResponse *res) @@ -813,6 +816,7 @@ void handleAdmin(HTTPRequest *req, HTTPResponse *res) 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"); @@ -824,16 +828,20 @@ void handleAdminSettings(HTTPRequest *req, HTTPResponse *res) res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "GET"); - res->println("Delete Web Content

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

Meshtastic

\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("\n"); res->println("
Set?Settingcurrent valuenew value
is_always_poweredfalse
is_always_poweredfalse
is_always_poweredfalse
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) @@ -841,6 +849,7 @@ 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. "); @@ -854,8 +863,10 @@ void handleSPIFFS(HTTPRequest *req, HTTPResponse *res) res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "GET"); + res->println("

Meshtastic

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

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


Back to admin\n"); } void handleRestart(HTTPRequest *req, HTTPResponse *res) @@ -864,9 +875,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; } From 1fe4b95fe54c5f1e1b2dc69dc2a9ad5782424ee3 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 7 Jan 2022 22:20:02 -0800 Subject: [PATCH 7/7] Add placeholder settings --- src/mesh/http/ContentHandler.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mesh/http/ContentHandler.cpp b/src/mesh/http/ContentHandler.cpp index fd30c5d0b..1676359e7 100644 --- a/src/mesh/http/ContentHandler.cpp +++ b/src/mesh/http/ContentHandler.cpp @@ -829,12 +829,13 @@ void handleAdminSettings(HTTPRequest *req, HTTPResponse *res) 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("\n"); res->println("\n"); res->println("\n"); res->println("
Set?Settingcurrent valuenew value
is_always_poweredfalse
is_always_poweredfalse
is_always_poweredfalse
WiFi SSIDfalse
WiFi Passwordfalse
Smart Position Updatefalse
is_always_poweredfalse
is_always_poweredfalse
\n");