fix crash due to passphrase caching after biom. authentication expired (#3141)

* fix crash due to passphrase caching after biom. authentication expired

* fix: add missing imports

---------

Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
agrahn 2024-07-28 21:33:16 +02:00 committed by GitHub
parent 7010ee85b4
commit 57866a9895
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 24 additions and 14 deletions

View file

@ -44,6 +44,7 @@ import javax.inject.Inject
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import logcat.LogPriority.ERROR
import logcat.asLog
import logcat.logcat
@AndroidEntryPoint
@ -192,8 +193,6 @@ class AutofillDecryptActivity : BasePGPActivity() {
Intent().apply { putExtra(AutofillManager.EXTRA_AUTHENTICATION_RESULT, fillInDataset) },
)
}
if (features.isEnabled(EnablePGPPassphraseCache))
settings.edit { putBoolean(PreferenceKeys.CLEAR_PASSPHRASE_CACHE, clearCache) }
}
withContext(dispatcherProvider.main()) { finish() }
}
@ -218,9 +217,15 @@ class AutofillDecryptActivity : BasePGPActivity() {
}
.onSuccess { result ->
return runCatching {
if (features.isEnabled(EnablePGPPassphraseCache)) {
passphraseCache.cachePassphrase(this, identifiers.first(), password)
}
runCatching {
if (features.isEnabled(EnablePGPPassphraseCache)) {
passphraseCache.cachePassphrase(this, identifiers.first(), password)
settings.edit {
putBoolean(PreferenceKeys.CLEAR_PASSPHRASE_CACHE, clearCache)
}
}
}
.onFailure { e -> logcat { e.asLog() } }
val entry = passwordEntryFactory.create(result.toByteArray())
AutofillPreferences.credentialsFromStoreEntry(this, file, entry, directoryStructure)
}

View file

@ -31,6 +31,8 @@ import app.passwordstore.util.features.Feature.EnablePGPPassphraseCache
import app.passwordstore.util.features.Features
import app.passwordstore.util.settings.Constants
import app.passwordstore.util.settings.PreferenceKeys
import com.github.michaelbull.result.onFailure
import com.github.michaelbull.result.runCatching
import dagger.hilt.android.AndroidEntryPoint
import java.io.ByteArrayOutputStream
import java.io.File
@ -41,6 +43,7 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import logcat.LogPriority.ERROR
import logcat.asLog
import logcat.logcat
@AndroidEntryPoint
@ -214,13 +217,17 @@ class DecryptActivity : BasePGPActivity() {
clearCache = bundle.getBoolean(PasswordDialog.PASSWORD_CLEAR_KEY)
lifecycleScope.launch(dispatcherProvider.main()) {
decryptWithPassphrase(passphrase, gpgIdentifiers, authResult) {
if (authResult is BiometricResult.Success) {
passphraseCache.cachePassphrase(
this@DecryptActivity,
gpgIdentifiers.first(),
passphrase,
)
}
runCatching {
if (authResult is BiometricResult.Success) {
passphraseCache.cachePassphrase(
this@DecryptActivity,
gpgIdentifiers.first(),
passphrase,
)
settings.edit { putBoolean(PreferenceKeys.CLEAR_PASSPHRASE_CACHE, clearCache) }
}
}
.onFailure { e -> logcat { e.asLog() } }
}
}
}
@ -237,8 +244,6 @@ class DecryptActivity : BasePGPActivity() {
val outputStream = ByteArrayOutputStream()
val result = repository.decrypt(passphrase, identifiers, message, outputStream)
if (result.isOk) {
if (features.isEnabled(EnablePGPPassphraseCache))
settings.edit { putBoolean(PreferenceKeys.CLEAR_PASSPHRASE_CACHE, clearCache) }
val entry = passwordEntryFactory.create(result.value.toByteArray())
passwordEntry = entry
createPasswordUI(entry)