diff --git a/src/core/config.cpp b/src/core/config.cpp index ab133884e4..f24e1695ed 100644 --- a/src/core/config.cpp +++ b/src/core/config.cpp @@ -666,6 +666,8 @@ String BruceConfig::getWifiPassword(const String &ssid) const { return ""; } +bool BruceConfig::hasWifiCredential(const String &ssid) const { return wifi.find(ssid) != wifi.end(); } + void BruceConfig::addEvilWifiName(String value) { evilWifiNames.insert(value); saveFile(); diff --git a/src/core/config.h b/src/core/config.h index bd3cde1aab..1fe62b1f90 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -164,6 +164,7 @@ class BruceConfig : public BruceTheme { void addQrCodeEntry(const String &menuName, const String &content); void removeQrCodeEntry(const String &menuName); String getWifiPassword(const String &ssid) const; + bool hasWifiCredential(const String &ssid) const; void addEvilWifiName(String value); void removeEvilWifiName(String value); void setEvilEndpointCreds(String value); diff --git a/src/core/wifi/wifi_common.cpp b/src/core/wifi/wifi_common.cpp index 65c921ca73..8bdec415f4 100644 --- a/src/core/wifi/wifi_common.cpp +++ b/src/core/wifi/wifi_common.cpp @@ -312,7 +312,10 @@ void wifiConnectTask(void *pvParameters) { for (int i = 0; i < nets; i++) { ssid = WiFi.SSID(i); pwd = bruceConfig.getWifiPassword(ssid); - if (pwd == "") continue; + // An empty password only means "unknown network" for secured APs: known open + // networks are stored with an empty password and must be joined without one. + bool knownOpenNet = WiFi.encryptionType(i) == WIFI_AUTH_OPEN && bruceConfig.hasWifiCredential(ssid); + if (pwd == "" && !knownOpenNet) continue; WiFi.begin(ssid, pwd); for (int i = 0; i < 50; i++) { diff --git a/src/core/wifi/wifi_common.h b/src/core/wifi/wifi_common.h index 2b7736d775..35c48fbfae 100644 --- a/src/core/wifi/wifi_common.h +++ b/src/core/wifi/wifi_common.h @@ -50,7 +50,7 @@ esp_err_t wifiRawTx(wifi_interface_t ifx, const void *frame, int len, uint8_t re /** * @brief tries to connect to min(found_networks, maxSearch) networks * using stored passwords - * @TODO fix: rn it skips open networks due to password == "" check + * @note known open networks are stored with an empty password and joined without one */ void wifiConnectTask(void *pvParameters);