From fd0b174ac99d38b029949b95a296bedb92198a3f Mon Sep 17 00:00:00 2001 From: cyBerta <cyberta@riseup.net> Date: Thu, 27 Mar 2025 02:45:23 +0100 Subject: [PATCH 1/4] set bitmask-core's debug mode before fetching ServiceInfos in case app is a debug build --- .../leap/bitmaskclient/providersetup/ProviderApiManagerV5.java | 1 + 1 file changed, 1 insertion(+) 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 2e2497d51..f8492f0a0 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java @@ -103,6 +103,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); } -- GitLab From 2640a2e5b7da2c308033a433ed5c8df0b3f7229c Mon Sep 17 00:00:00 2001 From: cyBerta <cyberta@riseup.net> Date: Thu, 27 Mar 2025 02:49:56 +0100 Subject: [PATCH 2/4] implement updating VPN certificate in v5, also fixes a NPE --- .../providersetup/ProviderApiManagerV5.java | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) 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 f8492f0a0..d5640126d 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; } } @@ -314,7 +323,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; } } -- GitLab From 495252b807bbf2d5e27ed7f3d86e6ba571eeb391 Mon Sep 17 00:00:00 2001 From: cyBerta <cyberta@riseup.net> Date: Thu, 27 Mar 2025 02:54:16 +0100 Subject: [PATCH 3/4] fix updateServiceInfo() in v5, ensure the authentication token is used (if available) when fetching bridges or gateways --- .../providersetup/ProviderApiManagerV5.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 d5640126d..71394edad 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java @@ -130,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 { @@ -147,7 +156,7 @@ public class ProviderApiManagerV5 extends ProviderApiManagerBase implements IPro } } - + currentDownload.putBoolean(BROADCAST_RESULT_KEY, true); return currentDownload; } -- GitLab From c7cebef8ea796c7c43d40a31fea4034010185cb5 Mon Sep 17 00:00:00 2001 From: cyBerta <cyberta@riseup.net> Date: Thu, 27 Mar 2025 02:55:01 +0100 Subject: [PATCH 4/4] remove deprecated TODOs --- .../leap/bitmaskclient/providersetup/ProviderApiManagerV5.java | 2 -- 1 file changed, 2 deletions(-) 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 71394edad..2680f612f 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerV5.java @@ -210,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); @@ -222,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); -- GitLab