From 5c82e9a4551edc47d4f4cb6b5ead4c5e5d69c233 Mon Sep 17 00:00:00 2001 From: TD-er Date: Wed, 20 May 2026 13:48:36 +0200 Subject: [PATCH] [WiFi] Fix using all set WiFi credentials Problem was, the index was incremented extra when a valid value was found, thus skipping every odd one when multiple credentials were set. --- .../net/Helpers/WiFi_AP_CandidatesList.cpp | 4 ++-- src/src/DataStructs/SecurityStruct.cpp | 9 +++++---- .../SecurityStruct_deviceSpecific.cpp | 17 ++++++----------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/ESPEasy/net/Helpers/WiFi_AP_CandidatesList.cpp b/src/ESPEasy/net/Helpers/WiFi_AP_CandidatesList.cpp index 7a12c4bab..8812b4abc 100644 --- a/src/ESPEasy/net/Helpers/WiFi_AP_CandidatesList.cpp +++ b/src/ESPEasy/net/Helpers/WiFi_AP_CandidatesList.cpp @@ -9,6 +9,7 @@ #include "../../../src/Globals/SecuritySettings.h" #include "../../../src/Globals/Settings.h" #include "../../../src/Helpers/StringConverter.h" +#include "../wifi/ESPEasyWifi.h" #if defined(ESP8266) # include @@ -85,7 +86,6 @@ void WiFi_AP_CandidatesList::load_knownCredentials() { } } known.push_back(tmp_known); - ++index; } } } @@ -591,7 +591,7 @@ bool WiFi_AP_CandidatesList::get_SSID_key(uint8_t index, String& ssid, String& k # endif // if FEATURE_STORE_CREDENTIALS_SEPARATE_FILE // Spaces are allowed in both SSID and pass phrase, so make sure to not trim the ssid and key. - return !ssid.isEmpty() && key.length() >= 8; + return ESPEasy::net::wifi::validWiFiCredentials(ssid, key); } bool WiFi_AP_CandidatesList::hasWiFiCredentials() diff --git a/src/src/DataStructs/SecurityStruct.cpp b/src/src/DataStructs/SecurityStruct.cpp index f7ea4ae52..5d7ed1451 100644 --- a/src/src/DataStructs/SecurityStruct.cpp +++ b/src/src/DataStructs/SecurityStruct.cpp @@ -104,12 +104,13 @@ bool SecurityStruct::hasWiFiCredentials(SecurityStruct::WiFiCredentialsSlot slot String SecurityStruct::getSSID(WiFiCredentialsSlot slot) const { - if (hasWiFiCredentials(slot)) { + String res; if (slot == SecurityStruct::WiFiCredentialsSlot::first) - return WifiSSID; + res = WifiSSID; if (slot == SecurityStruct::WiFiCredentialsSlot::second) - return WifiSSID2; - } + res = WifiSSID2; + if (ESPEasy::net::wifi::validWiFiSSID(res)) + return res; return EMPTY_STRING; } diff --git a/src/src/DataStructs/SecurityStruct_deviceSpecific.cpp b/src/src/DataStructs/SecurityStruct_deviceSpecific.cpp index b46155e8c..6fbbf1ad1 100644 --- a/src/src/DataStructs/SecurityStruct_deviceSpecific.cpp +++ b/src/src/DataStructs/SecurityStruct_deviceSpecific.cpp @@ -84,23 +84,18 @@ bool SecurityStruct_deviceSpecific::hasWiFiCredentials() const bool SecurityStruct_deviceSpecific::hasWiFiCredentials(uint8_t index) const { - if (index >= MAX_EXTRA_WIFI_CREDENTIALS_SEPARATE_FILE) { return false; } - String ssid, pass; - - if (!_kvs.getValue(createKey(KeyType::WiFi_SSID, index), ssid, KVS_StorageType::Enum::string_type) || - !_kvs.getValue(createKey(KeyType::WiFi_Password, index), pass, KVS_StorageType::Enum::string_type)) { - return false; - } - return ESPEasy::net::wifi::validWiFiCredentials(ssid, pass); + String ssid, passwd; + return getWiFiCredentials(index, ssid, passwd); } bool SecurityStruct_deviceSpecific::getWiFiCredentials(uint8_t index, String& ssid, String& passwd) const { - return - index < MAX_EXTRA_WIFI_CREDENTIALS_SEPARATE_FILE && - getCredentials(KeyType::WiFi_SSID, KeyType::WiFi_Password, index, ssid, passwd); + if (index >= MAX_EXTRA_WIFI_CREDENTIALS_SEPARATE_FILE) { return false; } + + if (!getCredentials(KeyType::WiFi_SSID, KeyType::WiFi_Password, index, ssid, passwd)) { return false; } + return ESPEasy::net::wifi::validWiFiCredentials(ssid, passwd); } void SecurityStruct_deviceSpecific::setWiFiCredentials(