From ca130576fdac59ce553646105fefefb360233b5a Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 8 Jul 2020 19:14:47 +0200 Subject: [PATCH] added back format console command --- lib/framework/FactoryResetService.cpp | 36 ++++++++++++------------- src/system.cpp | 38 +++++++++++++++++++++++++++ src/system.h | 1 + 3 files changed, 57 insertions(+), 18 deletions(-) diff --git a/lib/framework/FactoryResetService.cpp b/lib/framework/FactoryResetService.cpp index c3ecd9e03..a24e376fd 100644 --- a/lib/framework/FactoryResetService.cpp +++ b/lib/framework/FactoryResetService.cpp @@ -2,16 +2,16 @@ using namespace std::placeholders; -FactoryResetService::FactoryResetService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager) : fs(fs) { - server->on(FACTORY_RESET_SERVICE_PATH, - HTTP_POST, - securityManager->wrapRequest(std::bind(&FactoryResetService::handleRequest, this, _1), - AuthenticationPredicates::IS_ADMIN)); +FactoryResetService::FactoryResetService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager) + : fs(fs) { + server->on(FACTORY_RESET_SERVICE_PATH, + HTTP_POST, + securityManager->wrapRequest(std::bind(&FactoryResetService::handleRequest, this, _1), AuthenticationPredicates::IS_ADMIN)); } -void FactoryResetService::handleRequest(AsyncWebServerRequest* request) { - request->onDisconnect(std::bind(&FactoryResetService::factoryReset, this)); - request->send(200); +void FactoryResetService::handleRequest(AsyncWebServerRequest * request) { + request->onDisconnect(std::bind(&FactoryResetService::factoryReset, this)); + request->send(200); } /** @@ -19,16 +19,16 @@ void FactoryResetService::handleRequest(AsyncWebServerRequest* request) { */ void FactoryResetService::factoryReset() { #ifdef ESP32 - File root = fs->open(FS_CONFIG_DIRECTORY); - File file; - while (file = root.openNextFile()) { - fs->remove(file.name()); - } + File root = fs->open(FS_CONFIG_DIRECTORY); + File file; + while (file = root.openNextFile()) { + fs->remove(file.name()); + } #elif defined(ESP8266) - Dir configDirectory = fs->openDir(FS_CONFIG_DIRECTORY); - while (configDirectory.next()) { - fs->remove(configDirectory.fileName()); - } + Dir configDirectory = fs->openDir(FS_CONFIG_DIRECTORY); + while (configDirectory.next()) { + fs->remove(configDirectory.fileName()); + } #endif - RestartService::restartNow(); + RestartService::restartNow(); } diff --git a/src/system.cpp b/src/system.cpp index e27bb22f0..b9ca17ff9 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -152,6 +152,27 @@ void System::restart() { #endif } +// format fs +// format the FS. Wipes everything. +void System::format(uuid::console::Shell & shell) { + auto msg = F("Resetting all settings to defaults"); + shell.logger().warning(msg); + shell.flush(); + +#ifndef EMSESP_STANDALONE + EMSuart::stop(); + +#if defined(ESP8266) + LittleFS.format(); +#elif defined(ESP32) + SPIFFS.format(); +#endif + + System::restart(); + +#endif +} + // return free heap mem as a percentage uint8_t System::free_mem() { #ifndef EMSESP_STANDALONE @@ -444,6 +465,23 @@ void System::console_commands(Shell & shell, unsigned int context) { restart(); }); + EMSESPShell::commands->add_command(ShellContext::SYSTEM, + CommandFlags::ADMIN, + flash_string_vector{F_(format)}, + [](Shell & shell, const std::vector & arguments __attribute__((unused))) { + shell.enter_password(F_(password_prompt), [=](Shell & shell, bool completed, const std::string & password) { + if (completed) { + EMSESP::esp8266React.getSecuritySettingsService()->read([&](SecuritySettings & securitySettings) { + if (securitySettings.jwtSecret.equals(password.c_str())) { + format(shell); + } else { + shell.println(F("incorrect password")); + } + }); + } + }); + }); + EMSESPShell::commands->add_command(ShellContext::SYSTEM, CommandFlags::ADMIN, flash_string_vector{F_(passwd)}, diff --git a/src/system.h b/src/system.h index 55bc00e66..cca713fc3 100644 --- a/src/system.h +++ b/src/system.h @@ -43,6 +43,7 @@ class System { void loop(); static void restart(); + static void format(uuid::console::Shell & shell); static uint8_t free_mem(); void syslog_init(); void set_heartbeat(bool system_heartbeat);