Skip to content

Commit 5dd63a9

Browse files
committed
Move WPA enterprise behind a feature flag.
1 parent b3b8065 commit 5dd63a9

8 files changed

Lines changed: 79 additions & 46 deletions

File tree

wled00/cfg.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
114114
multiWiFi[n].staticIP = nIP;
115115
multiWiFi[n].staticGW = nGW;
116116
multiWiFi[n].staticSN = nSN;
117+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
117118
byte encType = WIFI_ENCRYPTION_TYPE_PSK;
118119
char anonIdent[65] = "";
119120
char ident[65] = "";
@@ -123,6 +124,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
123124
multiWiFi[n].encryptionType = encType;
124125
strlcpy(multiWiFi[n].enterpriseAnonIdentity, anonIdent, 65);
125126
strlcpy(multiWiFi[n].enterpriseIdentity, ident, 65);
127+
#endif
126128
if (++n >= WLED_MAX_WIFI_COUNT) break;
127129
}
128130
}
@@ -879,11 +881,13 @@ void serializeConfig(JsonObject root) {
879881
wifi_gw.add(multiWiFi[n].staticGW[i]);
880882
wifi_sn.add(multiWiFi[n].staticSN[i]);
881883
}
884+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
882885
wifi[F("enc_type")] = multiWiFi[n].encryptionType;
883886
if (multiWiFi[n].encryptionType == WIFI_ENCRYPTION_TYPE_ENTERPRISE) {
884887
wifi[F("e_anon_ident")] = multiWiFi[n].enterpriseAnonIdentity;
885888
wifi[F("e_ident")] = multiWiFi[n].enterpriseIdentity;
886889
}
890+
#endif
887891
}
888892

889893
JsonArray dns = nw.createNestedArray(F("dns"));

wled00/const.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,10 @@ static_assert(WLED_MAX_BUSSES <= 32, "WLED_MAX_BUSSES exceeds hard limit");
209209
#define USERMOD_ID_USER_FX 58 //Usermod "user_fx"
210210

211211
//Wifi encryption type
212-
#define WIFI_ENCRYPTION_TYPE_PSK 0 //None/WPA/WPA2
213-
#define WIFI_ENCRYPTION_TYPE_ENTERPRISE 1 //WPA/WPA2-Enterprise
212+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
213+
#define WIFI_ENCRYPTION_TYPE_PSK 0 //None/WPA/WPA2
214+
#define WIFI_ENCRYPTION_TYPE_ENTERPRISE 1 //WPA/WPA2-Enterprise
215+
#endif
214216

215217
//Access point behavior
216218
#define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot

wled00/data/settings_wifi.htm

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,20 +118,24 @@
118118
gId("wifi_add").style.display = (i<maxNetworks) ? "inline":"none";
119119
gId("wifi_rem").style.display = (i>1) ? "inline":"none";
120120
}
121-
function addWiFi(type=0,ssid="",anon="",ident="",pass="",bssid="",ip=0,gw=0,sn=0x00ffffff) { // little endian
121+
function addWiFi(ssid="",pass="",bssid="",ip=0,gw=0,sn=0x00ffffff,type=-1,anon="",ident="") { // little endian
122122
var i = gId("wifi_entries").childNodes.length;
123123
if (i >= maxNetworks) return;
124-
var b = `<div id="net${i}"><hr class="sml">
125-
Network name (SSID${i==0?", empty to not connect":""}):<br><input type="text" id="CS${i}" name="CS${i}" maxlength="32" value="${ssid}" ${i>0?"required":""}><br>
126-
WiFi encryption type:<br>
124+
var encryptionTypeField = "";
125+
if (type >=0 && type < 2) {
126+
encryptionTypeField = `WiFi encryption type:<br>
127127
<select id="ET${i}" name="ET${i}" onchange="E(${i})">
128128
<option value="0"${(type==0) ? ' selected':''}>None/WPA/WPA2</option>
129129
<option value="1"${(type==1) ? ' selected':''}>WPA/WPA2-Enterprise</option>
130130
</select><br>
131131
<div id="IDS${i}" style="${(type==0) ? 'display:none;':''}">
132132
Anonymous identity:<br><input type="text" id="EA${i}" name="EA${i}" maxlength="64" value="${anon}"><br>
133133
Identity:<br><input type="text" id="EI${i}" name="EI${i}" maxlength="64" value="${ident}"><br>
134-
</div>
134+
</div>`;
135+
}
136+
var b = `<div id="net${i}"><hr class="sml">
137+
Network name (SSID${i==0?", empty to not connect":""}):<br><input type="text" id="CS${i}" name="CS${i}" maxlength="32" value="${ssid}" ${i>0?"required":""}><br>
138+
${encryptionTypeField}
135139
Network password:<br><input type="password" name="PW${i}" maxlength="64" value="${pass}"><br>
136140
BSSID (optional):<br><input type="text" id="BS${i}" name="BS${i}" maxlength="12" value="${bssid}"><br>
137141
Static IP (leave at 0.0.0.0 for DHCP)${i==0?"<br>Also used by Ethernet":""}:<br>

wled00/fcn_declare.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,31 @@ bool getJsonValue(const JsonVariant& element, DestType& destination, const Defau
5858

5959
typedef struct WiFiConfig {
6060
char clientSSID[33];
61-
byte encryptionType;
6261
char clientPass[65];
6362
uint8_t bssid[6];
6463
IPAddress staticIP;
6564
IPAddress staticGW;
6665
IPAddress staticSN;
66+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
67+
byte encryptionType;
6768
char enterpriseAnonIdentity[65];
6869
char enterpriseIdentity[65];
6970
WiFiConfig(const char *ssid="", const char *pass="", uint32_t ip=0, uint32_t gw=0, uint32_t subnet=0x00FFFFFF // little endian
7071
, byte enc_type=WIFI_ENCRYPTION_TYPE_PSK, const char *ent_anon="", const char *ent_iden="")
71-
: encryptionType(enc_type)
72-
, staticIP(ip)
72+
#else
73+
WiFiConfig(const char *ssid="", const char *pass="", uint32_t ip=0, uint32_t gw=0, uint32_t subnet=0x00FFFFFF) // little endian
74+
#endif
75+
: staticIP(ip)
7376
, staticGW(gw)
7477
, staticSN(subnet)
7578
{
7679
strncpy(clientSSID, ssid, 32); clientSSID[32] = 0;
7780
strncpy(clientPass, pass, 64); clientPass[64] = 0;
81+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
82+
encryptionType = enc_type;
7883
strncpy(enterpriseAnonIdentity, ent_anon, 64); enterpriseAnonIdentity[64] = 0;
7984
strncpy(enterpriseIdentity, ent_iden, 64); enterpriseIdentity[64] = 0;
85+
#endif
8086
memset(bssid, 0, sizeof(bssid));
8187
}
8288
} wifi_config;

wled00/set.cpp

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,44 +21,26 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
2121
{
2222
unsigned cnt = 0;
2323
for (size_t n = 0; n < WLED_MAX_WIFI_COUNT; n++) {
24-
char et[4] = "ET"; et[2] = 48+n; et[3] = 0; //WiFi encryption type
2524
char cs[4] = "CS"; cs[2] = 48+n; cs[3] = 0; //client SSID
26-
char ea[4] = "EA"; ea[2] = 48+n; ea[3] = 0; //enterprise anonymous identity
27-
char ei[4] = "EI"; ei[2] = 48+n; ei[3] = 0; //enterprise identity
2825
char pw[4] = "PW"; pw[2] = 48+n; pw[3] = 0; //client password
2926
char bs[4] = "BS"; bs[2] = 48+n; bs[3] = 0; //BSSID
3027
char ip[5] = "IP"; ip[2] = 48+n; ip[4] = 0; //IP address
3128
char gw[5] = "GW"; gw[2] = 48+n; gw[4] = 0; //GW address
3229
char sn[5] = "SN"; sn[2] = 48+n; sn[4] = 0; //subnet mask
30+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
31+
char et[4] = "ET"; et[2] = 48+n; et[3] = 0; //WiFi encryption type
32+
char ea[4] = "EA"; ea[2] = 48+n; ea[3] = 0; //enterprise anonymous identity
33+
char ei[4] = "EI"; ei[2] = 48+n; ei[3] = 0; //enterprise identity
34+
#endif
3335
if (request->hasArg(cs)) {
3436
if (n >= multiWiFi.size()) multiWiFi.emplace_back(); // expand vector by one
35-
byte oldType = multiWiFi[n].encryptionType;
3637
char oldSSID[33]; strcpy(oldSSID, multiWiFi[n].clientSSID);
37-
char oldAnon[65]; strcpy(oldAnon, multiWiFi[n].enterpriseAnonIdentity);
38-
char oldIden[65]; strcpy(oldIden, multiWiFi[n].enterpriseIdentity);
3938
char oldPass[65]; strcpy(oldPass, multiWiFi[n].clientPass);
4039

41-
multiWiFi[n].encryptionType = request->arg(et).toInt();
42-
forceReconnect |= oldType != multiWiFi[n].encryptionType;
4340
strlcpy(multiWiFi[n].clientSSID, request->arg(cs).c_str(), 33);
4441
if (strlen(oldSSID) == 0 || strncmp(multiWiFi[n].clientSSID, oldSSID, 32) != 0) {
4542
forceReconnect = true;
4643
}
47-
if (multiWiFi[n].encryptionType == WIFI_ENCRYPTION_TYPE_PSK) {
48-
// PSK - Clear the anonymous identity and identity fields
49-
multiWiFi[n].enterpriseAnonIdentity[0] = '\0';
50-
multiWiFi[n].enterpriseIdentity[0] = '\0';
51-
} else {
52-
// WPA2-Enterprise
53-
strlcpy(multiWiFi[n].enterpriseAnonIdentity, request->arg(ea).c_str(), 65);
54-
strlcpy(multiWiFi[n].enterpriseIdentity, request->arg(ei).c_str(), 65);
55-
}
56-
if (strncmp(multiWiFi[n].enterpriseAnonIdentity, oldAnon, 64) != 0) {
57-
forceReconnect = true;
58-
}
59-
if (strncmp(multiWiFi[n].enterpriseIdentity, oldIden, 64) != 0) {
60-
forceReconnect = true;
61-
}
6244
if (!isAsterisksOnly(request->arg(pw).c_str(), 65)) {
6345
strlcpy(multiWiFi[n].clientPass, request->arg(pw).c_str(), 65);
6446
forceReconnect = true;
@@ -72,6 +54,34 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
7254
multiWiFi[n].staticGW[i] = request->arg(gw).toInt();
7355
multiWiFi[n].staticSN[i] = request->arg(sn).toInt();
7456
}
57+
58+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
59+
byte oldType = multiWiFi[n].encryptionType;
60+
char oldAnon[65]; strcpy(oldAnon, multiWiFi[n].enterpriseAnonIdentity);
61+
char oldIden[65]; strcpy(oldIden, multiWiFi[n].enterpriseIdentity);
62+
if (request->hasArg(et) && request->hasArg(ea) && request->hasArg(ei)) {
63+
multiWiFi[n].encryptionType = request->arg(et).toInt();
64+
strlcpy(multiWiFi[n].enterpriseAnonIdentity, request->arg(ea).c_str(), 65);
65+
strlcpy(multiWiFi[n].enterpriseIdentity, request->arg(ei).c_str(), 65);
66+
} else {
67+
// No enterprise settings provided, default to PSK
68+
multiWiFi[n].encryptionType = WIFI_ENCRYPTION_TYPE_PSK;
69+
}
70+
71+
if (multiWiFi[n].encryptionType == WIFI_ENCRYPTION_TYPE_PSK) {
72+
// PSK - Clear the anonymous identity and identity fields
73+
multiWiFi[n].enterpriseAnonIdentity[0] = '\0';
74+
multiWiFi[n].enterpriseIdentity[0] = '\0';
75+
}
76+
forceReconnect |= oldType != multiWiFi[n].encryptionType;
77+
if (strncmp(multiWiFi[n].enterpriseAnonIdentity, oldAnon, 64) != 0) {
78+
forceReconnect = true;
79+
}
80+
if (strncmp(multiWiFi[n].enterpriseIdentity, oldIden, 64) != 0) {
81+
forceReconnect = true;
82+
}
83+
#endif
84+
7585
cnt++;
7686
}
7787
}

wled00/wled.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -689,9 +689,10 @@ void WLED::initConnection()
689689
// convert the "serverDescription" into a valid DNS hostname (alphanumeric)
690690
char hostname[25];
691691
prepareHostname(hostname);
692+
693+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
692694
if (multiWiFi[selectedWiFi].encryptionType == WIFI_ENCRYPTION_TYPE_PSK) {
693695
DEBUG_PRINTLN(F("Using PSK"));
694-
#ifndef WLED_DISABLE_WPA_ENTERPRISE
695696
#ifdef ESP8266
696697
wifi_station_set_wpa2_enterprise_auth(0);
697698
wifi_station_clear_enterprise_ca_cert();
@@ -700,10 +701,8 @@ void WLED::initConnection()
700701
wifi_station_clear_enterprise_username();
701702
wifi_station_clear_enterprise_password();
702703
#endif
703-
#endif
704-
WiFi.begin(multiWiFi[selectedWiFi].clientSSID, multiWiFi[selectedWiFi].clientPass); // no harm if called multiple times
704+
WiFi.begin(multiWiFi[selectedWiFi].clientSSID, multiWiFi[selectedWiFi].clientPass);
705705
} else { // WIFI_ENCRYPTION_TYPE_ENTERPRISE
706-
#ifndef WLED_DISABLE_WPA_ENTERPRISE
707706
DEBUG_PRINTF_P(PSTR("Using WPA2_AUTH_PEAP (Anon: %s, Ident: %s)\n"), multiWiFi[selectedWiFi].enterpriseAnonIdentity, multiWiFi[selectedWiFi].enterpriseIdentity);
708707
#ifdef ESP8266
709708
struct station_config sta_conf;
@@ -718,13 +717,11 @@ void WLED::initConnection()
718717
wifi_station_connect();
719718
#else
720719
WiFi.begin(multiWiFi[selectedWiFi].clientSSID, WPA2_AUTH_PEAP, multiWiFi[selectedWiFi].enterpriseAnonIdentity, multiWiFi[selectedWiFi].enterpriseIdentity, multiWiFi[selectedWiFi].clientPass);
721-
#endif
722-
#else
723-
DEBUG_PRINTLN(F("WPA2_AUTH_PEAP is disabled by WLED_DISABLE_WPA_ENTERPRISE, connecting using PSK."));
724-
WiFi.begin(multiWiFi[selectedWiFi].clientSSID, multiWiFi[selectedWiFi].clientPass);
725720
#endif
726721
}
727-
722+
#else // WLED_ENABLE_WPA_ENTERPRISE
723+
WiFi.begin(multiWiFi[selectedWiFi].clientSSID, multiWiFi[selectedWiFi].clientPass); // no harm if called multiple times
724+
#endif // WLED_ENABLE_WPA_ENTERPRISE
728725

729726
#ifdef ARDUINO_ARCH_ESP32
730727
WiFi.setTxPower(wifi_power_t(txPower));

wled00/wled.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
#include <Arduino.h>
7878
#ifdef ESP8266
7979
#include <ESP8266WiFi.h>
80-
#ifndef WLED_DISABLE_WPA_ENTERPRISE
80+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
8181
#include "wpa2_enterprise.h"
8282
#endif
8383
#include <ESP8266mDNS.h>

wled00/xml.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,16 +198,26 @@ void getSettingsJS(byte subPage, Print& settingsScript)
198198
memset(fpass,'*',l);
199199
char bssid[13];
200200
fillMAC2Str(bssid, multiWiFi[n].bssid);
201-
settingsScript.printf_P(PSTR("addWiFi(\"%u\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",0x%X,0x%X,0x%X);"),
202-
multiWiFi[n].encryptionType,
201+
#ifdef WLED_ENABLE_WPA_ENTERPRISE
202+
settingsScript.printf_P(PSTR("addWiFi(\"%s\",\"%s\",\"%s\",0x%X,0x%X,0x%X,\"%u\",\"%s\",\"%s\");"),
203203
multiWiFi[n].clientSSID,
204+
fpass,
205+
bssid,
206+
(uint32_t) multiWiFi[n].staticIP, // explicit cast required as this is a struct
207+
(uint32_t) multiWiFi[n].staticGW,
208+
(uint32_t) multiWiFi[n].staticSN,
209+
multiWiFi[n].encryptionType,
204210
multiWiFi[n].enterpriseAnonIdentity,
205-
multiWiFi[n].enterpriseIdentity,
211+
multiWiFi[n].enterpriseIdentity);
212+
#else
213+
settingsScript.printf_P(PSTR("addWiFi(\"%s\",\"%s\",\"%s\",0x%X,0x%X,0x%X);"),
214+
multiWiFi[n].clientSSID,
206215
fpass,
207216
bssid,
208217
(uint32_t) multiWiFi[n].staticIP, // explicit cast required as this is a struct
209218
(uint32_t) multiWiFi[n].staticGW,
210219
(uint32_t) multiWiFi[n].staticSN);
220+
#endif
211221
}
212222

213223
printSetFormValue(settingsScript,PSTR("D0"),dnsAddress[0]);

0 commit comments

Comments
 (0)