From f16b1f6ec98eb6d1f84b0982ddb265888b2d29b9 Mon Sep 17 00:00:00 2001 From: Spacehuhn Date: Sun, 5 Jul 2020 16:34:46 +0200 Subject: [PATCH] Fixed settings save/load --- esp8266_deauther/A_config.h | 3 +- esp8266_deauther/Settings.cpp | 58 ++++++++++++++--------------------- esp8266_deauther/Settings.h | 6 +--- 3 files changed, 25 insertions(+), 42 deletions(-) diff --git a/esp8266_deauther/A_config.h b/esp8266_deauther/A_config.h index d974a28..10b899c 100644 --- a/esp8266_deauther/A_config.h +++ b/esp8266_deauther/A_config.h @@ -453,8 +453,7 @@ #define EEPROM_SIZE 4095 #define BOOT_COUNTER_ADDR 1 -#define SETTINGS_HASH_ADDR BOOT_COUNTER_ADDR + sizeof(boot) -#define SETTINGS_ADDR SETTINGS_HASH_ADDR + sizeof(settings_hash_t) +#define SETTINGS_ADDR 100 // ======== AVAILABLE SETTINGS ========== // diff --git a/esp8266_deauther/Settings.cpp b/esp8266_deauther/Settings.cpp index 4072b48..faa6e7e 100644 --- a/esp8266_deauther/Settings.cpp +++ b/esp8266_deauther/Settings.cpp @@ -6,35 +6,25 @@ #include "settings.h" -#include // sha1() used in calc_hash() #include "A_config.h" // Default Settings #include "language.h" // prnt and prntln #include "EEPROMHelper.h" // To load and save settings_t #include "debug.h" +#define MAGIC_NUM 3416245 + extern bool writeFile(String path, String& buf); extern void getRandomMac(uint8_t* mac); extern bool macValid(uint8_t* mac); -// ===== INTERNAL ===== // -bool operator==(settings_hash_t a, settings_hash_t b) { - for (int i = 0; i<20; i++) - if (a.hash[i] != b.hash[i]) return false; - return true; -} - -bool operator==(version_t a, version_t b) { - return a.major == b.major && a.minor == b.minor && a.revision == b.revision; -} - #define JSON_FLAG(_NAME,_VALUE)\ - str += String('"') + str(_NAME) + String(F("\":")) + String(_VALUE?"true":"false") + String(','); + str += String('"') + String(FPSTR(_NAME)) + String(F("\":")) + String(_VALUE?"true":"false") + String(','); #define JSON_VALUE(_NAME,_VALUE)\ - str += String('"') + str(_NAME) + String(F("\":")) + String(_VALUE) + String(','); + str += String('"') + String(FPSTR(_NAME)) + String(F("\":")) + String(_VALUE) + String(','); #define JSON_HEX(_NAME,_BYTES,_LEN)\ - str += String('"') + str(_NAME) + String(F("\":"));\ + str += String('"') + String(FPSTR(_NAME)) + String(F("\":"));\ for (int i = 0; i<_LEN; i++) {\ if (i > 0) str += ':';\ if (_BYTES[i] < 0x10) str += '0';\ @@ -43,7 +33,7 @@ bool operator==(version_t a, version_t b) { str += String(F("\",")); #define JSON_DEC(_NAME,_BYTES,_LEN)\ - str += String('"') + str(_NAME) + String(F("\":"));\ + str += String('"') + String(FPSTR(_NAME)) + String(F("\":"));\ for (int i = 0; i<_LEN; i++) {\ if (i > 0) str += '.';\ str += String(_BYTES[i]);\ @@ -58,13 +48,6 @@ namespace settings { settings_t data; bool changed = false; - settings_hash_t calc_hash(settings_t data) { - settings_hash_t hash; - sha1((uint8_t*)&data, sizeof(settings_t), hash.hash); - - return hash; - } - void get_json(String& str) { str = String(); str.reserve(600); @@ -126,20 +109,24 @@ namespace settings { void load() { debugF("Loading settings..."); - // read hash from eeprom - settings_hash_t hash; - EEPROMHelper::getObject(SETTINGS_HASH_ADDR, hash); - // read data from eeproms settings_t newData; EEPROMHelper::getObject(SETTINGS_ADDR, newData); // calc and check hash - if ((newData.version == data.version) && (calc_hash(newData) == hash)) { + if (newData.magic_num == MAGIC_NUM) { data = newData; + data.version.major = DEAUTHER_VERSION_MAJOR; + data.version.minor = DEAUTHER_VERSION_MINOR; + data.version.revision = DEAUTHER_VERSION_REVISION; debuglnF("OK"); } else { - debuglnF("Invalid Hash - reseted to default"); + debuglnF("Invalid Hash"); + debug(data.magic_num); + debugF(" != "); + debugln(MAGIC_NUM); + + reset(); } // check and fix mac @@ -150,6 +137,8 @@ namespace settings { } void reset() { + data.magic_num = MAGIC_NUM; + data.version.major = DEAUTHER_VERSION_MAJOR; data.version.minor = DEAUTHER_VERSION_MINOR; data.version.revision = DEAUTHER_VERSION_REVISION; @@ -180,7 +169,7 @@ namespace settings { data.web.use_spiffs = WEB_USE_SPIFFS; memcpy(data.web.lang, DEFAULT_LANG, 3); - data.cli.enabled = true; + data.cli.enabled = CLI_ENABLED; data.cli.serial_echo = CLI_ECHO; data.led.enabled = USE_LED; @@ -188,12 +177,11 @@ namespace settings { data.display.enabled = USE_DISPLAY; data.display.timeout = DISPLAY_TIMEOUT; - debuglnF("Settings reset"); + debuglnF("Settings reset to default"); } void save(bool force) { if (force || changed) { - EEPROMHelper::saveObject(SETTINGS_HASH_ADDR, calc_hash(data)); EEPROMHelper::saveObject(SETTINGS_ADDR, data); changed = false; @@ -215,9 +203,9 @@ namespace settings { String json_buffer; get_json(json_buffer); - json_buffer.replace("\":", " = "); - json_buffer.replace("= 0\r\n", "= false\r\n"); - json_buffer.replace("= 1\r\n", "= true\r\n"); + json_buffer.replace("\":", ": "); + json_buffer.replace(": 0\r\n", ": false\r\n"); + json_buffer.replace(": 1\r\n", ": true\r\n"); json_buffer.replace("\"", ""); json_buffer.replace("{", ""); json_buffer.replace("}", ""); diff --git a/esp8266_deauther/Settings.h b/esp8266_deauther/Settings.h index 67b859d..5593891 100644 --- a/esp8266_deauther/Settings.h +++ b/esp8266_deauther/Settings.h @@ -93,6 +93,7 @@ typedef struct display_settings_t { // ===== SETTINGS ===== // typedef struct settings_t { + uint32_t magic_num; version_t version; autosave_settings_t autosave; attack_settings_t attack; @@ -105,11 +106,6 @@ typedef struct settings_t { display_settings_t display; } settings_t; -// ===== CHECK SUM / HASH ====== // -typedef struct settings_hash_t { - uint8_t hash[20]; -} settings_hash_t; - namespace settings { void load(); void save(bool force = false);