From 49d90b6457f73cda4e2031b0e5e7661cab577fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Kie=C3=9F?= Date: Sun, 29 Oct 2017 21:40:53 +0100 Subject: [PATCH] Implement support for WPA2 Enterprise (EAP) (#865) --- .../client/android/wifi/NetworkType.java | 5 +- .../android/wifi/WifiConfigManager.java | 65 +++++++++++++++++++ .../zxing/client/result/WifiParsedResult.java | 28 ++++++++ .../zxing/client/result/WifiResultParser.java | 14 +++- 4 files changed, 110 insertions(+), 2 deletions(-) diff --git a/android/src/com/google/zxing/client/android/wifi/NetworkType.java b/android/src/com/google/zxing/client/android/wifi/NetworkType.java index 18a9199a2..6a1a16daa 100644 --- a/android/src/com/google/zxing/client/android/wifi/NetworkType.java +++ b/android/src/com/google/zxing/client/android/wifi/NetworkType.java @@ -20,7 +20,8 @@ enum NetworkType { WEP, WPA, - NO_PASSWORD; + NO_PASSWORD, + WPA2_EAP; static NetworkType forIntentValue(String networkTypeString) { if (networkTypeString == null) { @@ -30,6 +31,8 @@ enum NetworkType { case "WPA": case "WPA2": return WPA; + case "WPA2-EAP": + return WPA2_EAP; case "WEP": return WEP; case "nopass": diff --git a/android/src/com/google/zxing/client/android/wifi/WifiConfigManager.java b/android/src/com/google/zxing/client/android/wifi/WifiConfigManager.java index 757ab4078..bafe73ce7 100644 --- a/android/src/com/google/zxing/client/android/wifi/WifiConfigManager.java +++ b/android/src/com/google/zxing/client/android/wifi/WifiConfigManager.java @@ -17,6 +17,7 @@ package com.google.zxing.client.android.wifi; import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.util.Log; @@ -28,6 +29,7 @@ import com.google.zxing.client.result.WifiParsedResult; /** * @author Vikram Aggarwal * @author Sean Owen + * @author Steffen Kieß */ public final class WifiConfigManager extends AsyncTask { @@ -89,6 +91,9 @@ public final class WifiConfigManager extends AsyncTask{@code WIFI:T:[network type];S:[network SSID];P:[network password];H:[hidden?];;}

* + *

For WPA2 enterprise (EAP), strings will be of the form:

+ * + *

{@code WIFI:T:WPA2-EAP;S:[network SSID];H:[hidden?];E:[EAP method];H:[Phase 2 method];A:[anonymous identity];I:[username];P:[password];;}

+ * + *

"EAP method" can e.g. be "TTLS" or "PWD" or one of the other fields in WifiEnterpriseConfig.Eap and "Phase 2 method" can e.g. be "MSCHAPV2" or any of the other fields in WifiEnterpriseConfig.Phase2

+ * *

The fields can appear in any order. Only "S:" is required.

* * @author Vikram Aggarwal * @author Sean Owen + * @author Steffen Kieß */ public final class WifiResultParser extends ResultParser { @@ -36,6 +43,7 @@ public final class WifiResultParser extends ResultParser { if (!rawText.startsWith("WIFI:")) { return null; } + rawText = rawText.substring("WIFI:".length()); String ssid = matchSinglePrefixedField("S:", rawText, ';', false); if (ssid == null || ssid.isEmpty()) { return null; @@ -46,6 +54,10 @@ public final class WifiResultParser extends ResultParser { type = "nopass"; } boolean hidden = Boolean.parseBoolean(matchSinglePrefixedField("H:", rawText, ';', false)); - return new WifiParsedResult(type, ssid, pass, hidden); + String identity = matchSinglePrefixedField("I:", rawText, ';', false); + String anonymousIdentity = matchSinglePrefixedField("A:", rawText, ';', false); + String eapMethod = matchSinglePrefixedField("E:", rawText, ';', false); + String phase2Method = matchSinglePrefixedField("H:", rawText, ';', false); + return new WifiParsedResult(type, ssid, pass, hidden, identity, anonymousIdentity, eapMethod, phase2Method); } } \ No newline at end of file