mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-20 05:29:59 +01:00
Fixed settings save/load
This commit is contained in:
@@ -453,8 +453,7 @@
|
|||||||
|
|
||||||
#define EEPROM_SIZE 4095
|
#define EEPROM_SIZE 4095
|
||||||
#define BOOT_COUNTER_ADDR 1
|
#define BOOT_COUNTER_ADDR 1
|
||||||
#define SETTINGS_HASH_ADDR BOOT_COUNTER_ADDR + sizeof(boot)
|
#define SETTINGS_ADDR 100
|
||||||
#define SETTINGS_ADDR SETTINGS_HASH_ADDR + sizeof(settings_hash_t)
|
|
||||||
|
|
||||||
// ======== AVAILABLE SETTINGS ========== //
|
// ======== AVAILABLE SETTINGS ========== //
|
||||||
|
|
||||||
|
|||||||
@@ -6,35 +6,25 @@
|
|||||||
|
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
#include <Hash.h> // sha1() used in calc_hash()
|
|
||||||
#include "A_config.h" // Default Settings
|
#include "A_config.h" // Default Settings
|
||||||
#include "language.h" // prnt and prntln
|
#include "language.h" // prnt and prntln
|
||||||
#include "EEPROMHelper.h" // To load and save settings_t
|
#include "EEPROMHelper.h" // To load and save settings_t
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
#define MAGIC_NUM 3416245
|
||||||
|
|
||||||
extern bool writeFile(String path, String& buf);
|
extern bool writeFile(String path, String& buf);
|
||||||
extern void getRandomMac(uint8_t* mac);
|
extern void getRandomMac(uint8_t* mac);
|
||||||
extern bool macValid(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)\
|
#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)\
|
#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)\
|
#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++) {\
|
for (int i = 0; i<_LEN; i++) {\
|
||||||
if (i > 0) str += ':';\
|
if (i > 0) str += ':';\
|
||||||
if (_BYTES[i] < 0x10) str += '0';\
|
if (_BYTES[i] < 0x10) str += '0';\
|
||||||
@@ -43,7 +33,7 @@ bool operator==(version_t a, version_t b) {
|
|||||||
str += String(F("\","));
|
str += String(F("\","));
|
||||||
|
|
||||||
#define JSON_DEC(_NAME,_BYTES,_LEN)\
|
#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++) {\
|
for (int i = 0; i<_LEN; i++) {\
|
||||||
if (i > 0) str += '.';\
|
if (i > 0) str += '.';\
|
||||||
str += String(_BYTES[i]);\
|
str += String(_BYTES[i]);\
|
||||||
@@ -58,13 +48,6 @@ namespace settings {
|
|||||||
settings_t data;
|
settings_t data;
|
||||||
bool changed = false;
|
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) {
|
void get_json(String& str) {
|
||||||
str = String();
|
str = String();
|
||||||
str.reserve(600);
|
str.reserve(600);
|
||||||
@@ -126,20 +109,24 @@ namespace settings {
|
|||||||
void load() {
|
void load() {
|
||||||
debugF("Loading settings...");
|
debugF("Loading settings...");
|
||||||
|
|
||||||
// read hash from eeprom
|
|
||||||
settings_hash_t hash;
|
|
||||||
EEPROMHelper::getObject(SETTINGS_HASH_ADDR, hash);
|
|
||||||
|
|
||||||
// read data from eeproms
|
// read data from eeproms
|
||||||
settings_t newData;
|
settings_t newData;
|
||||||
EEPROMHelper::getObject(SETTINGS_ADDR, newData);
|
EEPROMHelper::getObject(SETTINGS_ADDR, newData);
|
||||||
|
|
||||||
// calc and check hash
|
// calc and check hash
|
||||||
if ((newData.version == data.version) && (calc_hash(newData) == hash)) {
|
if (newData.magic_num == MAGIC_NUM) {
|
||||||
data = newData;
|
data = newData;
|
||||||
|
data.version.major = DEAUTHER_VERSION_MAJOR;
|
||||||
|
data.version.minor = DEAUTHER_VERSION_MINOR;
|
||||||
|
data.version.revision = DEAUTHER_VERSION_REVISION;
|
||||||
debuglnF("OK");
|
debuglnF("OK");
|
||||||
} else {
|
} else {
|
||||||
debuglnF("Invalid Hash - reseted to default");
|
debuglnF("Invalid Hash");
|
||||||
|
debug(data.magic_num);
|
||||||
|
debugF(" != ");
|
||||||
|
debugln(MAGIC_NUM);
|
||||||
|
|
||||||
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
// check and fix mac
|
// check and fix mac
|
||||||
@@ -150,6 +137,8 @@ namespace settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void reset() {
|
void reset() {
|
||||||
|
data.magic_num = MAGIC_NUM;
|
||||||
|
|
||||||
data.version.major = DEAUTHER_VERSION_MAJOR;
|
data.version.major = DEAUTHER_VERSION_MAJOR;
|
||||||
data.version.minor = DEAUTHER_VERSION_MINOR;
|
data.version.minor = DEAUTHER_VERSION_MINOR;
|
||||||
data.version.revision = DEAUTHER_VERSION_REVISION;
|
data.version.revision = DEAUTHER_VERSION_REVISION;
|
||||||
@@ -180,7 +169,7 @@ namespace settings {
|
|||||||
data.web.use_spiffs = WEB_USE_SPIFFS;
|
data.web.use_spiffs = WEB_USE_SPIFFS;
|
||||||
memcpy(data.web.lang, DEFAULT_LANG, 3);
|
memcpy(data.web.lang, DEFAULT_LANG, 3);
|
||||||
|
|
||||||
data.cli.enabled = true;
|
data.cli.enabled = CLI_ENABLED;
|
||||||
data.cli.serial_echo = CLI_ECHO;
|
data.cli.serial_echo = CLI_ECHO;
|
||||||
|
|
||||||
data.led.enabled = USE_LED;
|
data.led.enabled = USE_LED;
|
||||||
@@ -188,12 +177,11 @@ namespace settings {
|
|||||||
data.display.enabled = USE_DISPLAY;
|
data.display.enabled = USE_DISPLAY;
|
||||||
data.display.timeout = DISPLAY_TIMEOUT;
|
data.display.timeout = DISPLAY_TIMEOUT;
|
||||||
|
|
||||||
debuglnF("Settings reset");
|
debuglnF("Settings reset to default");
|
||||||
}
|
}
|
||||||
|
|
||||||
void save(bool force) {
|
void save(bool force) {
|
||||||
if (force || changed) {
|
if (force || changed) {
|
||||||
EEPROMHelper::saveObject(SETTINGS_HASH_ADDR, calc_hash(data));
|
|
||||||
EEPROMHelper::saveObject(SETTINGS_ADDR, data);
|
EEPROMHelper::saveObject(SETTINGS_ADDR, data);
|
||||||
|
|
||||||
changed = false;
|
changed = false;
|
||||||
@@ -215,9 +203,9 @@ namespace settings {
|
|||||||
String json_buffer;
|
String json_buffer;
|
||||||
get_json(json_buffer);
|
get_json(json_buffer);
|
||||||
|
|
||||||
json_buffer.replace("\":", " = ");
|
json_buffer.replace("\":", ": ");
|
||||||
json_buffer.replace("= 0\r\n", "= false\r\n");
|
json_buffer.replace(": 0\r\n", ": false\r\n");
|
||||||
json_buffer.replace("= 1\r\n", "= true\r\n");
|
json_buffer.replace(": 1\r\n", ": true\r\n");
|
||||||
json_buffer.replace("\"", "");
|
json_buffer.replace("\"", "");
|
||||||
json_buffer.replace("{", "");
|
json_buffer.replace("{", "");
|
||||||
json_buffer.replace("}", "");
|
json_buffer.replace("}", "");
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ typedef struct display_settings_t {
|
|||||||
|
|
||||||
// ===== SETTINGS ===== //
|
// ===== SETTINGS ===== //
|
||||||
typedef struct settings_t {
|
typedef struct settings_t {
|
||||||
|
uint32_t magic_num;
|
||||||
version_t version;
|
version_t version;
|
||||||
autosave_settings_t autosave;
|
autosave_settings_t autosave;
|
||||||
attack_settings_t attack;
|
attack_settings_t attack;
|
||||||
@@ -105,11 +106,6 @@ typedef struct settings_t {
|
|||||||
display_settings_t display;
|
display_settings_t display;
|
||||||
} settings_t;
|
} settings_t;
|
||||||
|
|
||||||
// ===== CHECK SUM / HASH ====== //
|
|
||||||
typedef struct settings_hash_t {
|
|
||||||
uint8_t hash[20];
|
|
||||||
} settings_hash_t;
|
|
||||||
|
|
||||||
namespace settings {
|
namespace settings {
|
||||||
void load();
|
void load();
|
||||||
void save(bool force = false);
|
void save(bool force = false);
|
||||||
|
|||||||
Reference in New Issue
Block a user