From 92ba38c831b3d14988f878661753fa7dae7d86f2 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Fri, 30 Jan 2026 13:22:00 -0500 Subject: [PATCH] [PM-31446] fix:Append assetlinks.json path to DAL URLs (#6447) --- .../manager/BitwardenCredentialManagerImpl.kt | 13 +++++++++++-- .../manager/BitwardenCredentialManagerTest.kt | 5 +++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerImpl.kt index 31e82a1892..1f6ff9d545 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerImpl.kt @@ -50,6 +50,8 @@ import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json import timber.log.Timber +private const val DAL_ROUTE = ".well-known/assetlinks.json" + /** * Primary implementation of [BitwardenCredentialManager]. */ @@ -123,7 +125,7 @@ class BitwardenCredentialManagerImpl( .getSignatureFingerprintAsHexString() .orEmpty(), host = hostUrl, - assetLinkUrl = hostUrl, + assetLinkUrl = hostUrl.toDigitalAssetLinkUrl(), ), ) } @@ -316,7 +318,7 @@ class BitwardenCredentialManagerImpl( packageName = callingAppInfo.packageName, sha256CertFingerprint = signatureFingerprint, host = host, - assetLinkUrl = host, + assetLinkUrl = host.toDigitalAssetLinkUrl(), ), ) @@ -428,6 +430,13 @@ class BitwardenCredentialManagerImpl( ?.relyingParty ?.id ?.prefixHttpsIfNecessaryOrNull() + + private fun String.toDigitalAssetLinkUrl(): String = + when { + this.endsWith(DAL_ROUTE) -> this + this.endsWith("/") -> "$this$DAL_ROUTE" + else -> "$this/$DAL_ROUTE" + } } private const val MAX_AUTHENTICATION_ATTEMPTS = 5 diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerTest.kt index 94060f0db9..5f2974640d 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/credentials/manager/BitwardenCredentialManagerTest.kt @@ -681,7 +681,8 @@ class BitwardenCredentialManagerTest { DEFAULT_PACKAGE_NAME, DEFAULT_CERT_FINGERPRINT, "https://${mockAssertionOptions.relyingPartyId!!}", - "https://${mockAssertionOptions.relyingPartyId}", + @Suppress("MaxLineLength") + "https://${mockAssertionOptions.relyingPartyId}/.well-known/assetlinks.json", ), ), requestCaptureSlot.captured.origin, @@ -1499,7 +1500,7 @@ private val DEFAULT_ANDROID_ORIGIN = Origin.Android( packageName = DEFAULT_PACKAGE_NAME, sha256CertFingerprint = DEFAULT_CERT_FINGERPRINT, host = "https://$DEFAULT_HOST", - assetLinkUrl = "https://$DEFAULT_HOST", + assetLinkUrl = "https://$DEFAULT_HOST/.well-known/assetlinks.json", ), ) private val DEFAULT_WEB_ORIGIN = Origin.Web("bitwarden.com")