From 8e2704be1d82d6e155721a30351be87c56234af5 Mon Sep 17 00:00:00 2001 From: Anastasia Shuba <41273886+nshuba@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:30:00 -0700 Subject: [PATCH] Fix: force load config reports success with invalid URLs (#4621) Task/Issue URL: https://app.asana.com/0/1204912272578138/1207434405087911/f ### Description Ditto ### Steps to test this PR - [x] Go to Developer Settings --> Override Privacy Remote Config URL - [x] Enable custom config - [x] Type in an invalid URL e.g., `http://example.com:3000:3000/config` - [x] "Force load config" should be disabled --- .../privacy/config/internal/PrivacyConfigInternalViewModel.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/privacy-config/privacy-config-internal/src/main/java/com/duckduckgo/privacy/config/internal/PrivacyConfigInternalViewModel.kt b/privacy-config/privacy-config-internal/src/main/java/com/duckduckgo/privacy/config/internal/PrivacyConfigInternalViewModel.kt index cb5723c083a7..ad7c5dd47509 100644 --- a/privacy-config/privacy-config-internal/src/main/java/com/duckduckgo/privacy/config/internal/PrivacyConfigInternalViewModel.kt +++ b/privacy-config/privacy-config-internal/src/main/java/com/duckduckgo/privacy/config/internal/PrivacyConfigInternalViewModel.kt @@ -32,6 +32,7 @@ import com.duckduckgo.privacy.config.internal.PrivacyConfigInternalViewModel.Com import com.duckduckgo.privacy.config.internal.store.DevPrivacyConfigSettingsDataStore import com.duckduckgo.privacy.config.store.PrivacyConfig import com.duckduckgo.privacy.config.store.PrivacyConfigRepository +import java.net.URI import javax.inject.Inject import kotlinx.coroutines.channels.BufferOverflow.DROP_OLDEST import kotlinx.coroutines.channels.Channel @@ -98,7 +99,8 @@ class PrivacyConfigInternalViewModel @Inject constructor( fun canUrlBeChanged(): Boolean { val storedUrl = store.remotePrivacyConfigUrl val isCustomSettingEnabled = store.useCustomPrivacyConfigUrl - val canBeChanged = isCustomSettingEnabled && !storedUrl.isNullOrEmpty() && URLUtil.isValidUrl(storedUrl) + val validHost = runCatching { URI(storedUrl).host.isNotEmpty() }.getOrDefault(false) + val canBeChanged = isCustomSettingEnabled && !storedUrl.isNullOrEmpty() && URLUtil.isValidUrl(storedUrl) && validHost store.canUrlBeChanged = canBeChanged return canBeChanged }