X-Git-Url: http://git.pk910.de/?p=DHBWCampusApp.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fde%2Fdhbwloe%2Fcampusapp%2Ffragments%2FWifiSettings.java;h=c172ed5f241f0e10da180a002c94031218eef751;hp=d57671a83f759cb3caceb454c4df1a612a35b84c;hb=b5169aeadcc32f9c7388447e5bf9096936837072;hpb=60b04973e203241d319e2d8ee6c150d641b02a65 diff --git a/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java b/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java index d57671a..c172ed5 100644 --- a/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java +++ b/app/src/main/java/de/dhbwloe/campusapp/fragments/WifiSettings.java @@ -8,13 +8,20 @@ import android.net.wifi.WifiManager; 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; @@ -37,7 +44,150 @@ public class WifiSettings extends CampusAppFragment { }; } + 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, @@ -49,7 +199,7 @@ public class WifiSettings extends CampusAppFragment { 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); @@ -58,12 +208,14 @@ public class WifiSettings extends CampusAppFragment { 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); } @@ -72,26 +224,4 @@ public class WifiSettings extends CampusAppFragment { 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); - } - - - }