diff --git a/data/is-cfg.json b/data/is-cfg.json index 6072030..8c02d2b 100644 --- a/data/is-cfg.json +++ b/data/is-cfg.json @@ -47,5 +47,12 @@ "always_on": true, "timeout":10, "overwrite_pin":0 + }, + "ftp": + { + "active":false, + "user": [ + { "name":"ftp", "password":"ftp" } + ] } } diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 50e657a..ae175a8 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -139,17 +139,20 @@ void loop() beacon_digi = true; } - ftpServer.handle(); - static bool configWasOpen = false; - if(configWasOpen && ftpServer.countConnections() == 0) + if(Config.ftp.active) { - Serial.println("[WARN] Configuration maybe changed via FTP, will restart now..."); - Serial.println(); - ESP.restart(); - } - if(ftpServer.countConnections() > 0) - { - configWasOpen = true; + ftpServer.handle(); + static bool configWasOpen = false; + if(configWasOpen && ftpServer.countConnections() == 0) + { + Serial.println("[WARN] Maybe the config has been changed via FTP, lets restart now to get the new config..."); + Serial.println(); + ESP.restart(); + } + if(ftpServer.countConnections() > 0) + { + configWasOpen = true; + } } if(Config.wifi.active) ArduinoOTA.handle(); @@ -445,9 +448,16 @@ void setup_timer() void setup_ftp() { -#define FTP_USER "ftp" -#define FTP_PASSWORD "ftp" - ftpServer.addUser(FTP_USER, FTP_PASSWORD); + if(!Config.ftp.active) + { + return; + } + for(Configuration::Ftp::User user : Config.ftp.users) + { + Serial.print("[INFO] Adding user to FTP Server: "); + Serial.println(user.name); + ftpServer.addUser(user.name, user.password); + } ftpServer.addFilesystem("SPIFFS", &SPIFFS); ftpServer.begin(); Serial.println("[INFO] FTP Server init done!"); diff --git a/src/configuration.cpp b/src/configuration.cpp index 3d7d24e..30d117c 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -31,19 +31,21 @@ Configuration ConfigurationManagement::readConfiguration() Serial.println("Failed to open file for reading..."); return Configuration(); } - DynamicJsonDocument data(1024); + DynamicJsonDocument data(2048); deserializeJson(data, file); + //serializeJson(data, Serial); + //Serial.println(); file.close(); Configuration conf; conf.callsign = data["callsign"].as(); conf.wifi.active = data["wifi"]["active"]; - JsonArray aps = data["wifi"]["AP"].as(); + JsonArray aps = data["wifi"]["AP"].as(); for(JsonVariant v : aps) { Configuration::Wifi::AP ap; - ap.SSID = v["SSID"].as(); - ap.password = v["password"].as(); + ap.SSID = v["SSID"].as(); + ap.password = v["password"].as(); conf.wifi.APs.push_back(ap); } conf.beacon.message = data["beacon"]["message"].as(); @@ -75,6 +77,18 @@ Configuration ConfigurationManagement::readConfiguration() conf.lora.signalBandwidth = data["lora"]["signal_bandwidth"]; conf.lora.codingRate4 = data["lora"]["coding_rate4"]; } + if(data["version"] >= 4) + { + conf.ftp.active = data["ftp"]["active"]; + JsonArray users = data["ftp"]["user"].as(); + for(JsonVariant u : users) + { + Configuration::Ftp::User us; + us.name = u["name"].as(); + us.password = u["password"].as(); + conf.ftp.users.push_back(us); + } + } // update config in memory to get the new fields: writeConfiguration(conf); @@ -90,7 +104,7 @@ void ConfigurationManagement::writeConfiguration(Configuration conf) Serial.println("Failed to open file for writing..."); return; } - DynamicJsonDocument data(1024); + DynamicJsonDocument data(2048); data["version"] = conf.version; data["callsign"] = conf.callsign; @@ -124,6 +138,14 @@ void ConfigurationManagement::writeConfiguration(Configuration conf) data["display"]["always_on"] = conf.display.alwaysOn; data["display"]["timeout"] = conf.display.timeout; data["display"]["overwrite_pin"] = conf.display.overwritePin; + data["ftp"]["active"] = conf.ftp.active; + JsonArray users = data["ftp"].createNestedArray("user"); + for(Configuration::Ftp::User u : conf.ftp.users) + { + JsonObject v = users.createNestedObject(); + v["name"] = u.name; + v["password"] = u.password; + } serializeJson(data, file); //serializeJson(data, Serial); diff --git a/src/configuration.h b/src/configuration.h index 39cdd0d..c73f615 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -82,7 +82,23 @@ public: int overwritePin; }; - Configuration() : version(3), callsign("NOCALL-10") {}; + class Ftp + { + public: + class User + { + public: + String name; + String password; + }; + + Ftp() : active(false) {} + + bool active; + std::list users; + }; + + Configuration() : version(4), callsign("NOCALL-10") {}; int version; String callsign; @@ -92,6 +108,7 @@ public: Digi digi; LoRa lora; Display display; + Ftp ftp; }; class ConfigurationManagement