From bb33db6f34a5923ef895424900bbbc15811c57fb Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 8 Jan 2026 15:09:05 -0600 Subject: [PATCH] PM-26577: Request 'https' scheme for Duo, WebAuthn, and SSO when applicable --- app/src/main/AndroidManifest.xml | 1 + .../util/EnvironmentUrlDataJsonExtensions.kt | 18 +++--- .../auth/repository/AuthRepositoryTest.kt | 2 +- .../EnvironmentUrlDataJsonExtensionsTest.kt | 57 +++++++++---------- .../EnterpriseSignOnViewModelTest.kt | 6 +- .../TwoFactorLoginViewModelTest.kt | 12 ++-- .../util/EnvironmentUrlDataJsonExtensions.kt | 5 +- .../EnvironmentUrlsDataJsonExtensionsTest.kt | 9 +-- 8 files changed, 51 insertions(+), 59 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e1b13180e6..e91a894825 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -169,6 +169,7 @@ + diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensions.kt index 20e7dbe105..a27c9daf82 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensions.kt @@ -23,23 +23,23 @@ private fun EnvironmentUrlDataJson.authTabData( kind: String, ): AuthTabData = when (this.environmentRegion) { EnvironmentRegion.UNITED_STATES -> { - // TODO: PM-26577 Update this to use a "HttpsScheme" - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://$kind-callback", + AuthTabData.HttpsScheme( + host = "bitwarden.com", + path = "$kind-callback", ) } EnvironmentRegion.EUROPEAN_UNION -> { - // TODO: PM-26577 Update this to use a "HttpsScheme" - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://$kind-callback", + AuthTabData.HttpsScheme( + host = "bitwarden.eu", + path = "$kind-callback", ) } EnvironmentRegion.INTERNAL -> { - // TODO: PM-26577 Update this to use a "HttpsScheme" - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://$kind-callback", + AuthTabData.HttpsScheme( + host = "bitwarden.pw", + path = "$kind-callback", ) } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt index 1e615bc567..71541981c9 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt @@ -7548,7 +7548,7 @@ class AuthRepositoryTest { Instant.parse("2023-10-27T12:00:00Z"), ZoneOffset.UTC, ) - private const val DEEPLINK_SCHEME = "bitwarden" + private const val DEEPLINK_SCHEME = "https" private const val UNIQUE_APP_ID = "testUniqueAppId" private const val NAME = "Example Name" private const val EMAIL = "test@bitwarden.com" diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensionsTest.kt index a001eecd36..4a146d2b63 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/util/EnvironmentUrlDataJsonExtensionsTest.kt @@ -9,25 +9,24 @@ class EnvironmentUrlDataJsonExtensionsTest { @Test fun `duoAuthTabData should return the correct AuthTabData for all environments`() { - // TODO: PM-26577 Update these to use a "HttpsScheme" assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://duo-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.com", + path = "duo-callback", ), EnvironmentUrlDataJson.DEFAULT_US.duoAuthTabData, ) assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://duo-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.eu", + path = "duo-callback", ), EnvironmentUrlDataJson.DEFAULT_EU.duoAuthTabData, ) assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://duo-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.pw", + path = "duo-callback", ), DEFAULT_INTERNAL_ENVIRONMENT_URL_DATA.duoAuthTabData, ) @@ -42,25 +41,24 @@ class EnvironmentUrlDataJsonExtensionsTest { @Test fun `webAuthnAuthTabData should return the correct AuthTabData for all environments`() { - // TODO: PM-26577 Update these to use a "HttpsScheme" assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://webauthn-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.com", + path = "webauthn-callback", ), EnvironmentUrlDataJson.DEFAULT_US.webAuthnAuthTabData, ) assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://webauthn-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.eu", + path = "webauthn-callback", ), EnvironmentUrlDataJson.DEFAULT_EU.webAuthnAuthTabData, ) assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://webauthn-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.pw", + path = "webauthn-callback", ), DEFAULT_INTERNAL_ENVIRONMENT_URL_DATA.webAuthnAuthTabData, ) @@ -75,25 +73,24 @@ class EnvironmentUrlDataJsonExtensionsTest { @Test fun `ssoAuthTabData should return the correct AuthTabData for all environments`() { - // TODO: PM-26577 Update these to use a "HttpsScheme" assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://sso-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.com", + path = "sso-callback", ), EnvironmentUrlDataJson.DEFAULT_US.ssoAuthTabData, ) assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://sso-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.eu", + path = "sso-callback", ), EnvironmentUrlDataJson.DEFAULT_EU.ssoAuthTabData, ) assertEquals( - AuthTabData.CustomScheme( - callbackUrl = "bitwarden://sso-callback", - callbackScheme = "bitwarden", + AuthTabData.HttpsScheme( + host = "bitwarden.pw", + path = "sso-callback", ), DEFAULT_INTERNAL_ENVIRONMENT_URL_DATA.ssoAuthTabData, ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt index c1aad07006..03100c4ff6 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt @@ -189,9 +189,9 @@ class EnterpriseSignOnViewModelTest : BaseViewModelTest() { assertEquals( EnterpriseSignOnEvent.NavigateToSsoLogin( uri = ssoUri, - authTabData = AuthTabData.CustomScheme( - callbackUrl = "bitwarden://sso-callback", - callbackScheme = "bitwarden", + authTabData = AuthTabData.HttpsScheme( + host = "bitwarden.com", + path = "sso-callback", ), ), eventFlow.awaitItem(), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt index 197ebb0b88..0f563d4171 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt @@ -430,9 +430,9 @@ class TwoFactorLoginViewModelTest : BaseViewModelTest() { assertEquals( TwoFactorLoginEvent.NavigateToDuo( uri = mockkUri, - authTabData = AuthTabData.CustomScheme( - callbackUrl = "bitwarden://duo-callback", - callbackScheme = "bitwarden", + authTabData = AuthTabData.HttpsScheme( + host = "bitwarden.com", + path = "duo-callback", ), ), awaitItem(), @@ -519,9 +519,9 @@ class TwoFactorLoginViewModelTest : BaseViewModelTest() { assertEquals( TwoFactorLoginEvent.NavigateToWebAuth( uri = mockkUri, - authTabData = AuthTabData.CustomScheme( - callbackUrl = "bitwarden://webauthn-callback", - callbackScheme = "bitwarden", + authTabData = AuthTabData.HttpsScheme( + host = "bitwarden.com", + path = "webauthn-callback", ), ), awaitItem(), diff --git a/data/src/main/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlDataJsonExtensions.kt b/data/src/main/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlDataJsonExtensions.kt index dea8517f29..ecb47ad925 100644 --- a/data/src/main/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlDataJsonExtensions.kt +++ b/data/src/main/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlDataJsonExtensions.kt @@ -41,10 +41,7 @@ val EnvironmentUrlDataJson.appLinksScheme: String EnvironmentRegion.UNITED_STATES, EnvironmentRegion.EUROPEAN_UNION, EnvironmentRegion.INTERNAL, - -> { - // TODO: PM-26577 Update this to use "https" - "bitwarden" - } + -> "https" EnvironmentRegion.SELF_HOSTED -> "bitwarden" } diff --git a/data/src/test/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlsDataJsonExtensionsTest.kt b/data/src/test/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlsDataJsonExtensionsTest.kt index d7ce459a32..9a171732af 100644 --- a/data/src/test/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlsDataJsonExtensionsTest.kt +++ b/data/src/test/kotlin/com/bitwarden/data/repository/util/EnvironmentUrlsDataJsonExtensionsTest.kt @@ -339,8 +339,7 @@ class EnvironmentUrlsDataJsonExtensionsTest { @Test fun `appLinksScheme should return the correct scheme for US environment`() { - // TODO: PM-26577 Update this to use "https" - val expectedScheme = "bitwarden" + val expectedScheme = "https" assertEquals( expectedScheme, @@ -350,8 +349,7 @@ class EnvironmentUrlsDataJsonExtensionsTest { @Test fun `appLinksScheme should return the correct scheme for EU environment`() { - // TODO: PM-26577 Update this to use "https" - val expectedScheme = "bitwarden" + val expectedScheme = "https" assertEquals( expectedScheme, @@ -361,8 +359,7 @@ class EnvironmentUrlsDataJsonExtensionsTest { @Test fun `appLinksScheme should return the correct scheme for internal environment`() { - // TODO: PM-26577 Update this to use "https" - val expectedScheme = "bitwarden" + val expectedScheme = "https" assertEquals( expectedScheme,