AutofillDecryptActivity: use runCatching to replace exception handling

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-09-05 04:28:44 +05:30
parent 8ed6dad23c
commit 0bc60999c3
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80

View file

@ -18,6 +18,10 @@ import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.github.ajalt.timberkt.d
import com.github.ajalt.timberkt.e
import com.github.michaelbull.result.getOrElse
import com.github.michaelbull.result.onFailure
import com.github.michaelbull.result.onSuccess
import com.github.michaelbull.result.runCatching
import com.zeapo.pwdstore.autofill.oreo.AutofillAction
import com.zeapo.pwdstore.autofill.oreo.AutofillPreferences
import com.zeapo.pwdstore.autofill.oreo.Credentials
@ -27,10 +31,8 @@ import com.zeapo.pwdstore.model.PasswordEntry
import com.zeapo.pwdstore.utils.OPENPGP_PROVIDER
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileNotFoundException
import java.io.InputStream
import java.io.OutputStream
import java.io.UnsupportedEncodingException
import kotlin.coroutines.Continuation
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
@ -162,37 +164,37 @@ class AutofillDecryptActivity : AppCompatActivity(), CoroutineScope {
val command = resumeIntent ?: Intent().apply {
action = OpenPgpApi.ACTION_DECRYPT_VERIFY
}
val encryptedInput = try {
runCatching {
file.inputStream()
} catch (e: FileNotFoundException) {
}.onFailure { e ->
e(e) { "File to decrypt not found" }
return null
}
}.onSuccess { encryptedInput ->
val decryptedOutput = ByteArrayOutputStream()
val result = try {
runCatching {
executeOpenPgpApi(command, encryptedInput, decryptedOutput)
} catch (e: Exception) {
}.onFailure { e ->
e(e) { "OpenPgpApi ACTION_DECRYPT_VERIFY failed" }
return null
}
}.onSuccess { result ->
return when (val resultCode =
result?.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
OpenPgpApi.RESULT_CODE_SUCCESS -> {
try {
runCatching {
val entry = withContext(Dispatchers.IO) {
@Suppress("BlockingMethodInNonBlockingContext")
PasswordEntry(decryptedOutput)
}
Credentials.fromStoreEntry(this, file, entry, directoryStructure)
} catch (e: UnsupportedEncodingException) {
}.getOrElse { e ->
e(e) { "Failed to parse password entry" }
null
return null
}
}
OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED -> {
val pendingIntent: PendingIntent =
result.getParcelableExtra(OpenPgpApi.RESULT_INTENT)!!
try {
runCatching {
val intentToResume = withContext(Dispatchers.Main) {
suspendCoroutine<Intent> { cont ->
continueAfterUserInteraction = cont
@ -210,9 +212,9 @@ class AutofillDecryptActivity : AppCompatActivity(), CoroutineScope {
}
}
decryptCredential(file, intentToResume)
} catch (e: Exception) {
}.getOrElse { e ->
e(e) { "OpenPgpApi ACTION_DECRYPT_VERIFY failed with user interaction" }
null
return null
}
}
OpenPgpApi.RESULT_CODE_ERROR -> {
@ -236,3 +238,6 @@ class AutofillDecryptActivity : AppCompatActivity(), CoroutineScope {
}
}
}
return null
}
}