summaryrefslogtreecommitdiff
path: root/src/se/leap/leapclient/ConfigHelper.java
blob: 0dab26f4becc3924435d3bc3ef126b25ec557c91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
package se.leap.leapclient;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

import org.json.JSONException;
import org.json.JSONObject;

import android.content.SharedPreferences;
import android.os.Environment;
import android.util.Log;

public class ConfigHelper {
    
    public static SharedPreferences shared_preferences;
    private static KeyStore keystore_trusted;

	final static String downloadJsonFilesBundleExtra = "downloadJSONFiles";
	final static String updateProviderDotJSON = "updateProviderDotJSON";
	final static String downloadNewProviderDotJSON = "downloadNewProviderDotJSON";
	final public static String logInDialog = "logInDialog";
	final public static String newProviderDialog = "logInDialog";
	final public static String srpRegister = "srpRegister";
	final public static String srpAuth = "srpAuth";
	public static String logIn = "logIn";
	public static String logOut = "logOut";
	public static String downloadUserAuthedCertificate = "downloadUserAuthedCertificate";
	public static String api_version_key = "api_version";
	final public static String resultKey = "result";
	final static String provider_key = "provider";
	final static String service_key = "service";
	final static String main_cert_key = "main_cert";
	final static String cert_key = "cert";
	final static String eip_service_key = "eip";
	final static String session_id_cookie_key = "session_id_cookie_key";
	final static String session_id_key = "session_id";
	public static final String PREFERENCES_KEY = "LEAPPreferences";
	public static final String user_directory = "leap_android";
	final public static String provider_name = "provider_name";
	final public static String provider_main_url = "provider_main_url";
	final public static String provider_json_url = "provider_json_url";
	final public static String custom = "custom";
	final public static String danger_on = "danger_on";
	final public static String api_url_key = "api_uri";
	final public static String username_key = "username";
	final public static String password_key = "password";
	final public static String allow_registration_key = "allow_registration";
	final public static String eip_service_api_path = "config/eip-service.json";
	
	final public static String NG_1024 =
			"eeaf0ab9adb38dd69c33f80afa8fc5e86072618775ff3c0b9ea2314c9c256576d674df7496ea81d3383b4813d692c6e0e0d5d8e250b98be48e495c1d6089dad15dc7d7b46154d6b6ce8ef4ad69b15d4982559b297bcf1885c529f566660e57ec68edbc3c05726cc02fd4cbf4976eaa9afd5138fe8376435b9fc61d2fc0eb06e3";
	final public static BigInteger g = BigInteger.valueOf(2);
	
	final public static int CUSTOM_PROVIDER_ADDED = 0;
	final public static int CORRECTLY_DOWNLOADED_JSON_FILES = 1;
	final public static int INCORRECTLY_DOWNLOADED_JSON_FILES = 2;
	final public static int SRP_AUTHENTICATION_SUCCESSFUL = 3;
	final public static int SRP_AUTHENTICATION_FAILED = 4;
	final public static int SRP_REGISTRATION_SUCCESSFUL = 5;
	final public static int SRP_REGISTRATION_FAILED = 6;
	final public static int LOGOUT_SUCCESSFUL = 7;
	final public static int LOGOUT_FAILED = 8;
	final public static int CORRECTLY_DOWNLOADED_AUTHED_USER_CERTIFICATE = 9;
	final public static int INCORRECTLY_DOWNLOADED_AUTHED_USER_CERTIFICATE = 10;
	final public static int CORRECTLY_UPDATED_PROVIDER_DOT_JSON = 11;
	final public static int INCORRECTLY_UPDATED_PROVIDER_DOT_JSON = 12;

	static String getStringFromSharedPref(String shared_preferences_key) {
		String value = "";
		//TODO This is not OK -> when reading provider.json it only shows "open"
		if(shared_preferences != null) {
			String content = shared_preferences.getString(shared_preferences_key, "");
			try {
				JSONObject json_object = new JSONObject(content);
				value = json_object.toString();
				/*JSONArray names = json_object.names();
				String key = names.getString(0);
				value = json_object.getString(key);*/
			} catch (JSONException e) {
				value = content;
			}
		}
		return value;
	}
	
	static void saveSharedPref(String shared_preferences_key, JSONObject content) {

		SharedPreferences.Editor shared_preferences_editor = shared_preferences
				.edit();
		shared_preferences_editor.putString(shared_preferences_key,
				content.toString());
		shared_preferences_editor.commit();
		System.out.println("Shared preferences updated: key = "
				+ shared_preferences_key
				+ " Content = "
				+ shared_preferences.getString(
						shared_preferences_key, "Default"));
	}

	static void rescueJSONException(JSONException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	static void saveFile(String filename, String content) {
		File root = Environment.getExternalStorageDirectory();
		File leap_dir = new File(root.getAbsolutePath() + File.separator + user_directory);
		if (!leap_dir.isDirectory()) {
			leap_dir.mkdir();
		}
		try {
			if (!leap_dir.isDirectory()) {
				throw new IOException(
						"Unable to create directory " + user_directory + ". Maybe the SD card is mounted?");
			}
			File outputFile = new File(leap_dir, filename);
			BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
			writer.write(content);
			writer.close();
		} catch (IOException e) {
			Log.w("leap_android", e.getMessage(), e);
		}
	}
	
	static FileInputStream openFileInputStream(String filename) {
		FileInputStream input_stream = null;
		File root = Environment.getExternalStorageDirectory();
		File leap_dir = new File(root.getAbsolutePath() + File.separator + user_directory);
		try {
			input_stream = new FileInputStream(leap_dir + File.separator + filename);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return input_stream;
	}

	public static void setSharedPreferences(
			SharedPreferences shared_preferences) {
		ConfigHelper.shared_preferences = shared_preferences;
	}

	public static void addTrustedCertificate(String provider, InputStream inputStream) {
		CertificateFactory cf;
		try {
			cf = CertificateFactory.getInstance("X.509");
			X509Certificate cert =
					(X509Certificate)cf.generateCertificate(inputStream);
			keystore_trusted.setCertificateEntry(provider, cert);
		} catch (CertificateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (KeyStoreException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void addTrustedCertificate(String provider, String certificate) {
		String filename_to_save = provider + "_certificate.cer";
		saveFile(filename_to_save, certificate);
		CertificateFactory cf;
		try {
			cf = CertificateFactory.getInstance("X.509");
			X509Certificate cert =
					(X509Certificate)cf.generateCertificate(openFileInputStream(filename_to_save));
			if(keystore_trusted == null) {
				getNewKeystore(null);
			}
			keystore_trusted.setCertificateEntry(provider, cert);
		} catch (CertificateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (KeyStoreException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static KeyStore getKeystore() {
		return keystore_trusted;
	}

	public static void getNewKeystore(InputStream leap_keystore) {
		try {
			keystore_trusted = KeyStore.getInstance("BKS");
			try {
				// Initialize the keystore with the provided trusted certificates
				// Also provide the password of the keystore
				if(leap_keystore != null) {
					//keystore_trusted.load(leap_keystore, "uer92jf".toCharArray());
					keystore_trusted.load(null, null);
				} else {
					keystore_trusted.load(null, null);
				}
			} finally {
				if(leap_keystore != null)
					leap_keystore.close();
			}
		} catch (KeyStoreException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (CertificateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static int getSrpAuthenticationFailed() {
		return SRP_AUTHENTICATION_FAILED;
	}
	
	static String extractProviderName(String provider_main_url) {
		
		return null;
	}
}