diff options
7 files changed, 81 insertions, 50 deletions
diff --git a/app/src/debug/java/se/leap/bitmaskclient/ConfigurationWizard.java b/app/src/debug/java/se/leap/bitmaskclient/ConfigurationWizard.java index 20545473..9af31fd8 100644 --- a/app/src/debug/java/se/leap/bitmaskclient/ConfigurationWizard.java +++ b/app/src/debug/java/se/leap/bitmaskclient/ConfigurationWizard.java @@ -242,12 +242,15 @@ implements NewProviderDialogInterface, ProviderDetailFragmentInterface, Download      void onItemSelected(int position) {          //TODO Code 2 pane view          selected_provider = adapter.getItem(position); +        onItemSelectedLogic(selected_provider);          onItemSelectedUi(selected_provider); +    } -	boolean danger_on = true; -	if(preferences.contains(ProviderItem.DANGER_ON)) -	    danger_on = preferences.getBoolean(ProviderItem.DANGER_ON, false); -	setUpProvider(selected_provider.mainUrl(), danger_on); +    private void onItemSelectedLogic(Provider selected_provider) { +        boolean danger_on = true; +        if(preferences.contains(ProviderItem.DANGER_ON)) +            danger_on = preferences.getBoolean(ProviderItem.DANGER_ON, false); +        setUpProvider(selected_provider.mainUrl(), danger_on);      }      private void onItemSelectedUi(Provider provider) { @@ -255,6 +258,8 @@ implements NewProviderDialogInterface, ProviderDetailFragmentInterface, Download          adapter.hideAllBut(adapter.indexOf(provider));      } +     +          @Override      public void onBackPressed() {      	if(setting_up_provider) { @@ -395,7 +400,8 @@ implements NewProviderDialogInterface, ProviderDetailFragmentInterface, Download      private void autoSelectProvider(Provider provider, boolean danger_on) {  	preferences.edit().putBoolean(ProviderItem.DANGER_ON, danger_on).apply();          selected_provider = provider; -        //onItemSelectedUi(selected_provider); +        onItemSelectedLogic(selected_provider); +        onItemSelectedUi(selected_provider);      }  	/** diff --git a/app/src/debug/java/se/leap/bitmaskclient/ProviderAPI.java b/app/src/debug/java/se/leap/bitmaskclient/ProviderAPI.java index a89ef357..52a424f4 100644 --- a/app/src/debug/java/se/leap/bitmaskclient/ProviderAPI.java +++ b/app/src/debug/java/se/leap/bitmaskclient/ProviderAPI.java @@ -32,7 +32,6 @@ import org.apache.http.client.ClientProtocolException;  import org.json.*;  import se.leap.bitmaskclient.ProviderListContent.ProviderItem; -import se.leap.bitmaskclient.R;  import se.leap.bitmaskclient.eip.*;  /** @@ -59,11 +58,10 @@ public class ProviderAPI extends IntentService {      ERRORS = "errors",      UPDATE_PROGRESSBAR = "update_progressbar",      CURRENT_PROGRESS = "current_progress", -	TAG = ProviderAPI.class.getSimpleName(); +	TAG = ProviderAPI.class.getSimpleName()      ;      final public static int -    CUSTOM_PROVIDER_ADDED = 0,      SRP_AUTHENTICATION_SUCCESSFUL = 3,      SRP_AUTHENTICATION_FAILED = 4,      SRP_REGISTRATION_SUCCESSFUL = 5, @@ -73,9 +71,7 @@ public class ProviderAPI extends IntentService {      CORRECTLY_DOWNLOADED_CERTIFICATE = 9,      INCORRECTLY_DOWNLOADED_CERTIFICATE = 10,      PROVIDER_OK = 11, -    PROVIDER_NOK = 12, -    CORRECTLY_DOWNLOADED_ANON_CERTIFICATE = 13, -    INCORRECTLY_DOWNLOADED_ANON_CERTIFICATE = 14 +    PROVIDER_NOK = 12      ;      private static boolean  @@ -128,11 +124,11 @@ public class ProviderAPI extends IntentService {              try {                  JSONObject provider_json = new JSONObject(preferences.getString(Provider.KEY, "no provider"));                  provider_api_url = provider_json.getString(Provider.API_URL) + "/" + provider_json.getString(Provider.API_VERSION); +                setting_up_provider = true;              } catch (JSONException e) { +                setting_up_provider = false;              }          } - -        setting_up_provider = true;  		if(action.equalsIgnoreCase(SET_UP_PROVIDER)) {  			Bundle result = setUpProvider(parameters); @@ -370,7 +366,7 @@ public class ProviderAPI extends IntentService {  	 * Sends an HTTP POST request to the api server to register a new user.  	 * @param server_url  	 * @param username -	 * @param salted_password +	 * @param salt  	 * @param password_verifier     	 * @return response from authentication server  	 */ @@ -491,6 +487,7 @@ public class ProviderAPI extends IntentService {  			last_danger_on = task.getBoolean(ProviderItem.DANGER_ON);  			last_provider_main_url = task.getString(Provider.MAIN_URL);  			CA_CERT_DOWNLOADED = PROVIDER_JSON_DOWNLOADED = EIP_SERVICE_JSON_DOWNLOADED = false; +            setting_up_provider = true;  		}  			if(!PROVIDER_JSON_DOWNLOADED) @@ -694,7 +691,7 @@ public class ProviderAPI extends IntentService {  	/**  	 * Tries to download the contents of the provided url using not commercially validated CA certificate from chosen provider.  -	 * @param url as a string +	 * @param url_string as a string  	 * @param danger_on true to download CA certificate in case it has not been downloaded.  	 * @return an empty string if it fails, the url content if not.   	 */ @@ -818,7 +815,6 @@ public class ProviderAPI extends IntentService {  	/**  	 * Logs out from the api url retrieved from the task. -	 * @param task containing api url from which the user will log out  	 * @return true if there were no exceptions  	 */      private boolean logOut() { diff --git a/app/src/main/java/se/leap/bitmaskclient/Dashboard.java b/app/src/main/java/se/leap/bitmaskclient/Dashboard.java index e3bd9b7d..b84b834c 100644 --- a/app/src/main/java/se/leap/bitmaskclient/Dashboard.java +++ b/app/src/main/java/se/leap/bitmaskclient/Dashboard.java @@ -37,6 +37,9 @@ import android.widget.TextView;  import org.json.JSONException;  import org.json.JSONObject; +import java.net.MalformedURLException; +import java.net.URL; +  import de.blinkt.openvpn.activities.LogWindow;  import se.leap.bitmaskclient.eip.Constants;  import se.leap.bitmaskclient.eip.EIP; @@ -75,6 +78,13 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf      private static boolean authed_eip;      @Override +    protected void onSaveInstanceState(Bundle outState) { +        if(provider != null) +            outState.putParcelable(Provider.KEY, provider); +        super.onSaveInstanceState(outState); +    } + +    @Override  	protected void onCreate(Bundle savedInstanceState) {  		super.onCreate(savedInstanceState); @@ -88,7 +98,19 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf  	    fragment_manager = new FragmentManagerEnhanced(getFragmentManager());  	    handleVersion(); -	    if (provider == null) +        if(savedInstanceState != null) +            provider = savedInstanceState.getParcelable(Provider.KEY); +        if(provider == null && preferences.getBoolean(Constants.PROVIDER_CONFIGURED, false)) +            try { +                provider = new Provider(new URL(preferences.getString(Provider.MAIN_URL, ""))); +                provider.define(new JSONObject(preferences.getString(Provider.KEY, ""))); +            } catch (MalformedURLException e) { +                e.printStackTrace(); +            } catch (JSONException e) { +                e.printStackTrace(); +            } + +        if (provider == null || provider.getName().isEmpty())  		startActivityForResult(new Intent(this,ConfigurationWizard.class),CONFIGURE_LEAP);  	    else  		buildDashboard(getIntent().getBooleanExtra(ON_BOOT, false)); @@ -116,16 +138,6 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf          Log.d(TAG, "Handle version didn't find any " + getPackageName() + " package");  	}      } - -	@Override -	protected void onDestroy() { -	     -		super.onDestroy(); -	} - -    protected void onPause() { -	super.onPause(); -    }      @Override      protected void onActivityResult(int requestCode, int resultCode, Intent data){ @@ -137,8 +149,12 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf              preferences.edit().putBoolean(Constants.AUTHED_EIP, authed_eip).apply();              updateEipService(); -            if (data.hasExtra(Provider.KEY)) +            if (data.hasExtra(Provider.KEY)) {                  provider = data.getParcelableExtra(Provider.KEY); +                preferences.edit().putBoolean(Constants.PROVIDER_CONFIGURED, true).commit(); +                preferences.edit().putString(Provider.MAIN_URL, provider.mainUrl().toString()).apply(); +                preferences.edit().putString(Provider.KEY, provider.definition().toString()).apply(); +            }              buildDashboard(false);              invalidateOptionsMenu();              if (data.hasExtra(LogInDialog.TAG)) { @@ -172,7 +188,7 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf  			.setNegativeButton(getResources().getString(R.string.setup_error_close_button), new DialogInterface.OnClickListener() {  				@Override  				public void onClick(DialogInterface dialog, int which) { -				    preferences.edit().remove(Provider.KEY).apply(); +				    preferences.edit().remove(Provider.KEY).remove(Constants.PROVIDER_CONFIGURED).apply();  					finish();  				}  			}) @@ -194,9 +210,8 @@ public class Dashboard extends Activity implements LogInDialog.LogInDialogInterf  		if ( provider.hasEIP()){ -            EipServiceFragment eip_fragment = (EipServiceFragment) fragment_manager.findFragmentByTag(EipServiceFragment.TAG); -            if(eip_fragment == null) -                eip_fragment = new EipServiceFragment(); +            fragment_manager.removePreviousFragment(EipServiceFragment.TAG); +            EipServiceFragment eip_fragment = new EipServiceFragment();  		    if (hide_and_turn_on_eip) {  			preferences.edit().remove(Dashboard.START_ON_BOOT).apply(); diff --git a/app/src/main/java/se/leap/bitmaskclient/Provider.java b/app/src/main/java/se/leap/bitmaskclient/Provider.java index dd679bb2..0b021b84 100644 --- a/app/src/main/java/se/leap/bitmaskclient/Provider.java +++ b/app/src/main/java/se/leap/bitmaskclient/Provider.java @@ -100,6 +100,8 @@ public final class Provider implements Parcelable {          definition = provider_json;      } +    protected JSONObject definition() { return definition; } +  	protected String getDomain(){  		return main_url.getHost();  	} @@ -111,14 +113,16 @@ public final class Provider implements Parcelable {  	protected String getName(){  		// Should we pass the locale in, or query the system here?  		String lang = Locale.getDefault().getLanguage(); -		String name = "Null"; // Should it actually /be/ null, for error conditions? +		String name = "";  		try {              if(definition != null)  			    name = definition.getJSONObject(API_TERM_NAME).getString(lang);              else throw new JSONException("Provider not defined");  		} catch (JSONException e) { -            String host = main_url.getHost(); -            name = host.substring(0, host.indexOf(".")); +            if(main_url != null) { +                String host = main_url.getHost(); +                name = host.substring(0, host.indexOf(".")); +            }  		}  		return name; diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/Constants.java b/app/src/main/java/se/leap/bitmaskclient/eip/Constants.java index e1a7e616..01a83d5f 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/Constants.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/Constants.java @@ -43,5 +43,6 @@ public interface Constants {      public final static String RECEIVER_TAG = TAG + ".RECEIVER_TAG";      public final static String REQUEST_TAG = TAG + ".REQUEST_TAG";      public final static String START_BLOCKING_VPN_PROFILE = TAG + ".START_BLOCKING_VPN_PROFILE"; +    public final static String PROVIDER_CONFIGURED = TAG + ".PROVIDER_CONFIGURED";  } diff --git a/app/src/release/java/se/leap/bitmaskclient/ConfigurationWizard.java b/app/src/release/java/se/leap/bitmaskclient/ConfigurationWizard.java index d54b9a30..ef7986f1 100644 --- a/app/src/release/java/se/leap/bitmaskclient/ConfigurationWizard.java +++ b/app/src/release/java/se/leap/bitmaskclient/ConfigurationWizard.java @@ -251,7 +251,11 @@ implements NewProviderDialogInterface, ProviderDetailFragmentInterface, Download  	//TODO Code 2 pane view          selected_provider = adapter.getItem(position);          onItemSelectedUi(selected_provider); -	setUpProvider(selected_provider.mainUrl()); +	onItemSelectedLogic(selected_provider); +    } + +    private void onItemSelectedLogic(Provider selected_provider) { +        setUpProvider(selected_provider.mainUrl());      }      private void onItemSelectedUi(Provider provider) { @@ -402,7 +406,8 @@ implements NewProviderDialogInterface, ProviderDetailFragmentInterface, Download      private void autoSelectProvider(Provider provider) {  	selected_provider = provider; -	//onItemSelected(provider); +        onItemSelectedUi(selected_provider); +	onItemSelectedLogic(selected_provider);      }  	/** @@ -469,6 +474,7 @@ implements NewProviderDialogInterface, ProviderDetailFragmentInterface, Download  	@Override  	public void login() {  		Intent ask_login = new Intent(); +		ask_login.putExtra(Provider.KEY, selected_provider);  		ask_login.putExtra(LogInDialog.TAG, LogInDialog.TAG);  		setResult(RESULT_OK, ask_login);  		setting_up_provider = false; diff --git a/app/src/release/java/se/leap/bitmaskclient/ProviderAPI.java b/app/src/release/java/se/leap/bitmaskclient/ProviderAPI.java index 0fa60550..fc74b702 100644 --- a/app/src/release/java/se/leap/bitmaskclient/ProviderAPI.java +++ b/app/src/release/java/se/leap/bitmaskclient/ProviderAPI.java @@ -58,7 +58,7 @@ public class ProviderAPI extends IntentService {      ERRORS = "errors",      UPDATE_PROGRESSBAR = "update_progressbar",      CURRENT_PROGRESS = "current_progress", -	TAG = ProviderAPI.class.getSimpleName(); +    TAG = ProviderAPI.class.getSimpleName()      ;      final public static int @@ -72,9 +72,7 @@ public class ProviderAPI extends IntentService {      CORRECTLY_DOWNLOADED_CERTIFICATE = 9,      INCORRECTLY_DOWNLOADED_CERTIFICATE = 10,      PROVIDER_OK = 11, -    PROVIDER_NOK = 12, -    CORRECTLY_DOWNLOADED_ANON_CERTIFICATE = 13, -    INCORRECTLY_DOWNLOADED_ANON_CERTIFICATE = 14 +    PROVIDER_NOK = 12      ;      private static boolean  @@ -100,14 +98,9 @@ public class ProviderAPI extends IntentService {      @Override      public void onCreate() {  	super.onCreate(); +  	preferences = getSharedPreferences(Dashboard.SHARED_PREFERENCES, MODE_PRIVATE);  	CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ORIGINAL_SERVER)); -	if(provider_api_url == null && preferences.contains(Provider.KEY)) { -	    try { -		JSONObject provider_json = new JSONObject(preferences.getString(Provider.KEY, "")); -		provider_api_url = provider_json.getString(Provider.API_URL) + "/" + provider_json.getString(Provider.API_VERSION); -	    } catch (JSONException e) {} -	}      }  	public static String lastProviderMainUrl() { @@ -123,7 +116,16 @@ public class ProviderAPI extends IntentService {  		final ResultReceiver receiver = command.getParcelableExtra(RECEIVER_KEY);  		String action = command.getAction();  		Bundle parameters = command.getBundleExtra(PARAMETERS); -		setting_up_provider = true; +		 +		if(provider_api_url == null && preferences.contains(Provider.KEY)) { +		    try { +			JSONObject provider_json = new JSONObject(preferences.getString(Provider.KEY, "")); +			provider_api_url = provider_json.getString(Provider.API_URL) + "/" + provider_json.getString(Provider.API_VERSION); +			setting_up_provider = true; +		    } catch (JSONException e) { +			setting_up_provider = false;			 +		    } +		}  		if(action.equalsIgnoreCase(SET_UP_PROVIDER)) {  			Bundle result = setUpProvider(parameters); @@ -360,7 +362,7 @@ public class ProviderAPI extends IntentService {  	 * Sends an HTTP POST request to the api server to register a new user.  	 * @param server_url  	 * @param username -	 * @param salted_password +	 * @param salt  	 * @param password_verifier     	 * @return response from authentication server  	 */ @@ -477,6 +479,7 @@ public class ProviderAPI extends IntentService {  	if(task != null && task.containsKey(Provider.MAIN_URL)) {  	    last_provider_main_url = task.getString(Provider.MAIN_URL);  	    CA_CERT_DOWNLOADED = PROVIDER_JSON_DOWNLOADED = EIP_SERVICE_JSON_DOWNLOADED = false; +	    setting_up_provider = true;  	}  	if(!PROVIDER_JSON_DOWNLOADED) @@ -684,7 +687,7 @@ public class ProviderAPI extends IntentService {  	/**  	 * Tries to download the contents of the provided url using not commercially validated CA certificate from chosen provider.  -	 * @param url as a string +	 * @param url_string as a string  	 * @return an empty string if it fails, the url content if not.   	 */  	private String downloadWithProviderCA(String url_string) {  | 
