diff options
| -rw-r--r-- | src/se/leap/leapclient/ConfigurationWizard.java | 14 | ||||
| -rw-r--r-- | src/se/leap/leapclient/ProviderAPI.java | 135 | 
2 files changed, 86 insertions, 63 deletions
diff --git a/src/se/leap/leapclient/ConfigurationWizard.java b/src/se/leap/leapclient/ConfigurationWizard.java index 69e13f1..90e74e5 100644 --- a/src/se/leap/leapclient/ConfigurationWizard.java +++ b/src/se/leap/leapclient/ConfigurationWizard.java @@ -126,18 +126,12 @@ public class ConfigurationWizard extends Activity          			try {
          				saveProviderJson(current_provider_item);
          				downloadJSONFiles(current_provider_item);
 -        				
  					} catch (IOException e) {
  						// TODO Auto-generated catch block
  						e.printStackTrace();
  					}
          		}
          	}
 -        	
 -            // FIXME!! We're going to have more Fragments and listeners, flow control?
 -        	// TODO There is no testing done to know if we're okay...
 -        	setResult(RESULT_OK);
 -        	finish();
          }
      }
 @@ -214,5 +208,13 @@ public class ConfigurationWizard extends Activity  				.replace(R.id.configuration_wizard_layout, providerList, "providerlist")
  				.commit();
  		}
 +		else if(resultCode == ConfigHelper.CORRECTLY_DOWNLOADED_JSON_FILES) {
 +        	setResult(RESULT_OK);
 +        	finish();
 +		}
 +		else if(resultCode == ConfigHelper.INCORRECTLY_DOWNLOADED_JSON_FILES) {
 +        	setResult(RESULT_CANCELED);
 +        	finish();
 +		}
  	}
  }
 diff --git a/src/se/leap/leapclient/ProviderAPI.java b/src/se/leap/leapclient/ProviderAPI.java index db5301e..afbf1c0 100644 --- a/src/se/leap/leapclient/ProviderAPI.java +++ b/src/se/leap/leapclient/ProviderAPI.java @@ -34,72 +34,93 @@ public class ProviderAPI extends IntentService {  	protected void onHandleIntent(Intent task_for) {  		final ResultReceiver receiver = task_for.getParcelableExtra("receiver");  		Bundle task; -		System.out.println("onHandleIntent called");  		if((task = task_for.getBundleExtra(ConfigHelper.downloadJsonFilesBundleExtra)) != null) { -			String provider_name = (String) task.get(ConfigHelper.provider_key); -			String cert_url = (String) task.get(ConfigHelper.cert_key); -			String eip_service_json_url = (String) task.get(ConfigHelper.eip_service_key); -			try { -				JSONObject provider_json = new JSONObject("{ \"provider\" : \"" + provider_name + "\"}"); -				ConfigHelper.saveSharedPref(ConfigHelper.provider_key, provider_json); -				 -				/*String cert_string = getStringFromProvider(cert_url); -				JSONObject cert_json = new JSONObject("{ \"certificate\" : \"" + cert_string + "\"}"); -				ConfigHelper.saveSharedPref(ConfigHelper.cert_key, cert_json); -				ConfigHelper.addTrustedCertificate(provider_name, cert_string);*/ -				URL cacert = new URL(cert_url); -				ConfigHelper.addTrustedCertificate(provider_name, cacert.openStream()); -				JSONObject eip_service_json = getJSONFromProvider(eip_service_json_url); -				ConfigHelper.saveSharedPref(ConfigHelper.eip_service_key, eip_service_json); +			if(downloadJsonFilesBundleExtra(task))  				receiver.send(ConfigHelper.CORRECTLY_DOWNLOADED_JSON_FILES, Bundle.EMPTY); -			} catch (IOException e) { -				// TODO It could happen that an https site used a certificate not trusted. -				e.printStackTrace(); +			else  				receiver.send(ConfigHelper.INCORRECTLY_DOWNLOADED_JSON_FILES, Bundle.EMPTY); -			} catch (JSONException e) { -				ConfigHelper.rescueJSONException(e); -				receiver.send(ConfigHelper.INCORRECTLY_DOWNLOADED_JSON_FILES, Bundle.EMPTY); -			} catch(Exception e) { -				e.printStackTrace(); -				receiver.send(ConfigHelper.INCORRECTLY_DOWNLOADED_JSON_FILES, Bundle.EMPTY); -			}  		}  		else if ((task = task_for.getBundleExtra(ConfigHelper.downloadNewProviderDotJSON)) != null) { -			boolean custom = true; -			String provider_main_url = (String) task.get(ConfigHelper.provider_key_url); -			String provider_name = provider_main_url.replaceFirst("http[s]?://", "").replaceFirst("\\/", "_"); -			String provider_json_url = guessURL(provider_main_url); -			JSONObject provider_json = null; -			try { -				provider_json = getJSONFromProvider(provider_json_url); -			} catch (IOException e) { -				// TODO It could happen that an https site used a certificate not trusted. -				try { -					URL provider_url = new URL(provider_json_url); -					String provider_json_string = new Scanner(provider_url.openStream()).useDelimiter("\\A").next(); -					provider_json = new JSONObject(provider_json_string); -				} catch (MalformedURLException e1) { -					// TODO Auto-generated catch block -					e1.printStackTrace(); -				} catch (IOException e1) { -					// TODO Auto-generated catch block -					e1.printStackTrace(); -				} catch (JSONException e1) { -					// TODO Auto-generated catch block -					e1.printStackTrace(); -				} -				 -				e.printStackTrace(); -			} catch (JSONException e) { -				// TODO Auto-generated catch block -				e.printStackTrace(); -			} +			if(downloadNewProviderDotJSON(task)) +				receiver.send(ConfigHelper.CUSTOM_PROVIDER_ADDED, Bundle.EMPTY); +			else +				receiver.send(ConfigHelper.INCORRECTLY_DOWNLOADED_JSON_FILES, Bundle.EMPTY); +		} +	} + +	private boolean downloadNewProviderDotJSON(Bundle task) { +		boolean custom = true; +		String provider_main_url = (String) task.get(ConfigHelper.provider_key_url); +		String provider_name = provider_main_url.replaceFirst("http[s]?://", "").replaceFirst("\\/", "_"); +		String provider_json_url = guessURL(provider_main_url); +		JSONObject provider_json = null; +		try { +			provider_json = getJSONFromProvider(provider_json_url); +		} catch (IOException e) { +			// It could happen that an https site used a certificate not trusted. +			provider_json = downloadNewProviderDotJsonWithoutCert(provider_json_url); +		} catch (JSONException e) { +			// TODO Auto-generated catch block +			e.printStackTrace(); +			return false; +		} +		 +		if(provider_json == null) { +			return false; +		} else {  			String filename = provider_name + "_provider.json".replaceFirst("__", "_");  			ConfigHelper.saveFile(filename, provider_json.toString()); + +			ProviderListContent.addItem(new ProviderItem(provider_name, ConfigHelper.openFileInputStream(filename), custom)); +			return true; +		} +	} + +	private boolean downloadJsonFilesBundleExtra(Bundle task) { +		String provider_name = (String) task.get(ConfigHelper.provider_key); +		String cert_url = (String) task.get(ConfigHelper.cert_key); +		String eip_service_json_url = (String) task.get(ConfigHelper.eip_service_key); +		try { +			//JSONObject provider_json = new JSONObject("{ \"provider\" : \"" + provider_name + "\"}"); +			//ConfigHelper.saveSharedPref(ConfigHelper.provider_key, provider_json); -    		ProviderListContent.addItem(new ProviderItem(provider_name, ConfigHelper.openFileInputStream(filename), custom)); -    		receiver.send(ConfigHelper.CUSTOM_PROVIDER_ADDED, Bundle.EMPTY); +			/*String cert_string = getStringFromProvider(cert_url); +			JSONObject cert_json = new JSONObject("{ \"certificate\" : \"" + cert_string + "\"}"); +			ConfigHelper.saveSharedPref(ConfigHelper.cert_key, cert_json); +			ConfigHelper.addTrustedCertificate(provider_name, cert_string);*/ +			URL cacert = new URL(cert_url); +			ConfigHelper.addTrustedCertificate(provider_name, cacert.openStream()); +			JSONObject eip_service_json = getJSONFromProvider(eip_service_json_url); +			ConfigHelper.saveSharedPref(ConfigHelper.eip_service_key, eip_service_json); +			return true; +		} catch (IOException e) { +			// It could happen that an https site used a certificate not trusted: solved above using URL +			e.printStackTrace(); +			return false; +		} catch (JSONException e) { +			ConfigHelper.rescueJSONException(e); +			return false; +		} catch(Exception e) { +			e.printStackTrace(); +			return false; +		} +	} + +	private JSONObject downloadNewProviderDotJsonWithoutCert( +			String provider_json_url) { +		JSONObject provider_json = null; +		try { +			URL provider_url = new URL(provider_json_url); +			String provider_json_string = new Scanner(provider_url.openStream()).useDelimiter("\\A").next(); +			provider_json = new JSONObject(provider_json_string); +		} catch (MalformedURLException e1) { +			e1.printStackTrace(); +		} catch (IOException e1) { +			e1.printStackTrace(); +		} catch (JSONException e1) { +			e1.printStackTrace();  		} +		return provider_json;  	}  	private String guessURL(String provider_main_url) {  | 
