WifiSettings überarbeitet, kleine fixes
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / wifi / WifiNetworkSettings.java
1 package de.dhbwloe.campusapp.wifi;
2
3 import android.net.wifi.WifiConfiguration;
4 import android.net.wifi.WifiEnterpriseConfig;
5 import android.support.design.widget.TabLayout;
6 import android.util.Base64;
7
8 import java.io.ByteArrayInputStream;
9 import java.io.IOException;
10 import java.security.cert.CertificateException;
11 import java.security.cert.CertificateFactory;
12 import java.security.cert.X509Certificate;
13 import java.util.ArrayList;
14
15 import de.dhbwloe.campusapp.CampusAppContext;
16
17 /**
18  * Created by pk910 on 08.02.2016.
19  */
20 public class WifiNetworkSettings {
21     public static WifiNetworkSettings[] LoadNetworkSettingPresets(CampusAppContext context) {
22         ArrayList<WifiNetworkSettings> presets = new ArrayList<WifiNetworkSettings>();
23
24         presets.add((new WifiNetworkSettings("dhbw-secure", "dhbw-secure", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
25                 setWpaEnterprise(
26                         new int[]{WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
27                         WifiEnterpriseConfig.Eap.PEAP,
28                         WifiEnterpriseConfig.Phase2.MSCHAPV2,
29                         null
30                 ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
31                 "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
32                 "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
33                 "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
34                 "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
35                 "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
36                 "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
37                 "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
38                 "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
39                 "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
40                 "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
41                 "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
42                 "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
43                 "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
44                 "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
45                 "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
46                 "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
47                 "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
48                 "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
49                 "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
50                 "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
51                 "-----END CERTIFICATE-----"));
52
53         presets.add((new WifiNetworkSettings("dhbw-wlan", "dhbw-wlan", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_NONE)).
54                 setDHSecureLogin(new SecureLoginManager()).setCACertificate("DHBW CA - G01", "-----BEGIN CERTIFICATE-----\n" +
55                 "MIIFSjCCBDKgAwIBAgIHF6/20DYr2jANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQG\n" +
56                 "EwJERTETMBEGA1UEChMKREZOLVZlcmVpbjEQMA4GA1UECxMHREZOLVBLSTEkMCIG\n" +
57                 "A1UEAxMbREZOLVZlcmVpbiBQQ0EgR2xvYmFsIC0gRzAxMB4XDTE0MDYwNTE0MDU1\n" +
58                 "MloXDTE5MDcwOTIzNTkwMFowcjELMAkGA1UEBhMCREUxLDAqBgNVBAoTI0R1YWxl\n" +
59                 "IEhvY2hzY2h1bGUgQmFkZW4tV3VlcnR0ZW1iZXJnMRYwFAYDVQQDEw1ESEJXIENB\n" +
60                 "IC0gRzAxMR0wGwYJKoZIhvcNAQkBFg5wa2lAZGhidy12cy5kZTCCASIwDQYJKoZI\n" +
61                 "hvcNAQEBBQADggEPADCCAQoCggEBALtoqHrbNRjuRdIh20VPATXIitkVgIva+HcA\n" +
62                 "Q7qA87lsm6v28DSasCPgx+TnGoUduGucA7fA7UhtWGqmU5cbJ5Ucsra0XBwqbOEN\n" +
63                 "u7GIBVcK7vUac67Ny+9TEqB/mtKz4nU/G8TlpX5hotMDg4H46SvtIvtSz1RJ2BVs\n" +
64                 "ssssubz3zI/W5Y6qqfRhZGLzrqmZYYlfCc/sn0jOkElgomAzzt4rmKRq8CsX3bYJ\n" +
65                 "ImeUaEHXU5QgTEZLgA9olse54r6N2O+cM4y/eDK9q9RaWdjNKTDsRq/sILlgUIaO\n" +
66                 "XcxzBa3pOhQ7zRb5amGiTIxWb2Szzy+Ka1XO9BseTFCcot8BAO8CAwEAAaOCAfsw\n" +
67                 "ggH3MBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMBEGA1UdIAQK\n" +
68                 "MAgwBgYEVR0gADAdBgNVHQ4EFgQUjOlwcWC4U59ExpdeQh/tKHK9Dn4wHwYDVR0j\n" +
69                 "BBgwFoAUSbfGz+g9H3/qRHsTKffxCnA+3mQwGQYDVR0RBBIwEIEOcGtpQGRoYnct\n" +
70                 "dnMuZGUwgYgGA1UdHwSBgDB+MD2gO6A5hjdodHRwOi8vY2RwMS5wY2EuZGZuLmRl\n" +
71                 "L2dsb2JhbC1yb290LWNhL3B1Yi9jcmwvY2FjcmwuY3JsMD2gO6A5hjdodHRwOi8v\n" +
72                 "Y2RwMi5wY2EuZGZuLmRlL2dsb2JhbC1yb290LWNhL3B1Yi9jcmwvY2FjcmwuY3Js\n" +
73                 "MIHXBggrBgEFBQcBAQSByjCBxzAzBggrBgEFBQcwAYYnaHR0cDovL29jc3AucGNh\n" +
74                 "LmRmbi5kZS9PQ1NQLVNlcnZlci9PQ1NQMEcGCCsGAQUFBzAChjtodHRwOi8vY2Rw\n" +
75                 "MS5wY2EuZGZuLmRlL2dsb2JhbC1yb290LWNhL3B1Yi9jYWNlcnQvY2FjZXJ0LmNy\n" +
76                 "dDBHBggrBgEFBQcwAoY7aHR0cDovL2NkcDIucGNhLmRmbi5kZS9nbG9iYWwtcm9v\n" +
77                 "dC1jYS9wdWIvY2FjZXJ0L2NhY2VydC5jcnQwDQYJKoZIhvcNAQELBQADggEBAMS9\n" +
78                 "5ypdDi/q3AeBOfzj3A3PZaQaLumKxvVeA2xy8j8XtwWpPeG99QwtqeKlJ3+OCuwT\n" +
79                 "eRtkWxnsm0eonLYI2rSL8y94LUoM0kj4GiHbRqL4eqPJKCwoQeTWxkeW/2fmZPtn\n" +
80                 "u9zBDAWFDgMtK9iiIOzp9FlNljHKJH1EdaWJD/Gv/5+ElNZpFDZ/oz/kosyvLeWZ\n" +
81                 "EiA3U8/LDPFPlxe+gVqmr7+tzo88/C6i3NZSaUJ3qkaWSxx+xx/sNXoHX22msHwN\n" +
82                 "SqnBQinCotrRO3WgZVDvhN3/eHZ8Zj7z6re7x/qlIGsKDVGxidWjGQDF2jp8O5Rp\n" +
83                 "uD3s1d70097Es++KwAg=\n" +
84                 "-----END CERTIFICATE-----\n"));
85
86         /*
87         presets.add((new WifiNetworkSettings("dhbw-802.1x", "dhbw-802.1x", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
88                 setWpaEnterprise(
89                         new int[]{WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
90                         WifiEnterpriseConfig.Eap.PEAP,
91                         WifiEnterpriseConfig.Phase2.GTC,
92                         null
93                 ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
94                 "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
95                 "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
96                 "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
97                 "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
98                 "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
99                 "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
100                 "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
101                 "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
102                 "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
103                 "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
104                 "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
105                 "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
106                 "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
107                 "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
108                 "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
109                 "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
110                 "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
111                 "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
112                 "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
113                 "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
114                 "-----END CERTIFICATE-----"));
115         */
116
117         presets.add((new WifiNetworkSettings("eduroam", "eduroam", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
118                 setWpaEnterprise(
119                         new int[] {WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
120                         WifiEnterpriseConfig.Eap.PEAP,
121                         WifiEnterpriseConfig.Phase2.MSCHAPV2,
122                         null
123                 ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
124                 "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
125                 "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
126                 "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
127                 "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
128                 "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
129                 "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
130                 "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
131                 "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
132                 "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
133                 "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
134                 "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
135                 "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
136                 "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
137                 "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
138                 "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
139                 "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
140                 "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
141                 "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
142                 "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
143                 "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
144                 "-----END CERTIFICATE-----").
145                 setUserSuffix("@dhbw-loerrach.de"));
146
147         WifiNetworkSettings[] presetsArr = new WifiNetworkSettings[presets.size()];
148         presetsArr = presets.toArray(presetsArr);
149         return presetsArr;
150     }
151
152     public enum WifiNetworkAuthenticationTypes {
153         WIFI_AUTHTYPE_NONE,
154         WIFI_AUTHTYPE_WEP,
155         WIFI_AUTHTYPE_WPA,
156         WIFI_AUTHTYPE_WPA_ENTERPRISE,
157     };
158
159     String name;
160     String ssid;
161     WifiNetworkAuthenticationTypes authType;
162     int[] authAlgorithms = new int[0];
163     int eapMethod;
164     int phase2Method;
165
166     String caCertStr;
167     String caName;
168
169     SecureLoginManager performDHSecureLogin;
170     String usernameSuffix;
171     String username;
172     String password;
173
174     public TabLayout.Tab tab;
175     public boolean isInScanResult = false;
176
177     public WifiNetworkSettings(String name, String ssid, WifiNetworkAuthenticationTypes authType) {
178         this.name = name;
179         this.ssid = ssid;
180         this.authType = authType;
181         switch(authType) {
182             case WIFI_AUTHTYPE_NONE:
183             case WIFI_AUTHTYPE_WEP:
184                 this.authAlgorithms = new int[] { WifiConfiguration.KeyMgmt.NONE };
185                 break;
186             case WIFI_AUTHTYPE_WPA:
187                 this.authAlgorithms = new int[] { WifiConfiguration.KeyMgmt.WPA_PSK };
188                 break;
189         }
190     }
191
192     public WifiNetworkSettings setWpaEnterprise(int[] authAlgorithms, int eapMethod, int phase2Method, String username) {
193         this.authAlgorithms = authAlgorithms;
194         this.eapMethod = eapMethod;
195         this.phase2Method = phase2Method;
196         this.username = username;
197         return this;
198     }
199
200     public WifiNetworkSettings setPassword(String password) {
201         this.password = password;
202         return this;
203     }
204
205     public WifiNetworkSettings setCACertificate(String caname, String certificate) {
206         this.caName = caname;
207         this.caCertStr = certificate;
208         return this;
209     }
210
211     public WifiNetworkSettings setUserSuffix(String suffix) {
212         this.usernameSuffix = suffix;
213         return this;
214     }
215
216     public WifiNetworkSettings setDHSecureLogin(SecureLoginManager secureLogin) {
217         this.performDHSecureLogin = secureLogin;
218         return this;
219     }
220
221     public void setAuthData(String username, String password) {
222         this.username = username;
223         this.password = password;
224     }
225
226     public void setAuthData(String password) {
227         this.password = password;
228     }
229
230     public X509Certificate generateCertificate() throws CertificateException, IOException {
231         byte[] decoded = Base64.decode(caCertStr.replaceAll("-----BEGIN CERTIFICATE-----", "").replaceAll("-----END CERTIFICATE-----", ""), Base64.DEFAULT);
232         return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(decoded));
233     }
234
235
236
237     public String getName() {
238         return name;
239     }
240
241     public String getSSID() {
242         return ssid;
243     }
244
245     public WifiNetworkSettings.WifiNetworkAuthenticationTypes getAuthType() {
246         return authType;
247     }
248
249     public int getEapMethod() {
250         return eapMethod;
251     }
252     public int getPhase2Method() {
253         return phase2Method;
254     }
255
256     public String getCAName() {
257         return caName;
258     }
259
260     public SecureLoginManager getSecureLoginManager() {
261         return performDHSecureLogin;
262     }
263
264 }