Fixed stupid SSID bug

This commit is contained in:
Stefan Kremser
2018-11-21 16:49:13 +01:00
parent 7548bc591c
commit 38146c9c77

View File

@@ -1,316 +1,314 @@
#include "SSIDs.h" #include "SSIDs.h"
SSIDs::SSIDs() { SSIDs::SSIDs() {
list = new SimpleList<SSID>; list = new SimpleList<SSID>;
} }
void SSIDs::load() { void SSIDs::load() {
internal_removeAll(); internal_removeAll();
DynamicJsonBuffer jsonBuffer(4000); DynamicJsonBuffer jsonBuffer(4000);
checkFile(FILE_PATH, str(SS_JSON_DEFAULT)); checkFile(FILE_PATH, str(SS_JSON_DEFAULT));
JsonObject& obj = parseJSONFile(FILE_PATH, jsonBuffer); JsonObject& obj = parseJSONFile(FILE_PATH, jsonBuffer);
JsonArray & arr = obj.get<JsonArray>(str(SS_JSON_SSIDS)); JsonArray & arr = obj.get<JsonArray>(str(SS_JSON_SSIDS));
for (uint32_t i = 0; i < arr.size() && i < SSID_LIST_SIZE; i++) { for (uint32_t i = 0; i < arr.size() && i < SSID_LIST_SIZE; i++) {
JsonArray& tmpArray = arr.get<JsonVariant>(i); JsonArray& tmpArray = arr.get<JsonVariant>(i);
internal_add(tmpArray.get<String>(0), tmpArray.get<bool>(1), tmpArray.get<int>(2)); internal_add(tmpArray.get<String>(0), tmpArray.get<bool>(1), tmpArray.get<int>(2));
} }
prnt(SS_LOADED); prnt(SS_LOADED);
prntln(FILE_PATH); prntln(FILE_PATH);
} }
void SSIDs::load(String filepath) { void SSIDs::load(String filepath) {
String tmp = FILE_PATH; String tmp = FILE_PATH;
FILE_PATH = filepath; FILE_PATH = filepath;
load(); load();
FILE_PATH = tmp; FILE_PATH = tmp;
} }
void SSIDs::removeAll() { void SSIDs::removeAll() {
internal_removeAll(); internal_removeAll();
prntln(SS_CLEARED); prntln(SS_CLEARED);
changed = true; changed = true;
} }
void SSIDs::save(bool force) { void SSIDs::save(bool force) {
if (!force && !changed) return; if (!force && !changed) return;
String buf = String(); // create buffer String buf = String(); // create buffer
buf += String(OPEN_CURLY_BRACKET) + String(DOUBLEQUOTES) + str(SS_JSON_RANDOM) + String(DOUBLEQUOTES) + String( buf += String(OPEN_CURLY_BRACKET) + String(DOUBLEQUOTES) + str(SS_JSON_RANDOM) + String(DOUBLEQUOTES) + String(
DOUBLEPOINT) + b2s(randomMode) + String(COMMA); // {"random":false, DOUBLEPOINT) + b2s(randomMode) + String(COMMA); // {"random":false,
buf += String(DOUBLEQUOTES) + str(SS_JSON_SSIDS) + String(DOUBLEQUOTES) + String(DOUBLEPOINT) + buf += String(DOUBLEQUOTES) + str(SS_JSON_SSIDS) + String(DOUBLEQUOTES) + String(DOUBLEPOINT) +
String(OPEN_BRACKET); // "ssids":[ String(OPEN_BRACKET); // "ssids":[
if (!writeFile(FILE_PATH, buf)) { if (!writeFile(FILE_PATH, buf)) {
prnt(F_ERROR_SAVING); prnt(F_ERROR_SAVING);
prntln(FILE_PATH); prntln(FILE_PATH);
return; return;
} }
buf = String(); // clear buffer buf = String(); // clear buffer
String name; String name;
int c = count(); int c = count();
for (int i = 0; i < c; i++) { for (int i = 0; i < c; i++) {
name = escape(getName(i)); name = escape(getName(i));
buf += String(OPEN_BRACKET) + String(DOUBLEQUOTES) + name + String(DOUBLEQUOTES) + String(COMMA); // ["name", buf += String(OPEN_BRACKET) + String(DOUBLEQUOTES) + name + String(DOUBLEQUOTES) + String(COMMA); // ["name",
buf += b2s(getWPA2(i)) + String(COMMA); // false, buf += b2s(getWPA2(i)) + String(COMMA); // false,
buf += String(getLen(i)) + String(CLOSE_BRACKET); // 12] buf += String(getLen(i)) + String(CLOSE_BRACKET); // 12]
if (i < c - 1) buf += COMMA; // , if (i < c - 1) buf += COMMA; // ,
if (buf.length() >= 1024) { if (buf.length() >= 1024) {
if (!appendFile(FILE_PATH, buf)) { if (!appendFile(FILE_PATH, buf)) {
prnt(F_ERROR_SAVING); prnt(F_ERROR_SAVING);
prntln(FILE_PATH); prntln(FILE_PATH);
return; return;
} }
buf = String(); // clear buffer buf = String(); // clear buffer
} }
} }
buf += String(CLOSE_BRACKET) + String(CLOSE_CURLY_BRACKET); // ]} buf += String(CLOSE_BRACKET) + String(CLOSE_CURLY_BRACKET); // ]}
if (!appendFile(FILE_PATH, buf)) { if (!appendFile(FILE_PATH, buf)) {
prnt(F_ERROR_SAVING); prnt(F_ERROR_SAVING);
prntln(FILE_PATH); prntln(FILE_PATH);
return; return;
} }
prnt(SS_SAVED_IN); prnt(SS_SAVED_IN);
prntln(FILE_PATH); prntln(FILE_PATH);
changed = false; changed = false;
} }
void SSIDs::save(bool force, String filepath) { void SSIDs::save(bool force, String filepath) {
String tmp = FILE_PATH; String tmp = FILE_PATH;
FILE_PATH = filepath; FILE_PATH = filepath;
save(force); save(force);
FILE_PATH = tmp; FILE_PATH = tmp;
} }
void SSIDs::update() { void SSIDs::update() {
if (randomMode) { if (randomMode) {
if (currentTime - randomTime > randomInterval * 1000) { if (currentTime - randomTime > randomInterval * 1000) {
prntln(SS_RANDOM_INFO); prntln(SS_RANDOM_INFO);
for (int i = 0; i < SSID_LIST_SIZE; i++) { for (int i = 0; i < SSID_LIST_SIZE; i++) {
SSID newSSID; SSID newSSID;
if (check(i)) newSSID = list->get(i); if (check(i)) newSSID = list->get(i);
newSSID.name = String(); newSSID.name = String();
newSSID.len = 32; newSSID.len = 32;
for (int i = 0; i < 32; i++) newSSID.name += char(random(32, 127)); for (int i = 0; i < 32; i++) newSSID.name += char(random(32, 127));
newSSID.wpa2 = random(0, 2); newSSID.wpa2 = random(0, 2);
if (check(i)) list->replace(i, newSSID); if (check(i)) list->replace(i, newSSID);
else list->add(newSSID); else list->add(newSSID);
} }
randomTime = currentTime; randomTime = currentTime;
changed = true; changed = true;
} }
} }
} }
String SSIDs::getName(int num) { String SSIDs::getName(int num) {
return check(num) ? list->get(num).name : String(); return check(num) ? list->get(num).name : String();
} }
bool SSIDs::getWPA2(int num) { bool SSIDs::getWPA2(int num) {
return check(num) ? list->get(num).wpa2 : false; return check(num) ? list->get(num).wpa2 : false;
} }
int SSIDs::getLen(int num) { int SSIDs::getLen(int num) {
return check(num) ? list->get(num).len : 0; return check(num) ? list->get(num).len : 0;
} }
void SSIDs::setWPA2(int num, bool wpa2) { void SSIDs::setWPA2(int num, bool wpa2) {
SSID newSSID = list->get(num); SSID newSSID = list->get(num);
newSSID.wpa2 = wpa2; newSSID.wpa2 = wpa2;
list->replace(num, newSSID); list->replace(num, newSSID);
} }
String SSIDs::getEncStr(int num) { String SSIDs::getEncStr(int num) {
if (getWPA2(num)) return "WPA2"; if (getWPA2(num)) return "WPA2";
else return "-"; else return "-";
} }
void SSIDs::remove(int num) { void SSIDs::remove(int num) {
if (!check(num)) return; if (!check(num)) return;
internal_remove(num); internal_remove(num);
prnt(SS_REMOVED); prnt(SS_REMOVED);
prntln(getName(num)); prntln(getName(num));
changed = true; changed = true;
} }
String SSIDs::randomize(String name) { String SSIDs::randomize(String name) {
int ssidlen = name.length(); int ssidlen = name.length();
if (ssidlen > 32) name = name.substring(0, 32); if (ssidlen > 32) name = name.substring(0, 32);
if (ssidlen < 32) { if (ssidlen < 32) {
for (int i = ssidlen; i < 32; i++) { for (int i = ssidlen; i < 32; i++) {
int rnd = random(3); int rnd = random(3);
if ((i < 29) && (rnd == 0)) { // ZERO WIDTH SPACE if ((i < 29) && (rnd == 0)) { // ZERO WIDTH SPACE
name += char(0xE2); name += char(0xE2);
name += char(0x80); name += char(0x80);
name += char(0x8B); name += char(0x8B);
i += 2; i += 2;
} else if ((i < 30) && (rnd == 1)) { // NO-BREAK SPACE } else if ((i < 30) && (rnd == 1)) { // NO-BREAK SPACE
name += char(0xC2); name += char(0xC2);
name += char(0xA0); name += char(0xA0);
i += 1; i += 1;
} else { } else {
name += char(0x20); // SPACE name += char(0x20); // SPACE
} }
} }
} }
return name; return name;
} }
void SSIDs::add(String name, bool wpa2, int clones, bool force) { void SSIDs::add(String name, bool wpa2, int clones, bool force) {
if (list->size() >= SSID_LIST_SIZE) { if (list->size() >= SSID_LIST_SIZE) {
if (force) { if (force) {
internal_remove(0); internal_remove(0);
} else { } else {
prntln(SS_ERROR_FULL); prntln(SS_ERROR_FULL);
return; return;
} }
} }
if (clones > SSID_LIST_SIZE) clones = SSID_LIST_SIZE; if (clones > SSID_LIST_SIZE) clones = SSID_LIST_SIZE;
for (int i = 0; i < clones; i++) { for (int i = 0; i < clones; i++) {
if (clones > 1) name = randomize(name); internal_add(clones > 1 ? randomize(name) : name, wpa2, name.length());
internal_add(name, wpa2, name.length()); if (list->size() > SSID_LIST_SIZE) internal_remove(0);
}
if (list->size() > SSID_LIST_SIZE) internal_remove(0);
} prnt(SS_ADDED);
prntln(name);
prnt(SS_ADDED); changed = true;
prntln(name); }
changed = true;
} void SSIDs::cloneSelected(bool force) {
if (accesspoints.selected() > 0) {
void SSIDs::cloneSelected(bool force) { int clones = SSID_LIST_SIZE;
if (accesspoints.selected() > 0) {
int clones = SSID_LIST_SIZE; if (!force) clones -= list->size();
clones /= accesspoints.selected();
if (!force) clones -= list->size();
clones /= accesspoints.selected(); int apCount = accesspoints.count();
int apCount = accesspoints.count(); for (int i = 0; i < apCount; i++) {
if (accesspoints.getSelected(i)) add(accesspoints.getSSID(i), accesspoints.getEnc(i) != 0, clones, force);
for (int i = 0; i < apCount; i++) { }
if (accesspoints.getSelected(i)) add(accesspoints.getSSID(i), accesspoints.getEnc(i) != 0, clones, force); }
} }
}
} bool SSIDs::getRandom() {
return randomMode;
bool SSIDs::getRandom() { }
return randomMode;
} void SSIDs::replace(int num, String name, bool wpa2) {
if (!check(num)) return;
void SSIDs::replace(int num, String name, bool wpa2) {
if (!check(num)) return; int len = name.length();
int len = name.length(); if (len > 32) len = 32;
SSID newSSID;
if (len > 32) len = 32; newSSID.name = randomize(name);
SSID newSSID; newSSID.wpa2 = wpa2;
newSSID.name = randomize(name); newSSID.len = (uint8_t)len;
newSSID.wpa2 = wpa2; list->replace(num, newSSID);
newSSID.len = (uint8_t)len;
list->replace(num, newSSID); prnt(SS_REPLACED);
prntln(name);
prnt(SS_REPLACED); changed = true;
prntln(name); }
changed = true;
} void SSIDs::print(int num) {
print(num, true, false);
void SSIDs::print(int num) { }
print(num, true, false);
} void SSIDs::print(int num, bool header, bool footer) {
if (!check(num)) return;
void SSIDs::print(int num, bool header, bool footer) {
if (!check(num)) return; if (header) {
prntln(SS_TABLE_HEADER);
if (header) { prntln(SS_TABLE_DIVIDER);
prntln(SS_TABLE_HEADER); }
prntln(SS_TABLE_DIVIDER);
} prnt(leftRight(String(), (String)num, 2));
prnt(leftRight(String(SPACE), getEncStr(num), 5));
prnt(leftRight(String(), (String)num, 2)); prntln(leftRight(String(SPACE) + getName(num), String(), 33));
prnt(leftRight(String(SPACE), getEncStr(num), 5));
prntln(leftRight(String(SPACE) + getName(num), String(), 33)); if (footer) prntln(SS_TABLE_DIVIDER);
}
if (footer) prntln(SS_TABLE_DIVIDER);
} void SSIDs::printAll() {
prntln(SS_HEADER);
void SSIDs::printAll() { int c = count();
prntln(SS_HEADER);
int c = count(); if (c == 0) prntln(SS_ERROR_EMPTY);
else
if (c == 0) prntln(SS_ERROR_EMPTY); for (int i = 0; i < c; i++) print(i, i == 0, i == c - 1);
else }
for (int i = 0; i < c; i++) print(i, i == 0, i == c - 1);
} int SSIDs::count() {
return list->size();
int SSIDs::count() { }
return list->size();
} bool SSIDs::check(int num) {
return num >= 0 && num < count();
bool SSIDs::check(int num) { }
return num >= 0 && num < count();
} void SSIDs::enableRandom(uint32_t randomInterval) {
randomMode = true;
void SSIDs::enableRandom(uint32_t randomInterval) { SSIDs::randomInterval = randomInterval;
randomMode = true; prntln(SS_RANDOM_ENABLED);
SSIDs::randomInterval = randomInterval; update();
prntln(SS_RANDOM_ENABLED); }
update();
} void SSIDs::disableRandom() {
randomMode = false;
void SSIDs::disableRandom() { internal_removeAll();
randomMode = false; prntln(SS_RANDOM_DISABLED);
internal_removeAll(); }
prntln(SS_RANDOM_DISABLED);
} void SSIDs::internal_add(String name, bool wpa2, int len) {
if (len > 32) {
void SSIDs::internal_add(String name, bool wpa2, int len) { name = name.substring(0, 32);
if (len > 32) { len = 32;
name = name.substring(0, 32); }
len = 32;
} name = fixUtf8(name);
name = fixUtf8(name); SSID newSSID;
newSSID.name = name;
SSID newSSID; newSSID.wpa2 = wpa2;
newSSID.name = name; newSSID.len = (uint8_t)len;
newSSID.wpa2 = wpa2;
newSSID.len = (uint8_t)len; list->add(newSSID);
}
list->add(newSSID);
} void SSIDs::internal_remove(int num) {
list->remove(num);
void SSIDs::internal_remove(int num) { }
list->remove(num);
} void SSIDs::internal_removeAll() {
list->clear();
void SSIDs::internal_removeAll() { }
list->clear();
}