alpha 0.0.1
[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         presets.add((new WifiNetworkSettings("dhbw-802.1x", "dhbw-802.1x", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
87                 setWpaEnterprise(
88                         new int[]{WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
89                         WifiEnterpriseConfig.Eap.PEAP,
90                         WifiEnterpriseConfig.Phase2.GTC,
91                         null
92                 ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
93                 "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
94                 "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
95                 "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
96                 "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
97                 "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
98                 "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
99                 "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
100                 "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
101                 "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
102                 "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
103                 "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
104                 "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
105                 "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
106                 "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
107                 "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
108                 "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
109                 "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
110                 "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
111                 "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
112                 "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
113                 "-----END CERTIFICATE-----"));
114
115         presets.add((new WifiNetworkSettings("eduroam", "eduroam", WifiNetworkAuthenticationTypes.WIFI_AUTHTYPE_WPA_ENTERPRISE)).
116                 setWpaEnterprise(
117                         new int[] {WifiConfiguration.KeyMgmt.WPA_EAP, WifiConfiguration.KeyMgmt.IEEE8021X},
118                         WifiEnterpriseConfig.Eap.PEAP,
119                         WifiEnterpriseConfig.Phase2.MSCHAPV2,
120                         null
121                 ).setCACertificate("Deutsche Telekom Root CA 2", "-----BEGIN CERTIFICATE-----\n" +
122                 "MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc\n" +
123                 "MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj\n" +
124                 "IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB\n" +
125                 "IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE\n" +
126                 "RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl\n" +
127                 "U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290\n" +
128                 "IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU\n" +
129                 "ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC\n" +
130                 "QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr\n" +
131                 "rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S\n" +
132                 "NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc\n" +
133                 "QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH\n" +
134                 "txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP\n" +
135                 "BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC\n" +
136                 "AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp\n" +
137                 "tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa\n" +
138                 "IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl\n" +
139                 "6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+\n" +
140                 "xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" +
141                 "Cm26OWMohpLzGITY+9HPBVZkVw==\n" +
142                 "-----END CERTIFICATE-----").
143                 setUserSuffix("@dhbw-loerrach.de"));
144
145         WifiNetworkSettings[] presetsArr = new WifiNetworkSettings[presets.size()];
146         presetsArr = presets.toArray(presetsArr);
147         return presetsArr;
148     }
149
150     public enum WifiNetworkAuthenticationTypes {
151         WIFI_AUTHTYPE_NONE,
152         WIFI_AUTHTYPE_WEP,
153         WIFI_AUTHTYPE_WPA,
154         WIFI_AUTHTYPE_WPA_ENTERPRISE,
155     };
156
157     String name;
158     String ssid;
159     WifiNetworkAuthenticationTypes authType;
160     int[] authAlgorithms = new int[0];
161     int eapMethod;
162     int phase2Method;
163
164     String caCertStr;
165     String caName;
166
167     SecureLoginManager performDHSecureLogin;
168     String usernameSuffix;
169     String username;
170     String password;
171
172     public TabLayout.Tab tab;
173     public boolean isInScanResult = false;
174     public boolean isTryConnecting = false;
175     public boolean isAssociating = false;
176     public boolean isAssociated = false;
177     public boolean isAuthenticated = false;
178     public boolean isDisconnected = false;
179     public boolean failedAuthentication = false;
180
181     public WifiNetworkSettings(String name, String ssid, WifiNetworkAuthenticationTypes authType) {
182         this.name = name;
183         this.ssid = ssid;
184         this.authType = authType;
185         switch(authType) {
186             case WIFI_AUTHTYPE_NONE:
187             case WIFI_AUTHTYPE_WEP:
188                 this.authAlgorithms = new int[] { WifiConfiguration.KeyMgmt.NONE };
189                 break;
190             case WIFI_AUTHTYPE_WPA:
191                 this.authAlgorithms = new int[] { WifiConfiguration.KeyMgmt.WPA_PSK };
192                 break;
193         }
194     }
195
196     public WifiNetworkSettings setWpaEnterprise(int[] authAlgorithms, int eapMethod, int phase2Method, String username) {
197         this.authAlgorithms = authAlgorithms;
198         this.eapMethod = eapMethod;
199         this.phase2Method = phase2Method;
200         this.username = username;
201         return this;
202     }
203
204     public WifiNetworkSettings setPassword(String password) {
205         this.password = password;
206         return this;
207     }
208
209     public WifiNetworkSettings setCACertificate(String caname, String certificate) {
210         this.caName = caname;
211         this.caCertStr = certificate;
212         return this;
213     }
214
215     public WifiNetworkSettings setUserSuffix(String suffix) {
216         this.usernameSuffix = suffix;
217         return this;
218     }
219
220     public WifiNetworkSettings setDHSecureLogin(SecureLoginManager secureLogin) {
221         this.performDHSecureLogin = secureLogin;
222         return this;
223     }
224
225     public void setAuthData(String username, String password) {
226         this.username = username;
227         this.password = password;
228     }
229
230     public void setAuthData(String password) {
231         this.password = password;
232     }
233
234     public X509Certificate generateCertificate() throws CertificateException, IOException {
235         byte[] decoded = Base64.decode(caCertStr.replaceAll("-----BEGIN CERTIFICATE-----", "").replaceAll("-----END CERTIFICATE-----", ""), Base64.DEFAULT);
236         return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(decoded));
237     }
238
239
240
241     public String getName() {
242         return name;
243     }
244
245     public String getSSID() {
246         return ssid;
247     }
248
249     public WifiNetworkSettings.WifiNetworkAuthenticationTypes getAuthType() {
250         return authType;
251     }
252
253     public int getEapMethod() {
254         return eapMethod;
255     }
256     public int getPhase2Method() {
257         return phase2Method;
258     }
259
260     public String getCAName() {
261         return caName;
262     }
263
264 }