mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2025-12-22 23:26:45 -08:00
* Trims serial input for PuTTY * v0.9.7 Release * Re-release v0.9.7 * add OG-Marauder enclosure (#124) * add Marauder Mini Case and rearrange files * Add OG-Marauder Enclosure * Add more cmd, clean serial, add ascii * Add attack command to CLI * Add SSID commands * print eapol when received * Add more sniff and attack commands * Fix OTA update shutdown via CLI * Add help command * Release v0.9.8 * Add channel arg to pmkid sniff * Add targeted ap beacon spam * Save a beacon packet * AP obfuscation attack * Update README.md * Send deauth for pmkid * PMKID deauth optional * Release v0.9.9 * v0.9.10 Release * Select all and flipper LED * Add screen buffer for mini * Fix screen buffer formatting * packet monitor eapol scan formatting * Release v0.9.11 * Update README.md * Add settings command and SD CS * Release v0.9.12 * Fix mini update menu * Release v0.9.13-rc1 * Fix stopscan and sniffpmkid * fix sniffpmkid SSID visible (#140) * Add rssi and setting reset * Release v0.9.13 * Create build_push.yml * Add libraries * Fix library red * Spelling * Adjust ref for SwitchLib * Add ESP32 Board * Update board fqdn * Specify package version for ESP32 * Add compiler switches * Update compile args * Lib args * Fix multdefs * Update version of arduino test compile * Separate lib install * Jobs together * Fix warnings flag * Add muldefs arg to cli * Update build_push.yml * Specify build property * Full build property string * Fix quote placement * Add find and replace * Update build_push.yml * Update build_push.yml * Update build_push.yml * Cat platform file * Update build_push.yml * Add install boards * Update build_push.yml * Add bash for loop for platform * Update build_push.yml * find and replace * Add muldefs to ESP32 and ESP32S2 * Add display bins * minimal spiffs * Minimal SPIFFS syntax * More Minimal SPIFFS syntax * Add more build params * Add upload artifacts * Add TFT Setup files * Add configure TFT_eSPI * Configure libs and configs * Fix sed file locations * Update build_push.yml * Update build_push.yml * Look for TFT_eSPI * Update start location for find * Update locations of libraries * Fix path to TFT_eSPI * Compile for other platforms * Create draft release * Update README.md * Only allow manual workflow * Fix blank PCAPs * Switch configs * Specify NimBLE 1.2.0 * No "v" in tag * Fix SD card init issues Copy SD lib from arduino-esp32 v2.0.4 to replace SD lib from arduino-esp32 v2.0.0-rc2 * Pull arduino-esp32 v2.0.4 * Replace 2.0.0-rc1 SD lib with 2.0.4 * Fix path * Gramatical (#155) * Add raw cap and manual deauth * Revert to flipper * Change color * Change color again * define white * Update issue templates * Create config.yml * Specify dst mac again * Update README.md * Create .gitignore Co-authored-by: Gregor Hermani <53179565+trisp3ar@users.noreply.github.com> Co-authored-by: improving-rigmarole <17810364+improving-rigmarole@users.noreply.github.com> Co-authored-by: Ayden <butera.ayden@gmail.com>
306 lines
8.5 KiB
C++
306 lines
8.5 KiB
C++
#include "settings.h"
|
|
|
|
String Settings::getSettingsString() {
|
|
return this->json_settings_string;
|
|
}
|
|
|
|
bool Settings::begin() {
|
|
if(!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)){
|
|
Serial.println("Settings SPIFFS Mount Failed");
|
|
return false;
|
|
}
|
|
|
|
File settingsFile;
|
|
|
|
//SPIFFS.remove("/settings.json"); // NEED TO REMOVE THIS LINE
|
|
|
|
if (SPIFFS.exists("/settings.json")) {
|
|
settingsFile = SPIFFS.open("/settings.json", FILE_READ);
|
|
|
|
if (!settingsFile) {
|
|
settingsFile.close();
|
|
Serial.println(F("Could not find settings file"));
|
|
if (this->createDefaultSettings(SPIFFS))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
}
|
|
else {
|
|
Serial.println("Settings file does not exist");
|
|
if (this->createDefaultSettings(SPIFFS))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
String json_string;
|
|
DynamicJsonDocument jsonBuffer(1024);
|
|
DeserializationError error = deserializeJson(jsonBuffer, settingsFile);
|
|
serializeJson(jsonBuffer, json_string);
|
|
//Serial.println("Settings: " + (String)json_string + "\n");
|
|
//this->printJsonSettings(json_string);
|
|
|
|
this->json_settings_string = json_string;
|
|
|
|
return true;
|
|
}
|
|
|
|
template <typename T>
|
|
T Settings::loadSetting(String key) {}
|
|
|
|
// Get type int settings
|
|
template<>
|
|
int Settings::loadSetting<int>(String key) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
if (json["Settings"][i]["name"].as<String>() == key)
|
|
return json["Settings"][i]["value"];
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
// Get type string settings
|
|
template<>
|
|
String Settings::loadSetting<String>(String key) {
|
|
//return this->json_settings_string;
|
|
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
if (json["Settings"][i]["name"].as<String>() == key)
|
|
return json["Settings"][i]["value"];
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
// Get type bool settings
|
|
template<>
|
|
bool Settings::loadSetting<bool>(String key) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
if (json["Settings"][i]["name"].as<String>() == key)
|
|
return json["Settings"][i]["value"];
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//Get type uint8_t settings
|
|
template<>
|
|
uint8_t Settings::loadSetting<uint8_t>(String key) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
if (json["Settings"][i]["name"].as<String>() == key)
|
|
return json["Settings"][i]["value"];
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
template <typename T>
|
|
T Settings::saveSetting(String key, bool value) {}
|
|
|
|
template<>
|
|
bool Settings::saveSetting<bool>(String key, bool value) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
String settings_string;
|
|
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
if (json["Settings"][i]["name"].as<String>() == key) {
|
|
json["Settings"][i]["value"] = value;
|
|
|
|
Serial.println("Saving setting...");
|
|
|
|
File settingsFile = SPIFFS.open("/settings.json", FILE_WRITE);
|
|
|
|
if (!settingsFile) {
|
|
Serial.println(F("Failed to create settings file"));
|
|
return false;
|
|
}
|
|
|
|
if (serializeJson(json, settingsFile) == 0) {
|
|
Serial.println(F("Failed to write to file"));
|
|
}
|
|
if (serializeJson(json, settings_string) == 0) {
|
|
Serial.println(F("Failed to write to string"));
|
|
}
|
|
|
|
// Close the file
|
|
settingsFile.close();
|
|
|
|
this->json_settings_string = settings_string;
|
|
|
|
this->printJsonSettings(settings_string);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool Settings::toggleSetting(String key) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
if (json["Settings"][i]["name"].as<String>() == key) {
|
|
if (json["Settings"][i]["value"]) {
|
|
saveSetting<bool>(key, false);
|
|
Serial.println("Setting value to false");
|
|
return false;
|
|
}
|
|
else {
|
|
saveSetting<bool>(key, true);
|
|
Serial.println("Setting value to true");
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
String Settings::setting_index_to_name(int i) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
return json["Settings"][i]["name"];
|
|
}
|
|
|
|
int Settings::getNumberSettings() {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
return json["Settings"].size();
|
|
}
|
|
|
|
String Settings::getSettingType(String key) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, this->json_settings_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
if (json["Settings"][i]["name"].as<String>() == key)
|
|
return json["Settings"][i]["type"];
|
|
}
|
|
}
|
|
|
|
void Settings::printJsonSettings(String json_string) {
|
|
DynamicJsonDocument json(1024); // ArduinoJson v6
|
|
|
|
if (deserializeJson(json, json_string)) {
|
|
Serial.println("\nCould not parse json");
|
|
}
|
|
|
|
Serial.println("Settings\n----------------------------------------------");
|
|
for (int i = 0; i < json["Settings"].size(); i++) {
|
|
Serial.println("Name: " + json["Settings"][i]["name"].as<String>());
|
|
Serial.println("Type: " + json["Settings"][i]["type"].as<String>());
|
|
Serial.println("Value: " + json["Settings"][i]["value"].as<String>());
|
|
Serial.println("----------------------------------------------");
|
|
}
|
|
}
|
|
|
|
bool Settings::createDefaultSettings(fs::FS &fs) {
|
|
Serial.println(F("Creating default settings file: settings.json"));
|
|
|
|
File settingsFile = fs.open("/settings.json", FILE_WRITE);
|
|
|
|
if (!settingsFile) {
|
|
Serial.println(F("Failed to create settings file"));
|
|
return false;
|
|
}
|
|
|
|
DynamicJsonDocument jsonBuffer(1024);
|
|
String settings_string;
|
|
|
|
//jsonBuffer["Settings"][0]["name"] = "Channel";
|
|
//jsonBuffer["Settings"][0]["type"] = "uint8_t";
|
|
//jsonBuffer["Settings"][0]["value"] = 11;
|
|
//jsonBuffer["Settings"][0]["range"]["min"] = 1;
|
|
//jsonBuffer["Settings"][0]["range"]["max"] = 14;
|
|
|
|
//jsonBuffer["Settings"][1]["name"] = "Channel Hop Delay";
|
|
//jsonBuffer["Settings"][1]["type"] = "int";
|
|
//jsonBuffer["Settings"][1]["value"] = 1;
|
|
//jsonBuffer["Settings"][1]["range"]["min"] = 1;
|
|
//jsonBuffer["Settings"][1]["range"]["max"] = 10;
|
|
|
|
jsonBuffer["Settings"][0]["name"] = "ForcePMKID";
|
|
jsonBuffer["Settings"][0]["type"] = "bool";
|
|
jsonBuffer["Settings"][0]["value"] = true;
|
|
jsonBuffer["Settings"][0]["range"]["min"] = false;
|
|
jsonBuffer["Settings"][0]["range"]["max"] = true;
|
|
|
|
jsonBuffer["Settings"][1]["name"] = "ForceProbe";
|
|
jsonBuffer["Settings"][1]["type"] = "bool";
|
|
jsonBuffer["Settings"][1]["value"] = true;
|
|
jsonBuffer["Settings"][1]["range"]["min"] = false;
|
|
jsonBuffer["Settings"][1]["range"]["max"] = true;
|
|
|
|
jsonBuffer["Settings"][2]["name"] = "SavePCAP";
|
|
jsonBuffer["Settings"][2]["type"] = "bool";
|
|
jsonBuffer["Settings"][2]["value"] = true;
|
|
jsonBuffer["Settings"][2]["range"]["min"] = false;
|
|
jsonBuffer["Settings"][2]["range"]["max"] = true;
|
|
|
|
//jsonBuffer.printTo(settingsFile);
|
|
if (serializeJson(jsonBuffer, settingsFile) == 0) {
|
|
Serial.println(F("Failed to write to file"));
|
|
}
|
|
if (serializeJson(jsonBuffer, settings_string) == 0) {
|
|
Serial.println(F("Failed to write to string"));
|
|
}
|
|
|
|
// Close the file
|
|
settingsFile.close();
|
|
|
|
this->json_settings_string = settings_string;
|
|
|
|
this->printJsonSettings(settings_string);
|
|
|
|
return true;
|
|
}
|
|
|
|
void Settings::main(uint32_t currentTime) {
|
|
|
|
}
|