import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.util.Base64;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringReader;
import java.lang.reflect.Field;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
import de.dhbwloe.campusapp.CampusAppFragment;
import de.dhbwloe.campusapp.R;
};
}
+ private enum WifiNetworkAuthenticationTypes {
+ WIFI_AUTHTYPE_NONE,
+ WIFI_AUTHTYPE_WEP,
+ WIFI_AUTHTYPE_WPA,
+ WIFI_AUTHTYPE_WPA_ENTERPRISE,
+ };
+ private class WifiNetworkSettingsSet {
+ String name;
+ String ssid;
+ WifiNetworkAuthenticationTypes authType;
+ int[] authAlgorithms;
+ int eapMethod;
+ int phase2Method;
+
+ String caCertStr;
+
+ String username;
+ String password;
+
+ public WifiNetworkSettingsSet(String name, String ssid, WifiNetworkAuthenticationTypes authType) {
+ this.name = name;
+ this.ssid = ssid;
+ this.authType = authType;
+ }
+
+ public WifiNetworkSettingsSet setWpaEnterprise(int[] authAlgorithms, int eapMethod, int phase2Method, String username) {
+ this.authAlgorithms = authAlgorithms;
+ this.eapMethod = eapMethod;
+ this.phase2Method = phase2Method;
+ this.username = username;
+ return this;
+ }
+
+ public WifiNetworkSettingsSet setPassword(String password) {
+ this.password = password;
+ return this;
+ }
+
+ public WifiNetworkSettingsSet setCACertificate(String certificate) {
+ this.caCertStr = certificate;
+ return this;
+ }
+
+ public void setAuthData(String username, String password) {
+ this.username = username;
+ this.password = password;
+ }
+
+ public void setAuthData(String password) {
+ this.password = password;
+ }
+
+ public X509Certificate generateCertificate() throws CertificateException, IOException {
+ byte [] decoded = Base64.decode(caCertStr.replaceAll("-----BEGIN CERTIFICATE-----", "").replaceAll("-----END CERTIFICATE-----", ""), Base64.DEFAULT);
+ return (X509Certificate)CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(decoded));
+ }
+ }
+
private View view;
+ private WifiNetworkSettingsSet[] wifiPresets;
+ private WifiManager wifimanager;
+
+ private void loadDhbwWifiDefinitions() {
+ int numOfNetworks = 2;
+ int i = 0;
+ wifiPresets = new WifiNetworkSettingsSet[numOfNetworks];
+
+ wifiPresets[i++] = (new WifiNetworkSettingsSet("dhbw-secure", "dhbw-secure", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
+ setWpaEnterprise(
+ new int[] {WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
+ WifiEnterpriseConfig.Eap.PEAP,
+ WifiEnterpriseConfig.Phase2.MSCHAPV2,
+ null
+ ).setCACertificate("-----BEGIN CERTIFICATE-----\n" +
+ "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
+ "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
+ "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
+ "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
+ "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
+ "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
+ "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
+ "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
+ "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
+ "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
+ "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
+ "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
+ "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
+ "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
+ "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
+ "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
+ "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
+ "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
+ "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
+ "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
+ "-----END CERTIFICATE-----");
+
+ wifiPresets[i++] = (new WifiNetworkSettingsSet("dhbw-wlan", "dhbw-wlan", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_NONE));
+ }
+
+
+ @TargetApi(18)
+ private void connectToWiFi(WifiNetworkSettingsSet settings) {
+ WifiConfiguration wifiConfig = new WifiConfiguration();
+ wifiConfig.SSID = settings.ssid;
+ for(int i = 0; i < settings.authAlgorithms.length; i++)
+ wifiConfig.allowedKeyManagement.set(settings.authAlgorithms[i]);
+
+ switch(settings.authType) {
+ case WIFI_AUTHTYPE_NONE:
+ break;
+ case WIFI_AUTHTYPE_WEP:
+ // not supported by our app
+ break;
+ case WIFI_AUTHTYPE_WPA:
+
+ break;
+ case WIFI_AUTHTYPE_WPA_ENTERPRISE:
+ WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
+ enterpriseConfig.setIdentity(settings.username);
+ enterpriseConfig.setPassword(settings.password);
+ enterpriseConfig.setEapMethod(settings.eapMethod);
+ enterpriseConfig.setPhase2Method(settings.phase2Method);
+ try {
+ enterpriseConfig.setCaCertificate(settings.generateCertificate());
+ } catch (CertificateException e) {
+ } catch (IOException e) {
+ }
+ wifiConfig.enterpriseConfig = enterpriseConfig;
+ break;
+ }
+ int networkId = wifimanager.addNetwork(wifiConfig);
+ wifimanager.enableNetwork(networkId, true);
+ }
+
+
+
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ loadDhbwWifiDefinitions();
+ wifimanager = (WifiManager)AppContext.getMainActivity().getSystemService(AppContext.getMainActivity().WIFI_SERVICE);
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
connectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- Button connectBtn = (Button)v;
+ Button connectBtn = (Button) v;
connectBtn.setEnabled(false);
EditText usernameEdt = (EditText) view.findViewById(R.id.wifiUsername);
String username = usernameEdt.getText().toString();
String password = passwordEdt.getText().toString();
- if(Build.VERSION.SDK_INT < 18) {
+ if (Build.VERSION.SDK_INT < 18) {
// connectToDHWiFi not supported!
// do something else?
+ } else if (username.length() > 0 && password.length() > 0) {
+ WifiNetworkSettingsSet settings = wifiPresets[0];
+ settings.setAuthData(username, password);
+ connectToWiFi(settings);
}
- else if(username.length() > 0 && password.length() > 0)
- connectToDHWiFi(username, password);
connectBtn.setEnabled(true);
}
return view;
}
- @TargetApi(18)
- private void connectToDHWiFi(String username, String password) {
- WifiConfiguration wifiConfig = new WifiConfiguration();
- wifiConfig.SSID = "dhbw-secure";
- wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
- wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
-
- WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
- enterpriseConfig.setIdentity(username);
- enterpriseConfig.setPassword(password);
- enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP);
- enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2);
- wifiConfig.enterpriseConfig = enterpriseConfig;
-
- WifiManager wfm = (WifiManager)AppContext.getMainActivity().getSystemService(AppContext.getMainActivity().WIFI_SERVICE);
-
- int networkId = wfm.addNetwork(wifiConfig);
- wfm.enableNetwork(networkId, true);
- }
-
-
-
}