diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java index 2e2497d515347ad0431388984d611aa94af02ead..2680f612f96ea57dd84f6671c454326321a2d994 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java @@ -9,9 +9,11 @@ import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_RESULT_KEY; import static se.leap.bitmaskclient.base.models.Constants.COUNTRYCODE; import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY; import static se.leap.bitmaskclient.providersetup.ProviderAPI.CORRECTLY_DOWNLOADED_EIP_SERVICE; +import static se.leap.bitmaskclient.providersetup.ProviderAPI.CORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE; import static se.leap.bitmaskclient.providersetup.ProviderAPI.DOWNLOAD_SERVICE_JSON; import static se.leap.bitmaskclient.providersetup.ProviderAPI.ERRORS; import static se.leap.bitmaskclient.providersetup.ProviderAPI.INCORRECTLY_DOWNLOADED_EIP_SERVICE; +import static se.leap.bitmaskclient.providersetup.ProviderAPI.INCORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE; import static se.leap.bitmaskclient.providersetup.ProviderAPI.PROVIDER_NOK; import static se.leap.bitmaskclient.providersetup.ProviderAPI.PROVIDER_OK; import static se.leap.bitmaskclient.providersetup.ProviderAPI.QUIETLY_UPDATE_VPN_CERTIFICATE; @@ -19,8 +21,8 @@ import static se.leap.bitmaskclient.providersetup.ProviderAPI.SET_UP_PROVIDER; import static se.leap.bitmaskclient.providersetup.ProviderAPI.UPDATE_INVALID_VPN_CERTIFICATE; import static se.leap.bitmaskclient.providersetup.ProviderSetupFailedDialog.DOWNLOAD_ERRORS.ERROR_INVALID_CERTIFICATE; import static se.leap.bitmaskclient.providersetup.ProviderSetupObservable.DOWNLOADED_V5_BRIDGES; -import static se.leap.bitmaskclient.providersetup.ProviderSetupObservable.DOWNLOADED_V5_SERVICE_JSON; import static se.leap.bitmaskclient.providersetup.ProviderSetupObservable.DOWNLOADED_V5_GATEWAYS; +import static se.leap.bitmaskclient.providersetup.ProviderSetupObservable.DOWNLOADED_V5_SERVICE_JSON; import static se.leap.bitmaskclient.providersetup.ProviderSetupObservable.DOWNLOADED_VPN_CERTIFICATE; import static se.leap.bitmaskclient.tor.TorStatusObservable.TorStatus.OFF; @@ -84,7 +86,6 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro break; case QUIETLY_UPDATE_VPN_CERTIFICATE: - case UPDATE_INVALID_VPN_CERTIFICATE: result = updateVpnCertificate(provider); if (result.getBoolean(BROADCAST_RESULT_KEY)) { Log.d(TAG, "successfully downloaded VPN certificate"); @@ -93,6 +94,14 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro ProviderObservable.getInstance().updateProvider(provider); } break; + case UPDATE_INVALID_VPN_CERTIFICATE: + result = updateVpnCertificate(provider); + if (result.getBoolean(BROADCAST_RESULT_KEY)) { + eventSender.sendToReceiverOrBroadcast(receiver, CORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE, result, provider); + } else { + eventSender.sendToReceiverOrBroadcast(receiver, INCORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE, result, provider); + } + break; } } @@ -103,6 +112,7 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro BitmaskMobile bm; try { bm = new BitmaskMobile(provider.getMainUrl(), new PreferenceHelper.SharedPreferenceStore()); + bm.setDebug(BuildConfig.DEBUG); } catch (IllegalStateException e) { return eventSender.setErrorResult(currentDownload, R.string.config_error_found, null); } @@ -120,12 +130,21 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro return eventSender.setErrorResult(currentDownload, R.string.config_error_found, null); } + try { + if (provider.hasIntroducer()) { + bm.setIntroducer(provider.getIntroducer().toUrl()); + } + } catch (Exception e) { + return eventSender.setErrorResult(currentDownload, R.string.config_error_found, null); + } + if (PreferenceHelper.getUseBridges()) { try { String bridgesJson = bm.getAllBridges("", "", "", ""); provider.setBridges(bridgesJson); } catch (Exception e) { // TODO: send failed to fetch bridges event + return eventSender.setErrorResult(currentDownload, R.string.config_error_found, null); } } else { try { @@ -137,7 +156,7 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro } } - + currentDownload.putBoolean(BROADCAST_RESULT_KEY, true); return currentDownload; } @@ -191,7 +210,6 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro } try { - // TODO: check if provider supports this API endpoint? String gatewaysJson = bm.getAllGateways("", "", ""); Log.d(TAG, "gateways Json reponse: " + gatewaysJson); provider.setGateways(gatewaysJson); @@ -203,7 +221,6 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro } try { - // TODO: check if provider supports this API endpoint? String bridgesJson = bm.getAllBridges("", "", "", ""); Log.d(TAG, "bridges Json reponse: " + bridgesJson); provider.setBridges(bridgesJson); @@ -313,7 +330,25 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro } protected Bundle updateVpnCertificate(Provider provider) { - return null; + Bundle currentDownload = new Bundle(); + BitmaskMobile bm; + try { + bm = new BitmaskMobile(provider.getMainUrl(), new PreferenceHelper.SharedPreferenceStore()); + bm.setDebug(BuildConfig.DEBUG); + } catch (IllegalStateException e) { + return eventSender.setErrorResult(currentDownload, R.string.config_error_found, null); + } + + try { + String cert = bm.getOpenVPNCert(); + currentDownload = loadCredentials(provider, cert); + currentDownload = validateCertificateForProvider(currentDownload, provider); + ProviderSetupObservable.updateProgress(DOWNLOADED_VPN_CERTIFICATE); + } catch (Exception e) { + return eventSender.setErrorResult(currentDownload, R.string.error_json_exception_user_message, null); + } + + return currentDownload; } }