From 601a77ad059b3da754c3baaf10b01dbc19b927be Mon Sep 17 00:00:00 2001 From: cyBerta Date: Sat, 15 Apr 2023 13:06:53 +0200 Subject: fix missing domain name of manually added providers in provider selection --- .../providersetup/ProviderManager.java | 58 ++++++++++++---------- .../activities/ProviderListBaseActivity.java | 2 +- 2 files changed, 33 insertions(+), 27 deletions(-) (limited to 'app/src/main/java/se/leap/bitmaskclient/providersetup') diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderManager.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderManager.java index 1ae2a033..775e174a 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderManager.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderManager.java @@ -1,11 +1,28 @@ package se.leap.bitmaskclient.providersetup; +import static se.leap.bitmaskclient.base.models.Constants.EXT_JSON; +import static se.leap.bitmaskclient.base.models.Constants.EXT_PEM; +import static se.leap.bitmaskclient.base.models.Constants.URLS; +import static se.leap.bitmaskclient.base.models.Provider.DOMAIN; +import static se.leap.bitmaskclient.base.models.Provider.GEOIP_URL; +import static se.leap.bitmaskclient.base.models.Provider.MAIN_URL; +import static se.leap.bitmaskclient.base.models.Provider.MOTD_URL; +import static se.leap.bitmaskclient.base.models.Provider.PROVIDER_API_IP; +import static se.leap.bitmaskclient.base.models.Provider.PROVIDER_IP; +import static se.leap.bitmaskclient.base.utils.FileHelper.createFile; +import static se.leap.bitmaskclient.base.utils.FileHelper.persistFile; +import static se.leap.bitmaskclient.base.utils.InputStreamHelper.getInputStreamFrom; +import static se.leap.bitmaskclient.base.utils.InputStreamHelper.inputStreamToJson; +import static se.leap.bitmaskclient.base.utils.InputStreamHelper.loadInputStreamAsString; + import android.content.res.AssetManager; import androidx.annotation.VisibleForTesting; import com.pedrogomez.renderers.AdapteeCollection; +import org.json.JSONObject; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -19,20 +36,6 @@ import java.util.Set; import se.leap.bitmaskclient.base.models.Provider; -import static se.leap.bitmaskclient.base.models.Constants.EXT_JSON; -import static se.leap.bitmaskclient.base.models.Constants.EXT_PEM; -import static se.leap.bitmaskclient.base.models.Constants.URLS; -import static se.leap.bitmaskclient.base.models.Provider.GEOIP_URL; -import static se.leap.bitmaskclient.base.models.Provider.MAIN_URL; -import static se.leap.bitmaskclient.base.models.Provider.MOTD_URL; -import static se.leap.bitmaskclient.base.models.Provider.PROVIDER_API_IP; -import static se.leap.bitmaskclient.base.models.Provider.PROVIDER_IP; -import static se.leap.bitmaskclient.base.utils.FileHelper.createFile; -import static se.leap.bitmaskclient.base.utils.FileHelper.persistFile; -import static se.leap.bitmaskclient.base.utils.InputStreamHelper.extractKeyFromInputStream; -import static se.leap.bitmaskclient.base.utils.InputStreamHelper.getInputStreamFrom; -import static se.leap.bitmaskclient.base.utils.InputStreamHelper.loadInputStreamAsString; - /** * Created by parmegv on 4/12/14. */ @@ -96,11 +99,14 @@ public class ProviderManager implements AdapteeCollection { try { String provider = file.substring(0, file.length() - ".url".length()); InputStream providerFile = assetsManager.open(directory + "/" + file); - mainUrl = extractKeyFromInputStream(providerFile, MAIN_URL); - providerIp = extractKeyFromInputStream(providerFile, PROVIDER_IP); - providerApiIp = extractKeyFromInputStream(providerFile, PROVIDER_API_IP); - geoipUrl = extractKeyFromInputStream(providerFile, GEOIP_URL); - motdUrl = extractKeyFromInputStream(providerFile, MOTD_URL); + JSONObject providerConfig = inputStreamToJson(providerFile); + if (providerConfig != null) { + mainUrl = providerConfig.optString(MAIN_URL); + providerIp = providerConfig.optString(PROVIDER_IP); + providerApiIp = providerConfig.optString(PROVIDER_API_IP); + geoipUrl = providerConfig.optString(GEOIP_URL); + motdUrl = providerConfig.optString(MOTD_URL); + } certificate = loadInputStreamAsString(assetsManager.open(provider + EXT_PEM)); providerDefinition = loadInputStreamAsString(assetsManager.open(provider + EXT_JSON)); } catch (IOException e) { @@ -116,20 +122,20 @@ public class ProviderManager implements AdapteeCollection { private void addCustomProviders(File externalFilesDir) { this.externalFilesDir = externalFilesDir; customProviders = externalFilesDir != null && externalFilesDir.isDirectory() ? - providersFromFiles(externalFilesDir.list()) : + customProvidersFromFiles(externalFilesDir.list()) : new HashSet<>(); customProviderURLs = getProviderUrlSetFromProviderSet(customProviders); } - private Set providersFromFiles(String[] files) { + private Set customProvidersFromFiles(String[] files) { Set providers = new HashSet<>(); try { for (String file : files) { InputStream inputStream = getInputStreamFrom(externalFilesDir.getAbsolutePath() + "/" + file); - String mainUrl = extractKeyFromInputStream(inputStream, MAIN_URL); - String providerIp = extractKeyFromInputStream(inputStream, PROVIDER_IP); - String providerApiIp = extractKeyFromInputStream(inputStream, PROVIDER_API_IP); - providers.add(new Provider(mainUrl, providerIp, providerApiIp)); + JSONObject providerConfig = inputStreamToJson(inputStream); + String mainUrl = providerConfig.optString(MAIN_URL); + String domain = providerConfig.optString(DOMAIN); + providers.add(Provider.createCustomProvider(mainUrl, domain)); } } catch (FileNotFoundException | NullPointerException e) { e.printStackTrace(); @@ -238,7 +244,7 @@ public class ProviderManager implements AdapteeCollection { */ private void deleteLegacyCustomProviders() throws IOException, SecurityException { Set persistedCustomProviders = externalFilesDir != null && externalFilesDir.isDirectory() ? - providersFromFiles(externalFilesDir.list()) : new HashSet(); + customProvidersFromFiles(externalFilesDir.list()) : new HashSet(); persistedCustomProviders.removeAll(customProviders); for (Provider providerToDelete : persistedCustomProviders) { File providerFile = createFile(externalFilesDir, providerToDelete.getName() + EXT_JSON); diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/ProviderListBaseActivity.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/ProviderListBaseActivity.java index 90ebfb4d..eb9898b8 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/ProviderListBaseActivity.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/activities/ProviderListBaseActivity.java @@ -114,7 +114,7 @@ public abstract class ProviderListBaseActivity extends ProviderSetupBaseActivity } public void showAndSelectProvider(String newURL) { - provider = new Provider(newURL, null, null); + provider = new Provider(newURL); autoSelectProvider(); } -- cgit v1.2.3