diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/OriginManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/OriginManagerImpl.kt index 7db20e9516..710de88bb5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/OriginManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/manager/OriginManagerImpl.kt @@ -49,6 +49,7 @@ class OriginManagerImpl( ) .fold( onSuccess = { + Timber.d("Digital asset link validation result: linked = ${it.linked}") if (it.linked) { ValidateOriginResult.Success(null) } else { @@ -56,6 +57,7 @@ class OriginManagerImpl( } }, onFailure = { + Timber.e("Failed to validate origin for calling app") ValidateOriginResult.Error.AssetLinkNotFound }, ) @@ -105,7 +107,7 @@ class OriginManagerImpl( .fold( onSuccess = { it }, onFailure = { - Timber.e(it, "Failed to validate privileged app: ${callingAppInfo.packageName}") + Timber.e(it, "Failed to validate calling app is privileged.") ValidateOriginResult.Error.Unknown }, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/processor/CredentialProviderProcessorImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/processor/CredentialProviderProcessorImpl.kt index 98b9245a88..be43a19bd3 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/processor/CredentialProviderProcessorImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/credentials/processor/CredentialProviderProcessorImpl.kt @@ -37,6 +37,7 @@ import com.x8bit.bitwarden.data.credentials.model.GetCredentialsRequest import com.x8bit.bitwarden.data.platform.manager.BiometricsEncryptionManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import timber.log.Timber import java.time.Clock import javax.crypto.Cipher @@ -63,8 +64,10 @@ class CredentialProviderProcessorImpl( cancellationSignal: CancellationSignal, callback: OutcomeReceiver, ) { + Timber.d("Create credential request received.") val userId = authRepository.activeUserId if (userId == null) { + Timber.w("No active user. Cannot create credential.") callback.onError(CreateCredentialUnknownException("Active user is required.")) return } @@ -72,12 +75,16 @@ class CredentialProviderProcessorImpl( val createCredentialJob = ioScope.launch { (handleCreatePasskeyQuery(request) ?: handleCreatePasswordQuery(request)) ?.let { callback.onResult(it) } - ?: callback.onError(CreateCredentialUnknownException()) + ?: run { + Timber.w("Unknown create credential request.") + callback.onError(CreateCredentialUnknownException()) + } } cancellationSignal.setOnCancelListener { if (createCredentialJob.isActive) { createCredentialJob.cancel() } + Timber.d("Create credential request cancelled by system.") callback.onError(CreateCredentialCancellationException()) } } @@ -87,15 +94,18 @@ class CredentialProviderProcessorImpl( cancellationSignal: CancellationSignal, callback: OutcomeReceiver, ) { + Timber.d("Get credential request received.") // If the user is not logged in, return an error. val userState = authRepository.userStateFlow.value if (userState == null) { + Timber.w("No active user. Cannot get credentials.") callback.onError(GetCredentialUnknownException("Active user is required.")) return } // Return an unlock action if the current account is locked. if (!userState.activeAccount.isVaultUnlocked) { + Timber.d("Vault is locked. Requesting unlock.") val authenticationAction = AuthenticationAction( title = context.getString(BitwardenString.unlock), pendingIntent = pendingIntentManager.createFido2UnlockPendingIntent( @@ -120,10 +130,17 @@ class CredentialProviderProcessorImpl( BeginGetCredentialRequest.asBundle(request), ), ) - .onSuccess { callback.onResult(BeginGetCredentialResponse(credentialEntries = it)) } - .onFailure { callback.onError(GetCredentialUnknownException(it.message)) } + .onSuccess { + Timber.d("Credentials retrieved.") + callback.onResult(BeginGetCredentialResponse(credentialEntries = it)) + } + .onFailure { + Timber.w("Error getting credentials.") + callback.onError(GetCredentialUnknownException(it.message)) + } } cancellationSignal.setOnCancelListener { + Timber.d("Get credential request cancelled by system.") callback.onError(GetCredentialCancellationException()) getCredentialJob.cancel() } @@ -135,6 +152,7 @@ class CredentialProviderProcessorImpl( callback: OutcomeReceiver, ) { // no-op: RFU + Timber.w("Unsupported clear credential state request received.") callback.onError(ClearCredentialUnsupportedException()) }