From 9e4119fe329c2fe66bf74922008107d5c504f138 Mon Sep 17 00:00:00 2001 From: Andrew Haisting <142518658+ahaisting-livefront@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:27:12 -0500 Subject: [PATCH] BITAU-97 Add `AuthenticatorBridgeManager` (#3987) --- ...enticatorbridge-0.1.0-SNAPSHOT-release.aar | Bin 57490 -> 76232 bytes app/libs/bridge-0.1.0-SNAPSHOT-release.aar | Bin 0 -> 57490 bytes authenticatorbridge/README.md | 15 + authenticatorbridge/build.gradle.kts | 3 + .../factory/AuthenticatorBridgeFactory.kt | 33 ++ .../manager/AuthenticatorBridgeManager.kt | 17 + .../manager/AuthenticatorBridgeManagerImpl.kt | 229 +++++++++ .../manager/model/AccountSyncState.kt | 34 ++ .../AuthenticatorBridgeConnectionType.kt | 19 + ...enticatorBridgeConnectionTypeExtensions.kt | 12 + .../AuthenticatorBridgeCallbackProvider.kt | 21 + ...StubAuthenticatorBridgeCallbackProvider.kt | 18 + .../provider/SymmetricKeyStorageProvider.kt | 14 + .../manager/AuthenticatorBridgeManagerTest.kt | 440 ++++++++++++++++++ ...catorBridgeConnectionTypeExtensionsTest.kt | 24 + .../authenticatorbridge/util/FakeLifecycle.kt | 45 ++ .../util/FakeLifecycleOwner.kt | 10 + .../util/FakeSymmetricKeyStorageProvider.kt | 11 + ...TestAuthenticatorBridgeCallbackProvider.kt | 19 + gradle/libs.versions.toml | 1 + 20 files changed, 965 insertions(+) create mode 100644 app/libs/bridge-0.1.0-SNAPSHOT-release.aar create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/factory/AuthenticatorBridgeFactory.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManager.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerImpl.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AccountSyncState.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AuthenticatorBridgeConnectionType.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensions.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/AuthenticatorBridgeCallbackProvider.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/StubAuthenticatorBridgeCallbackProvider.kt create mode 100644 authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/SymmetricKeyStorageProvider.kt create mode 100644 authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerTest.kt create mode 100644 authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensionsTest.kt create mode 100644 authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycle.kt create mode 100644 authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycleOwner.kt create mode 100644 authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeSymmetricKeyStorageProvider.kt create mode 100644 authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/TestAuthenticatorBridgeCallbackProvider.kt diff --git a/app/libs/authenticatorbridge-0.1.0-SNAPSHOT-release.aar b/app/libs/authenticatorbridge-0.1.0-SNAPSHOT-release.aar index d1ed04c5b5d87f39d19a5716f38295dffa4b9ff3..28a1f3c8c5e7ba3a386f20971a0aba75273a6e42 100644 GIT binary patch delta 74224 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
  • X;1eS-%(#P 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 T000gE4gjA7007@6aWAS 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 [!IMPORTANT] > The SDK does not come packaged with these dependencies, so consumers of the SDK must provide them. +- **AndroidX Appcompat** + - https://developer.android.com/jetpack/androidx/releases/appcompat + - Purpose: Allows access to new APIs on older API versions. + - License: Apache 2.0 + +- **AndroidX Lifecycle** + - https://developer.android.com/jetpack/androidx/releases/lifecycle + - Purpose: Lifecycle aware components and tooling. + - License: Apache 2.0 + +- **kotlinx.coroutines** + - https://github.com/Kotlin/kotlinx.coroutines + - Purpose: Kotlin coroutines library for asynchronous and reactive code. + - License: Apache 2.0 + - **kotlinx.serialization** - https://github.com/Kotlin/kotlinx.serialization/ - Purpose: JSON serialization library for Kotlin. diff --git a/authenticatorbridge/build.gradle.kts b/authenticatorbridge/build.gradle.kts index c878a6b75..cadfb31db 100644 --- a/authenticatorbridge/build.gradle.kts +++ b/authenticatorbridge/build.gradle.kts @@ -60,7 +60,10 @@ kotlin { dependencies { // SDK dependencies: + implementation(libs.androidx.appcompat) + implementation(libs.androidx.lifecycle.process) implementation(libs.kotlinx.serialization) + implementation(libs.kotlinx.coroutines.core) // Test environment dependencies: testImplementation(libs.junit.junit5) diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/factory/AuthenticatorBridgeFactory.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/factory/AuthenticatorBridgeFactory.kt new file mode 100644 index 000000000..018ac85c1 --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/factory/AuthenticatorBridgeFactory.kt @@ -0,0 +1,33 @@ +package com.bitwarden.authenticatorbridge.factory + +import android.content.Context +import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManager +import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManagerImpl +import com.bitwarden.authenticatorbridge.manager.model.AuthenticatorBridgeConnectionType +import com.bitwarden.authenticatorbridge.provider.SymmetricKeyStorageProvider + +/** + * Factory for supplying implementation instances of Authenticator Bridge SDK interfaces. + */ +class AuthenticatorBridgeFactory( + context: Context, +) { + + private val applicationContext = context.applicationContext + + /** + * Gets a new instance of [AuthenticatorBridgeManager]. + * + * @param connectionType Specifies which build variant to connect to. + * @param symmetricKeyStorageProvider Provides access to local storage of the symmetric + * encryption key. + */ + fun getAuthenticatorBridgeManager( + connectionType: AuthenticatorBridgeConnectionType, + symmetricKeyStorageProvider: SymmetricKeyStorageProvider, + ): AuthenticatorBridgeManager = AuthenticatorBridgeManagerImpl( + context = applicationContext, + connectionType = connectionType, + symmetricKeyStorageProvider = symmetricKeyStorageProvider, + ) +} diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManager.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManager.kt new file mode 100644 index 000000000..4871017d7 --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManager.kt @@ -0,0 +1,17 @@ +package com.bitwarden.authenticatorbridge.manager + +import com.bitwarden.authenticatorbridge.IAuthenticatorBridgeService +import com.bitwarden.authenticatorbridge.manager.model.AccountSyncState +import kotlinx.coroutines.flow.StateFlow + +/** + * Provides an API to make it simpler for consuming applications to + * query [IAuthenticatorBridgeService]. + */ +interface AuthenticatorBridgeManager { + + /** + * State flow representing the current [AccountSyncState]. + */ + val accountSyncStateFlow: StateFlow +} diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerImpl.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerImpl.kt new file mode 100644 index 000000000..62c2803ad --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerImpl.kt @@ -0,0 +1,229 @@ +package com.bitwarden.authenticatorbridge.manager + +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection +import android.content.pm.PackageManager.NameNotFoundException +import android.os.IBinder +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ProcessLifecycleOwner +import com.bitwarden.authenticatorbridge.IAuthenticatorBridgeService +import com.bitwarden.authenticatorbridge.manager.model.AccountSyncState +import com.bitwarden.authenticatorbridge.manager.model.AuthenticatorBridgeConnectionType +import com.bitwarden.authenticatorbridge.manager.util.toPackageName +import com.bitwarden.authenticatorbridge.model.EncryptedSharedAccountData +import com.bitwarden.authenticatorbridge.provider.AuthenticatorBridgeCallbackProvider +import com.bitwarden.authenticatorbridge.provider.StubAuthenticatorBridgeCallbackProvider +import com.bitwarden.authenticatorbridge.provider.SymmetricKeyStorageProvider +import com.bitwarden.authenticatorbridge.util.decrypt +import com.bitwarden.authenticatorbridge.util.toFingerprint +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +private const val AUTHENTICATOR_BRIDGE_SERVICE_CLASS = + "com.x8bit.bitwarden.data.platform.service.AuthenticatorBridgeService" + +/** + * Default implementation of [AuthenticatorBridgeManager]. + * + * @param context The Context that will be used to bind to AuthenticatorBridgeService. + * @param connectionType Specifies which build variant to connect to. + * @param symmetricKeyStorageProvider Provides access to local storage of the symmetric encryption + * key. + * @param callbackProvider Provides a way to construct a service callback that can be mocked in + * tests. + * @param processLifecycleOwner Lifecycle owner that is used to listen for start/stop + * lifecycle events. + */ +internal class AuthenticatorBridgeManagerImpl( + private val connectionType: AuthenticatorBridgeConnectionType, + private val symmetricKeyStorageProvider: SymmetricKeyStorageProvider, + callbackProvider: AuthenticatorBridgeCallbackProvider = StubAuthenticatorBridgeCallbackProvider(), + context: Context, + processLifecycleOwner: LifecycleOwner = ProcessLifecycleOwner.get(), +) : AuthenticatorBridgeManager { + + private val applicationContext = context.applicationContext + + /** + * Main AuthenticatorBridgeService access point. + */ + private var bridgeService: IAuthenticatorBridgeService? = null + + /** + * Internal state of [accountSyncStateFlow]. + */ + private val mutableSharedAccountsStateFlow: MutableStateFlow = + MutableStateFlow( + if (isBitwardenAppInstalled()) { + AccountSyncState.Loading + } else { + AccountSyncState.AppNotInstalled + } + ) + + /** + * Callback registered with AuthenticatorBridgeService. + */ + private val authenticatorBridgeCallback = callbackProvider.getCallback(::onAccountsSync) + + /** + * Service connection that listens for connected and disconnected service events. + */ + private val bridgeServiceConnection = object : ServiceConnection { + override fun onServiceConnected(name: ComponentName, service: IBinder) { + onServiceConnected(service) + } + + override fun onServiceDisconnected(name: ComponentName) { + onServiceDisconnected() + } + } + + override val accountSyncStateFlow: StateFlow = + mutableSharedAccountsStateFlow.asStateFlow() + + init { + // Listen for lifecycle events + processLifecycleOwner.lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onStart(owner: LifecycleOwner) { + bindService() + } + + override fun onStop(owner: LifecycleOwner) { + unbindService() + } + }, + ) + } + + private fun bindService() { + if (!isBitwardenAppInstalled()) { + mutableSharedAccountsStateFlow.value = AccountSyncState.AppNotInstalled + return + } + val intent = Intent().apply { + component = ComponentName( + connectionType.toPackageName(), + AUTHENTICATOR_BRIDGE_SERVICE_CLASS, + ) + } + + val isBound = try { + applicationContext.bindService( + intent, + bridgeServiceConnection, + Context.BIND_AUTO_CREATE, + ) + } catch (e: SecurityException) { + unbindService() + false + } + + if (!isBound) { + mutableSharedAccountsStateFlow.value = AccountSyncState.Error + } + } + + private fun onAccountsSync(data: EncryptedSharedAccountData) { + // Received account sync update. Decrypt with local symmetric key and update StateFlow: + mutableSharedAccountsStateFlow.value = symmetricKeyStorageProvider.symmetricKey + ?.let { data.decrypt(it) } + ?.getOrNull() + ?.let { AccountSyncState.Success(it.accounts) } + ?: AccountSyncState.Error + } + + private fun onServiceConnected(binder: IBinder) { + val service = IAuthenticatorBridgeService.Stub + .asInterface(binder) + .also { bridgeService = it } + + // TODO: Add check for version mismatch between client and server SDKs: BITAU-72 + + // Ensure we are using the correct symmetric key: + val localKeyFingerprint = + symmetricKeyStorageProvider.symmetricKey?.toFingerprint()?.getOrNull() + + // Query bridge service to see if we have a matching symmetric key: + val haveCorrectKey = service + .safeCall { checkSymmetricEncryptionKeyFingerprint(localKeyFingerprint) } + .fold( + onSuccess = { it }, + onFailure = { false }, + ) + + if (!haveCorrectKey) { + // If we don't have the correct key, query for key: + service + .safeCall { symmetricEncryptionKeyData } + .fold( + onSuccess = { + symmetricKeyStorageProvider.symmetricKey = it + }, + onFailure = { + mutableSharedAccountsStateFlow.value = AccountSyncState.Error + unbindService() + return + }, + ) + + } + + if (symmetricKeyStorageProvider.symmetricKey == null) { + // This means bridgeService returned a null key, which means we can make + // no valid operations. We should disconnect form the service and expose to the + // calling application that authenticator sync is not enabled. + mutableSharedAccountsStateFlow.value = AccountSyncState.SyncNotEnabled + unbindService() + return + } + + // Register callback: + service.safeCall { registerBridgeServiceCallback(authenticatorBridgeCallback) } + + // Sync data: + service.safeCall { syncAccounts() } + } + + private fun onServiceDisconnected() { + bridgeService = null + } + + private fun unbindService() { + bridgeService?.safeCall { unregisterBridgeServiceCallback(authenticatorBridgeCallback) } + bridgeService = null + @Suppress("TooGenericExceptionCaught") + try { + applicationContext.unbindService(bridgeServiceConnection) + } catch (_: Exception) { + // We want to be super safe when unbinding to assure no crashes. + } + } + + private fun isBitwardenAppInstalled(): Boolean = + // Check to see if correct Bitwarden app is installed: + try { + applicationContext.packageManager.getPackageInfo(connectionType.toPackageName(), 0) + true + } catch (e: NameNotFoundException) { + false + } +} + +/** + * Helper function for wrapping all calls to [IAuthenticatorBridgeService] around try catch. + * + * This is important because all calls to [IAuthenticatorBridgeService] can throw + * DeadObjectExceptions as well as RemoteExceptions. + */ +private fun IAuthenticatorBridgeService.safeCall( + action: IAuthenticatorBridgeService.() -> T, +): Result = + runCatching { + this.let { action.invoke(it) } + } diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AccountSyncState.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AccountSyncState.kt new file mode 100644 index 000000000..e8e479470 --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AccountSyncState.kt @@ -0,0 +1,34 @@ +package com.bitwarden.authenticatorbridge.manager.model + +import com.bitwarden.authenticatorbridge.model.SharedAccountData + +/** + * Models various states of account syncing. + */ +sealed class AccountSyncState { + + /** + * The Bitwarden app is not installed and therefore accounts cannot be synced. + */ + data object AppNotInstalled : AccountSyncState() + + /** + * Something went wrong syncing accounts. + */ + data object Error : AccountSyncState() + + /** + * The user needs to enable authenticator syncing from the bitwarden app. + */ + data object SyncNotEnabled : AccountSyncState() + + /** + * Accounts are being synced. + */ + data object Loading : AccountSyncState() + + /** + * Accounts successfully synced. + */ + data class Success(val accounts: List) : AccountSyncState() +} diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AuthenticatorBridgeConnectionType.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AuthenticatorBridgeConnectionType.kt new file mode 100644 index 000000000..c213b170b --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/model/AuthenticatorBridgeConnectionType.kt @@ -0,0 +1,19 @@ +package com.bitwarden.authenticatorbridge.manager.model + +import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManager + +/** + * Models different connection types for [AuthenticatorBridgeManager]. + */ +enum class AuthenticatorBridgeConnectionType { + + /** + * Connect to release build variant. + */ + RELEASE, + + /** + * Connect to dev build variant. + */ + DEV, +} diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensions.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensions.kt new file mode 100644 index 000000000..7687a745e --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensions.kt @@ -0,0 +1,12 @@ +package com.bitwarden.authenticatorbridge.manager.util + +import com.bitwarden.authenticatorbridge.manager.model.AuthenticatorBridgeConnectionType + +/** + * Convert a [AuthenticatorBridgeConnectionType] to raw package name for connection. + */ +internal fun AuthenticatorBridgeConnectionType.toPackageName() = + when (this) { + AuthenticatorBridgeConnectionType.RELEASE -> "com.x8bit.bitwarden" + AuthenticatorBridgeConnectionType.DEV -> "com.x8bit.bitwarden.dev" + } diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/AuthenticatorBridgeCallbackProvider.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/AuthenticatorBridgeCallbackProvider.kt new file mode 100644 index 000000000..9b1f9bc69 --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/AuthenticatorBridgeCallbackProvider.kt @@ -0,0 +1,21 @@ +package com.bitwarden.authenticatorbridge.provider + +import com.bitwarden.authenticatorbridge.IAuthenticatorBridgeServiceCallback +import com.bitwarden.authenticatorbridge.model.EncryptedSharedAccountData + +/** + * Provides an implementation of [IAuthenticatorBridgeServiceCallback]. This is useful + * for writing unit tests that don't touch Binder logic. + */ +interface AuthenticatorBridgeCallbackProvider { + + /** + * Get a [IAuthenticatorBridgeServiceCallback] that will call delegate [onAccountsSync] call + * to the given lambda. + * + * @param onAccountsSync Lambda that will be invoked when [onAccountsSync] calls back. + */ + fun getCallback( + onAccountsSync: (EncryptedSharedAccountData) -> Unit, + ): IAuthenticatorBridgeServiceCallback +} diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/StubAuthenticatorBridgeCallbackProvider.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/StubAuthenticatorBridgeCallbackProvider.kt new file mode 100644 index 000000000..1cbacce6a --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/StubAuthenticatorBridgeCallbackProvider.kt @@ -0,0 +1,18 @@ +package com.bitwarden.authenticatorbridge.provider + +import com.bitwarden.authenticatorbridge.IAuthenticatorBridgeServiceCallback +import com.bitwarden.authenticatorbridge.model.EncryptedSharedAccountData + +/** + * Default implementation of [AuthenticatorBridgeCallbackProvider] that provides a live + * [IAuthenticatorBridgeServiceCallback.Stub] implementation. + */ +class StubAuthenticatorBridgeCallbackProvider : AuthenticatorBridgeCallbackProvider { + + override fun getCallback( + onAccountsSync: (EncryptedSharedAccountData) -> Unit, + ): IAuthenticatorBridgeServiceCallback = object : IAuthenticatorBridgeServiceCallback.Stub() { + + override fun onAccountsSync(data: EncryptedSharedAccountData) = onAccountsSync.invoke(data) + } +} diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/SymmetricKeyStorageProvider.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/SymmetricKeyStorageProvider.kt new file mode 100644 index 000000000..27001f2a1 --- /dev/null +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/provider/SymmetricKeyStorageProvider.kt @@ -0,0 +1,14 @@ +package com.bitwarden.authenticatorbridge.provider + +import com.bitwarden.authenticatorbridge.model.SymmetricEncryptionKeyData + +/** + * Provides a way for calling Applications to implement symmetric key storage. + */ +interface SymmetricKeyStorageProvider { + + /** + * Stored symmetric encryption key. + */ + var symmetricKey: SymmetricEncryptionKeyData? +} diff --git a/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerTest.kt b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerTest.kt new file mode 100644 index 000000000..bbcb1740e --- /dev/null +++ b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/AuthenticatorBridgeManagerTest.kt @@ -0,0 +1,440 @@ +package com.bitwarden.authenticatorbridge.manager + +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection +import android.content.pm.PackageManager.NameNotFoundException +import com.bitwarden.authenticatorbridge.IAuthenticatorBridgeService +import com.bitwarden.authenticatorbridge.IAuthenticatorBridgeServiceCallback +import com.bitwarden.authenticatorbridge.manager.model.AccountSyncState +import com.bitwarden.authenticatorbridge.manager.model.AuthenticatorBridgeConnectionType +import com.bitwarden.authenticatorbridge.model.EncryptedSharedAccountData +import com.bitwarden.authenticatorbridge.model.SharedAccountData +import com.bitwarden.authenticatorbridge.util.FakeLifecycleOwner +import com.bitwarden.authenticatorbridge.util.FakeSymmetricKeyStorageProvider +import com.bitwarden.authenticatorbridge.util.TestAuthenticatorBridgeCallbackProvider +import com.bitwarden.authenticatorbridge.util.decrypt +import com.bitwarden.authenticatorbridge.util.generateSecretKey +import com.bitwarden.authenticatorbridge.util.toFingerprint +import com.bitwarden.authenticatorbridge.util.toSymmetricEncryptionKeyData +import io.mockk.every +import io.mockk.just +import io.mockk.mockk +import io.mockk.mockkConstructor +import io.mockk.mockkStatic +import io.mockk.runs +import io.mockk.slot +import io.mockk.unmockkConstructor +import io.mockk.unmockkStatic +import io.mockk.verify +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test + +class AuthenticatorBridgeManagerTest { + + private val context = mockk { + every { applicationContext } returns this + every { + packageManager.getPackageInfo("com.x8bit.bitwarden.dev", 0) + } returns mockk() + } + private val mockBridgeService: IAuthenticatorBridgeService = mockk() + private val fakeLifecycleOwner = FakeLifecycleOwner() + private val fakeSymmetricKeyStorageProvider = FakeSymmetricKeyStorageProvider() + private val testAuthenticatorBridgeCallbackProvider = TestAuthenticatorBridgeCallbackProvider() + + private val manager: AuthenticatorBridgeManagerImpl = AuthenticatorBridgeManagerImpl( + context = context, + connectionType = AuthenticatorBridgeConnectionType.DEV, + symmetricKeyStorageProvider = fakeSymmetricKeyStorageProvider, + callbackProvider = testAuthenticatorBridgeCallbackProvider, + processLifecycleOwner = fakeLifecycleOwner, + ) + + @BeforeEach + fun setup() { + mockkConstructor(Intent::class) + mockkStatic(IAuthenticatorBridgeService.Stub::class) + mockkStatic(EncryptedSharedAccountData::decrypt) + } + + @AfterEach + fun teardown() { + unmockkConstructor(Intent::class) + unmockkStatic(IAuthenticatorBridgeService.Stub::class) + unmockkStatic(EncryptedSharedAccountData::decrypt) + } + + @Test + fun `initial AccountSyncState should be Loading when Bitwarden app is present`() { + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + } + + @Test + fun `initial AccountSyncState should be AppNotInstalled when Bitwarden app is not present`() { + every { + context.packageManager.getPackageInfo("com.x8bit.bitwarden.dev", 0) + } throws NameNotFoundException() + val manager = AuthenticatorBridgeManagerImpl( + context = context, + connectionType = AuthenticatorBridgeConnectionType.DEV, + symmetricKeyStorageProvider = fakeSymmetricKeyStorageProvider, + callbackProvider = testAuthenticatorBridgeCallbackProvider, + processLifecycleOwner = fakeLifecycleOwner, + ) + assertEquals(AccountSyncState.AppNotInstalled, manager.accountSyncStateFlow.value) + } + + @Test + fun `onStart when bindService fails should set state to error`() { + val mockIntent: Intent = mockk() + every { + anyConstructed().setComponent(any()) + } returns mockIntent + + every { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } returns false + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + + assertEquals(AccountSyncState.Error, manager.accountSyncStateFlow.value) + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + } + + @Test + fun `onStart when Bitwarden app is not present should set state to AppNotInstalled`() { + val mockIntent: Intent = mockk() + every { + context.packageManager.getPackageInfo("com.x8bit.bitwarden.dev", 0) + } throws NameNotFoundException() + every { + anyConstructed().setComponent(any()) + } returns mockIntent + + every { + context.bindService(any(), any(), Context.BIND_AUTO_CREATE) + } throws SecurityException() + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + + assertEquals(AccountSyncState.AppNotInstalled, manager.accountSyncStateFlow.value) + } + + @Test + fun `onStart when bindService throws security exception should set state to error`() { + val mockIntent: Intent = mockk() + every { + anyConstructed().setComponent(any()) + } returns mockIntent + + every { + context.bindService(any(), any(), Context.BIND_AUTO_CREATE) + } throws SecurityException() + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + + assertEquals(AccountSyncState.Error, manager.accountSyncStateFlow.value) + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + } + + @Test + fun `onStart when Bitwarden app is present and bindService succeeds should set state to Loading before service calls back`() { + val mockIntent: Intent = mockk() + every { + anyConstructed().setComponent(any()) + } returns mockIntent + + every { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + } + + @Test + @Suppress("MaxLineLength") + fun `onServiceConnected when symmetric key is not present and service returns null symmetric key state should be SyncNotEnabled and should unbind service`() { + val serviceConnection = slot() + val mockIntent: Intent = mockk() + fakeSymmetricKeyStorageProvider.symmetricKey = null + every { mockBridgeService.symmetricEncryptionKeyData } returns null + every { IAuthenticatorBridgeService.Stub.asInterface(any()) } returns mockBridgeService + every { + anyConstructed().setComponent(any()) + } returns mockIntent + every { context.unbindService(any()) } just runs + every { + context.bindService( + any(), + capture(serviceConnection), + Context.BIND_AUTO_CREATE + ) + } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + serviceConnection.captured.onServiceConnected(mockk(), mockk()) + + assertEquals(AccountSyncState.SyncNotEnabled, manager.accountSyncStateFlow.value) + verify { mockBridgeService.symmetricEncryptionKeyData } + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + verify { context.unbindService(any()) } + } + + @Test + @Suppress("MaxLineLength") + fun `onServiceConnected when symmetric key does not match should set symmetric key from service`() { + fakeSymmetricKeyStorageProvider.symmetricKey = null + every { mockBridgeService.symmetricEncryptionKeyData } returns SYMMETRIC_KEY + val serviceConnection = slot() + val mockIntent: Intent = mockk() + every { IAuthenticatorBridgeService.Stub.asInterface(any()) } returns mockBridgeService + every { + anyConstructed().setComponent(any()) + } returns mockIntent + every { context.unbindService(any()) } just runs + every { + context.bindService( + any(), + capture(serviceConnection), + Context.BIND_AUTO_CREATE + ) + } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + serviceConnection.captured.onServiceConnected(mockk(), mockk()) + + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + assertEquals(SYMMETRIC_KEY, fakeSymmetricKeyStorageProvider.symmetricKey) + verify { mockBridgeService.symmetricEncryptionKeyData } + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + } + + @Test + @Suppress("MaxLineLength") + fun `onServiceConnected when symmetric key does match should not query for symmetric key`() { + fakeSymmetricKeyStorageProvider.symmetricKey = SYMMETRIC_KEY + every { + mockBridgeService.checkSymmetricEncryptionKeyFingerprint( + SYMMETRIC_KEY.toFingerprint().getOrNull() + ) + } returns true + val serviceConnection = slot() + val mockIntent: Intent = mockk() + every { IAuthenticatorBridgeService.Stub.asInterface(any()) } returns mockBridgeService + every { + anyConstructed().setComponent(any()) + } returns mockIntent + every { context.unbindService(any()) } just runs + every { + context.bindService( + any(), + capture(serviceConnection), + Context.BIND_AUTO_CREATE + ) + } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + serviceConnection.captured.onServiceConnected(mockk(), mockk()) + + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + assertEquals(SYMMETRIC_KEY, fakeSymmetricKeyStorageProvider.symmetricKey) + verify(exactly = 0) { mockBridgeService.symmetricEncryptionKeyData } + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + verify { mockBridgeService.registerBridgeServiceCallback(any()) } + verify { mockBridgeService.syncAccounts() } + } + + @Test + @Suppress("MaxLineLength") + fun `onServiceConnected when symmetric key does not match and query for key fails state should be error`() { + fakeSymmetricKeyStorageProvider.symmetricKey = SYMMETRIC_KEY + every { + mockBridgeService.checkSymmetricEncryptionKeyFingerprint( + SYMMETRIC_KEY.toFingerprint().getOrNull() + ) + } returns false + every { + mockBridgeService.symmetricEncryptionKeyData + } throws RuntimeException() + val serviceConnection = slot() + val mockIntent: Intent = mockk() + every { IAuthenticatorBridgeService.Stub.asInterface(any()) } returns mockBridgeService + every { + anyConstructed().setComponent(any()) + } returns mockIntent + every { context.unbindService(any()) } just runs + every { + context.bindService( + any(), + capture(serviceConnection), + Context.BIND_AUTO_CREATE + ) + } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + serviceConnection.captured.onServiceConnected(mockk(), mockk()) + + assertEquals(AccountSyncState.Error, manager.accountSyncStateFlow.value) + assertEquals(SYMMETRIC_KEY, fakeSymmetricKeyStorageProvider.symmetricKey) + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + verify { context.unbindService(any()) } + verify { mockBridgeService.symmetricEncryptionKeyData } + } + + @Test + @Suppress("MaxLineLength") + fun `onAccountsSync should set AccountSyncState to decrypted response`() { + val expectedAccounts = listOf( + mockk() + ) + val encryptedAccounts: EncryptedSharedAccountData = mockk() + val decryptedAccounts: SharedAccountData = mockk { + every { accounts } returns expectedAccounts + } + mockkStatic(EncryptedSharedAccountData::decrypt) + every { encryptedAccounts.decrypt(SYMMETRIC_KEY) } returns Result.success(decryptedAccounts) + every { + mockBridgeService.checkSymmetricEncryptionKeyFingerprint( + SYMMETRIC_KEY.toFingerprint().getOrNull() + ) + } returns true + fakeSymmetricKeyStorageProvider.symmetricKey = SYMMETRIC_KEY + val serviceConnection = slot() + val callback = slot() + val mockIntent: Intent = mockk() + every { IAuthenticatorBridgeService.Stub.asInterface(any()) } returns mockBridgeService + every { mockBridgeService.registerBridgeServiceCallback(capture(callback)) } just runs + every { + anyConstructed().setComponent(any()) + } returns mockIntent + every { context.unbindService(any()) } just runs + every { + context.bindService( + any(), + capture(serviceConnection), + Context.BIND_AUTO_CREATE + ) + } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + serviceConnection.captured.onServiceConnected(mockk(), mockk()) + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + + callback.captured.onAccountsSync(encryptedAccounts) + assertEquals(AccountSyncState.Success(expectedAccounts), manager.accountSyncStateFlow.value) + + assertEquals(SYMMETRIC_KEY, fakeSymmetricKeyStorageProvider.symmetricKey) + verify(exactly = 0) { mockBridgeService.symmetricEncryptionKeyData } + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + verify { mockBridgeService.registerBridgeServiceCallback(any()) } + verify { mockBridgeService.syncAccounts() } + } + + @Test + fun `onAccountsSync when symmetric key is missing should not set state to Success`() { + val encryptedAccounts: EncryptedSharedAccountData = mockk() + every { + mockBridgeService.checkSymmetricEncryptionKeyFingerprint( + SYMMETRIC_KEY.toFingerprint().getOrNull() + ) + } returns true + fakeSymmetricKeyStorageProvider.symmetricKey = SYMMETRIC_KEY + val serviceConnection = slot() + val callback = slot() + val mockIntent: Intent = mockk() + every { IAuthenticatorBridgeService.Stub.asInterface(any()) } returns mockBridgeService + every { mockBridgeService.registerBridgeServiceCallback(capture(callback)) } just runs + every { + anyConstructed().setComponent(any()) + } returns mockIntent + every { context.unbindService(any()) } just runs + every { + context.bindService( + any(), + capture(serviceConnection), + Context.BIND_AUTO_CREATE + ) + } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + serviceConnection.captured.onServiceConnected(mockk(), mockk()) + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + + fakeSymmetricKeyStorageProvider.symmetricKey = null + callback.captured.onAccountsSync(encryptedAccounts) + assertEquals(AccountSyncState.Error, manager.accountSyncStateFlow.value) + + verify(exactly = 0) { mockBridgeService.symmetricEncryptionKeyData } + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + verify { mockBridgeService.registerBridgeServiceCallback(any()) } + verify { mockBridgeService.syncAccounts() } + } + + @Test + @Suppress("MaxLineLength") + fun `onAccountsSync when decryption fails state should be error`() { + val encryptedAccounts: EncryptedSharedAccountData = mockk() + mockkStatic(EncryptedSharedAccountData::decrypt) + every { encryptedAccounts.decrypt(SYMMETRIC_KEY) } returns Result.failure(RuntimeException()) + every { + mockBridgeService.checkSymmetricEncryptionKeyFingerprint( + SYMMETRIC_KEY.toFingerprint().getOrNull() + ) + } returns true + fakeSymmetricKeyStorageProvider.symmetricKey = SYMMETRIC_KEY + val serviceConnection = slot() + val callback = slot() + val mockIntent: Intent = mockk() + every { IAuthenticatorBridgeService.Stub.asInterface(any()) } returns mockBridgeService + every { mockBridgeService.registerBridgeServiceCallback(capture(callback)) } just runs + every { + anyConstructed().setComponent(any()) + } returns mockIntent + every { context.unbindService(any()) } just runs + every { + context.bindService( + any(), + capture(serviceConnection), + Context.BIND_AUTO_CREATE + ) + } returns true + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + serviceConnection.captured.onServiceConnected(mockk(), mockk()) + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + + callback.captured.onAccountsSync(encryptedAccounts) + assertEquals(AccountSyncState.Error, manager.accountSyncStateFlow.value) + + assertEquals(SYMMETRIC_KEY, fakeSymmetricKeyStorageProvider.symmetricKey) + verify(exactly = 0) { mockBridgeService.symmetricEncryptionKeyData } + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + verify { mockBridgeService.registerBridgeServiceCallback(any()) } + verify { mockBridgeService.syncAccounts() } + } + + @Test + fun `onStop when service has been started should unbind service`() { + val mockIntent: Intent = mockk() + every { + anyConstructed().setComponent(any()) + } returns mockIntent + + every { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } returns true + every { context.unbindService(any()) } just runs + + fakeLifecycleOwner.lifecycle.dispatchOnStart() + fakeLifecycleOwner.lifecycle.dispatchOnStop() + + assertEquals(AccountSyncState.Loading, manager.accountSyncStateFlow.value) + verify { context.bindService(any(), any(), Context.BIND_AUTO_CREATE) } + verify { context.unbindService(any()) } + } +} + +private val SYMMETRIC_KEY = generateSecretKey() + .getOrThrow() + .encoded + .toSymmetricEncryptionKeyData() diff --git a/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensionsTest.kt b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensionsTest.kt new file mode 100644 index 000000000..20b463ea2 --- /dev/null +++ b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/manager/util/AuthenticatorBridgeConnectionTypeExtensionsTest.kt @@ -0,0 +1,24 @@ +package com.bitwarden.authenticatorbridge.manager.util + +import com.bitwarden.authenticatorbridge.manager.model.AuthenticatorBridgeConnectionType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class AuthenticatorBridgeConnectionTypeExtensionsTest { + + @Test + fun `toPackageName RELEASE should map to correct release package`() { + assertEquals( + "com.x8bit.bitwarden", + AuthenticatorBridgeConnectionType.RELEASE.toPackageName() + ) + } + + @Test + fun `toPackageName DEV should map to correct dev package`() { + assertEquals( + "com.x8bit.bitwarden.dev", + AuthenticatorBridgeConnectionType.DEV.toPackageName() + ) + } +} diff --git a/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycle.kt b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycle.kt new file mode 100644 index 000000000..0e7a929f3 --- /dev/null +++ b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycle.kt @@ -0,0 +1,45 @@ +package com.bitwarden.authenticatorbridge.util + +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.LifecycleOwner + +/** + * A fake implementation of [LifecycleOwner] and [Lifecycle] for testing purposes. + */ +class FakeLifecycle( + private val lifecycleOwner: LifecycleOwner, +) : Lifecycle() { + private val observers = mutableSetOf() + + override var currentState: State = State.INITIALIZED + + override fun addObserver(observer: LifecycleObserver) { + observers += (observer as DefaultLifecycleObserver) + } + + override fun removeObserver(observer: LifecycleObserver) { + observers -= (observer as DefaultLifecycleObserver) + } + + /** + * Triggers [DefaultLifecycleObserver.onStart] calls for each registered observer. + */ + fun dispatchOnStart() { + currentState = State.STARTED + observers.forEach { observer -> + observer.onStart(lifecycleOwner) + } + } + + /** + * Triggers [DefaultLifecycleObserver.onStop] calls for each registered observer. + */ + fun dispatchOnStop() { + currentState = State.CREATED + observers.forEach { observer -> + observer.onStop(lifecycleOwner) + } + } +} diff --git a/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycleOwner.kt b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycleOwner.kt new file mode 100644 index 000000000..6c8ae41b8 --- /dev/null +++ b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeLifecycleOwner.kt @@ -0,0 +1,10 @@ +package com.bitwarden.authenticatorbridge.util + +import androidx.lifecycle.LifecycleOwner + +/** + * A fake implementation of [LifecycleOwner] for testing purposes. + */ +class FakeLifecycleOwner : LifecycleOwner { + override val lifecycle: FakeLifecycle = FakeLifecycle(lifecycleOwner = this) +} diff --git a/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeSymmetricKeyStorageProvider.kt b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeSymmetricKeyStorageProvider.kt new file mode 100644 index 000000000..e95062be7 --- /dev/null +++ b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/FakeSymmetricKeyStorageProvider.kt @@ -0,0 +1,11 @@ +package com.bitwarden.authenticatorbridge.util + +import com.bitwarden.authenticatorbridge.model.SymmetricEncryptionKeyData +import com.bitwarden.authenticatorbridge.provider.SymmetricKeyStorageProvider + +/** + * A fake implementation of [SymmetricKeyStorageProvider] for testing purposes. + */ +class FakeSymmetricKeyStorageProvider : SymmetricKeyStorageProvider { + override var symmetricKey: SymmetricEncryptionKeyData? = null +} diff --git a/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/TestAuthenticatorBridgeCallbackProvider.kt b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/TestAuthenticatorBridgeCallbackProvider.kt new file mode 100644 index 000000000..66e6adf1f --- /dev/null +++ b/authenticatorbridge/src/test/java/com/bitwarden/authenticatorbridge/util/TestAuthenticatorBridgeCallbackProvider.kt @@ -0,0 +1,19 @@ +package com.bitwarden.authenticatorbridge.util + +import com.bitwarden.authenticatorbridge.IAuthenticatorBridgeServiceCallback +import com.bitwarden.authenticatorbridge.model.EncryptedSharedAccountData +import com.bitwarden.authenticatorbridge.provider.AuthenticatorBridgeCallbackProvider + +/** + * Test implementation of [AuthenticatorBridgeCallbackProvider] that provides a testable + * [IAuthenticatorBridgeServiceCallback.Default] implementation. + */ +class TestAuthenticatorBridgeCallbackProvider : AuthenticatorBridgeCallbackProvider { + + override fun getCallback( + onAccountsSync: (EncryptedSharedAccountData) -> Unit, + ): IAuthenticatorBridgeServiceCallback = object : IAuthenticatorBridgeServiceCallback.Default() { + + override fun onAccountsSync(data: EncryptedSharedAccountData) = onAccountsSync.invoke(data) + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e95862e0..44683eeb1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -97,6 +97,7 @@ junit-junit5 = { module = "org.junit.jupiter:junit-jupiter", version.ref = "juni junit-vintage = { module = "org.junit.vintage:junit-vintage-engine", version.ref = "junit5" } kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version.ref = "kotlinxCollectionsImmutable" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" } mockk-mockk = { module = "io.mockk:mockk", version.ref = "mockk" }