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