summaryrefslogtreecommitdiffstats
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt11
-rw-r--r--app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt19
-rw-r--r--app/src/main/res/values/strings.xml5
3 files changed, 27 insertions, 8 deletions
diff --git a/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt b/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt
index eb858006..61b63ea7 100644
--- a/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt
+++ b/app/src/main/java/app/passwordstore/data/crypto/CryptoRepository.kt
@@ -14,6 +14,8 @@ import app.passwordstore.crypto.PGPainlessCryptoHandler
import app.passwordstore.injection.prefs.SettingsPreferences
import app.passwordstore.util.coroutines.DispatcherProvider
import app.passwordstore.util.settings.PreferenceKeys
+import com.github.michaelbull.result.andThen
+import com.github.michaelbull.result.combine
import com.github.michaelbull.result.filterValues
import com.github.michaelbull.result.map
import com.github.michaelbull.result.mapBoth
@@ -64,7 +66,12 @@ constructor(
PGPEncryptOptions.Builder()
.withAsciiArmor(settings.getBoolean(PreferenceKeys.ASCII_ARMOR, false))
.build()
- val keys = identities.map { id -> pgpKeyManager.getKeyById(id) }.filterValues()
- pgpCryptoHandler.encrypt(keys, content, out, encryptionOptions).map { out }
+ // Every recipient in .gpg-id must be present: silently dropping one would write an entry
+ // that the missing key's owner can no longer decrypt.
+ identities
+ .map { id -> pgpKeyManager.getKeyById(id) }
+ .combine()
+ .andThen { keys -> pgpCryptoHandler.encrypt(keys, content, out, encryptionOptions) }
+ .map { out }
}
}
diff --git a/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt b/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt
index b4fd21e5..6971c2e3 100644
--- a/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt
+++ b/app/src/main/java/app/passwordstore/ui/crypto/PasswordCreationActivity.kt
@@ -40,6 +40,7 @@ import app.passwordstore.util.extensions.unsafeLazy
import app.passwordstore.util.extensions.viewBinding
import app.passwordstore.util.settings.DirectoryStructure
import app.passwordstore.util.settings.PreferenceKeys
+import com.github.michaelbull.result.getOrElse
import com.github.michaelbull.result.onFailure
import com.github.michaelbull.result.onSuccess
import com.github.michaelbull.result.runCatching
@@ -378,10 +379,20 @@ class PasswordCreationActivity : BasePGPActivity() {
runCatching {
val result =
withContext(dispatcherProvider.io()) {
- val outputStream = ByteArrayOutputStream()
- repository.encrypt(gpgIdentifiers, content.byteInputStream(), outputStream)
- outputStream
- }
+ val outputStream = ByteArrayOutputStream()
+ repository.encrypt(gpgIdentifiers, content.byteInputStream(), outputStream)
+ }
+ .getOrElse { e ->
+ logcat(ERROR) { e.asLog("Failed to encrypt password file") }
+ MaterialAlertDialogBuilder(this@PasswordCreationActivity)
+ .setTitle(R.string.password_creation_file_fail_title)
+ .setMessage(
+ getString(R.string.password_creation_encrypt_fail_message, e.message)
+ )
+ .setPositiveButton(android.R.string.ok, null)
+ .show()
+ return@runCatching
+ }
val passwordFile = Paths.get(path)
// If we're not editing, this file should not already exist!
// Additionally, if we were editing and the incoming and outgoing
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0584a1f2..61596e58 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -38,8 +38,8 @@
<string name="password_move_error_message">Failed to move %1$s to %2$s</string>
<!-- git commits -->
- <string name="git_commit_add_text">Add generated password for %1$s using Android Password Store.</string>
- <string name="git_commit_edit_text">Edit password for %1$s using Android Password Store.</string>
+ <string name="git_commit_add_text">Add generated password for %1$s using HardenedPass.</string>
+ <string name="git_commit_edit_text">Edit password for %1$s using HardenedPass.</string>
<string name="git_commit_remove_text">Remove %1$s from store.</string>
<string name="git_commit_move_text">Rename %1$s to %2$s.</string>
<string name="git_commit_move_multiple_text">Move multiple passwords to %1$s.</string>
@@ -304,6 +304,7 @@
<!-- Password creation failure -->
<string name="password_creation_file_fail_title">Error</string>
+ <string name="password_creation_encrypt_fail_message">Could not encrypt the password, nothing was saved: %1$s</string>
<string name="password_creation_file_write_fail_message">Failed to write password file to the store, please try again.</string>
<string name="password_creation_file_delete_fail_message">Failed to delete password file %1$s from the store, please delete it manually.</string>
<string name="password_creation_duplicate_error">File already exists, please use a different name</string>