Skip to content

Commit

Permalink
fix(web2): Added missing wifi password content check. [backport relea…
Browse files Browse the repository at this point in the history
…se-5.3.0] (#4658)

fix(web2): Added missing wifi password content check. (#4635)

* empty password is equivalent to the placeholder.

* Added check on security

* Empty password for wifi network configured for the first time are now rejected.

(cherry picked from commit 8502282)

Co-authored-by: Salvatore Coppola <[email protected]>
  • Loading branch information
github-actions[bot] and salvatore-coppola authored May 17, 2023
1 parent 3995058 commit 9323ea8
Showing 1 changed file with 87 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -426,25 +426,25 @@ private static List<GwtNetInterfaceConfig> privateFindNetInterfaceConfigurations
GwtWifiRadioMode gwtWifiRadioMode = null;
if (wifiConfig.getRadioMode() != null) {
switch (wifiConfig.getRadioMode()) {
case RADIO_MODE_80211a:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeA;
break;
case RADIO_MODE_80211b:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeB;
break;
case RADIO_MODE_80211g:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeBG;
break;
case RADIO_MODE_80211nHT20:
case RADIO_MODE_80211nHT40above:
case RADIO_MODE_80211nHT40below:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeBGN;
break;
case RADIO_MODE_80211_AC:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeANAC;
break;
default:
break;
case RADIO_MODE_80211a:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeA;
break;
case RADIO_MODE_80211b:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeB;
break;
case RADIO_MODE_80211g:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeBG;
break;
case RADIO_MODE_80211nHT20:
case RADIO_MODE_80211nHT40above:
case RADIO_MODE_80211nHT40below:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeBGN;
break;
case RADIO_MODE_80211_AC:
gwtWifiRadioMode = GwtWifiRadioMode.netWifiRadioModeANAC;
break;
default:
break;
}
}
if (gwtWifiRadioMode != null) {
Expand Down Expand Up @@ -892,7 +892,7 @@ public static ArrayList<GwtWifiHotspotEntry> findWifiHotspots(String interfaceNa
if (wifiHotspotInfoList != null) {
for (WifiHotspotInfo wifiHotspotInfo : wifiHotspotInfoList) {
String ssid = wifiHotspotInfo.getSsid();

if (wifiHotspotInfo.getChannel() <= systemService.getKuraWifiTopChannel() && ssid != null
&& !ssid.equals(wirelessSsid)) {
GwtWifiHotspotEntry gwtWifiHotspotEntry = new GwtWifiHotspotEntry();
Expand Down Expand Up @@ -1384,8 +1384,7 @@ private static void fillIp4AndDhcpProperties(GwtNetInterfaceConfig config, Map<S
}

private static void fillDnsServers(GwtNetInterfaceConfig config, Map<String, Object> properties,
String basePropName)
throws UnknownHostException {
String basePropName) throws UnknownHostException {
String regexp = "[\\s,;\\n\\t]+";
String dnsServerPropName = basePropName + "ip4.dnsServers";
List<String> dnsServers = Arrays.asList(config.getDnsServers().split(regexp));
Expand Down Expand Up @@ -1593,8 +1592,7 @@ private static WifiConfig getWifiConfig(GwtWifiConfig gwtWifiConfig) throws GwtK
}

private static void fillWifiProperties(GwtWifiConfig gwtWifiConfig, Map<String, Object> properties,
String basePropName,
String interfaceName) throws KuraException, GwtKuraException {
String basePropName, String interfaceName) throws KuraException, GwtKuraException {
StringBuilder wifiBasePropName = new StringBuilder(basePropName).append("wifi.");

String mode = gwtWifiConfig.getWirelessMode();
Expand Down Expand Up @@ -1667,13 +1665,25 @@ private static void fillWifiChannelsProperties(GwtWifiConfig gwtWifiConfig, Map<
}

private static void fillWifiPassphrase(GwtWifiConfig gwtWifiConfig, Map<String, Object> properties,
String wifiModeBasePropName, String interfaceName, String mode) throws GwtKuraException, KuraException {
String wifiModeBasePropName, String interfaceName, String mode) throws GwtKuraException {

GwtWifiSecurity security = gwtWifiConfig.getSecurityEnum();
String passKey = GwtSafeHtmlUtils.htmlUnescape(gwtWifiConfig.getPassword());
String wifiPassphrasePropName = wifiModeBasePropName + "passphrase";
if (passKey != null && passKey.equals(PASSWORD_PLACEHOLDER)) {
Optional<GwtWifiConfig> oldGwtWifiConfig = getOldGwtWifiConfig(interfaceName, mode);
oldGwtWifiConfig.ifPresent(config -> properties.put(wifiPassphrasePropName,
new Password(GwtSafeHtmlUtils.htmlUnescape(config.getPassword()))));

String wirelessSSID = gwtWifiConfig.getWirelessSsid();

if (isPlaceholder(passKey, security)) {
Optional<GwtWifiConfig> oldGwtWifiConfig = wirelessSSID == null ? getOldGwtWifiConfig(interfaceName, mode)
: getOldGwtWifiConfigBySSID(wirelessSSID, interfaceName, mode);

if (oldGwtWifiConfig.isPresent()) {
properties.put(wifiPassphrasePropName,
new Password(GwtSafeHtmlUtils.htmlUnescape(oldGwtWifiConfig.get().getPassword())));
} else {
throw new GwtKuraException(GwtKuraErrorCode.ILLEGAL_ARGUMENT);
}

} else if (passKey != null && mode.equals(GwtWifiWirelessMode.netWifiWirelessModeAccessPoint.name())) {
GwtServerUtil.validateUserPassword(passKey);
properties.put(wifiPassphrasePropName, new Password(passKey));
Expand All @@ -1682,6 +1692,35 @@ private static void fillWifiPassphrase(GwtWifiConfig gwtWifiConfig, Map<String,
}
}

private static boolean isPlaceholder(String passKey, GwtWifiSecurity security) {
return passKey != null && (passKey.equals(PASSWORD_PLACEHOLDER)
|| (security != GwtWifiSecurity.netWifiSecurityNONE && passKey.isEmpty()));
}

private static Optional<GwtWifiConfig> getOldGwtWifiConfigBySSID(String wirelessSSID, String interfaceName,
String mode) throws GwtKuraException {
Optional<GwtWifiConfig> config = Optional.empty();
List<GwtNetInterfaceConfig> result = privateFindNetInterfaceConfigurations(false);
for (GwtNetInterfaceConfig netConfig : result) {
if (netConfig instanceof GwtWifiNetInterfaceConfig
&& interfaceName.equals(((GwtWifiNetInterfaceConfig) netConfig).getName())) {
GwtWifiNetInterfaceConfig oldWifiConfig = (GwtWifiNetInterfaceConfig) netConfig;
GwtWifiConfig oldGwtWifiConfig;
if (mode.equals(GwtWifiWirelessMode.netWifiWirelessModeAccessPoint.name())) {
oldGwtWifiConfig = oldWifiConfig.getAccessPointWifiConfig();
} else {
oldGwtWifiConfig = oldWifiConfig.getStationWifiConfig();
}

if (oldGwtWifiConfig != null && oldGwtWifiConfig.getWirelessSsid().equals(wirelessSSID)) {
config = Optional.of(oldGwtWifiConfig);
break;
}
}
}
return config;
}

private static Optional<GwtWifiConfig> getOldGwtWifiConfig(String interfaceName, String mode)
throws GwtKuraException {
Optional<GwtWifiConfig> config = Optional.empty();
Expand All @@ -1696,6 +1735,7 @@ private static Optional<GwtWifiConfig> getOldGwtWifiConfig(String interfaceName,
} else {
oldGwtWifiConfig = oldWifiConfig.getStationWifiConfig();
}

if (oldGwtWifiConfig != null) {
config = Optional.of(oldGwtWifiConfig);
break;
Expand Down Expand Up @@ -1766,24 +1806,24 @@ private static WifiRadioMode getWifiConfigRadioMode(GwtWifiRadioMode radioMode)
WifiRadioMode wifiRadioMode;

switch (radioMode) {
case netWifiRadioModeA:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211a;
break;
case netWifiRadioModeB:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211b;
break;
case netWifiRadioModeBG:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211g;
break;
case netWifiRadioModeBGN:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211nHT20;
break;
case netWifiRadioModeANAC:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211_AC;
break;

default:
throw new GwtKuraException(GwtKuraErrorCode.ILLEGAL_ARGUMENT);
case netWifiRadioModeA:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211a;
break;
case netWifiRadioModeB:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211b;
break;
case netWifiRadioModeBG:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211g;
break;
case netWifiRadioModeBGN:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211nHT20;
break;
case netWifiRadioModeANAC:
wifiRadioMode = WifiRadioMode.RADIO_MODE_80211_AC;
break;

default:
throw new GwtKuraException(GwtKuraErrorCode.ILLEGAL_ARGUMENT);
}

return wifiRadioMode;
Expand Down

0 comments on commit 9323ea8

Please sign in to comment.