aboutsummaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt100
1 files changed, 49 insertions, 51 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
index 5ab023e9..e48b9a03 100644
--- a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
@@ -134,19 +134,52 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
}// should not happen
}
-
+ /**
+ * Shows a simple toast message
+ */
fun showToast(message: String) {
runOnUiThread({ Toast.makeText(this, message, Toast.LENGTH_SHORT).show() })
}
- fun handleError(error: OpenPgpError) {
+ /**
+ * Handle the case where OpenKeychain returns that it needs to interact with the user
+ *
+ * @param result The intent returned by OpenKeychain
+ * @param requestCode The code we'd like to use to identify the behaviour
+ */
+ fun handleUserInteractionRequest(result: Intent, requestCode: Int) {
+ Log.i(TAG, "RESULT_CODE_USER_INTERACTION_REQUIRED")
+
+ val pi: PendingIntent = result.getParcelableExtra(RESULT_INTENT)
+ try {
+ this@PgpActivity.startIntentSenderFromChild(
+ this@PgpActivity, pi.intentSender, requestCode,
+ null, 0, 0, 0)
+ } catch (e: IntentSender.SendIntentException) {
+ Log.e(TAG, "SendIntentException", e)
+ }
+ }
+
+ /**
+ * Handle the error returned by OpenKeychain
+ *
+ * @param result The intent returned by OpenKeychain
+ */
+ fun handleError(result: Intent) {
+ // TODO show what kind of error it is
+ /* For example:
+ * No suitable key found -> no key in OpenKeyChain
+ *
+ * Check in open-pgp-lib how their definitions and error code
+ */
+ val error: OpenPgpError = result.getParcelableExtra(RESULT_ERROR)
showToast("Error from OpenKeyChain : " + error.message)
Log.e(TAG, "onError getErrorId:" + error.errorId)
Log.e(TAG, "onError getMessage:" + error.message)
}
- private fun decryptAndVerify(): Unit {
- val data = Intent()
+ private fun decryptAndVerify(receivedIntent: Intent? = null): Unit {
+ val data = receivedIntent ?: Intent()
data.action = ACTION_DECRYPT_VERIFY
val iStream = FileUtils.openInputStream(File(path))
@@ -214,28 +247,8 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
Log.e(TAG, "An Exception occurred", e)
}
}
- RESULT_CODE_USER_INTERACTION_REQUIRED -> {
- Log.i(TAG, "RESULT_CODE_USER_INTERACTION_REQUIRED")
-
- val pi: PendingIntent = result.getParcelableExtra(RESULT_INTENT)
- try {
- this@PgpActivity.startIntentSenderFromChild(
- this@PgpActivity, pi.intentSender, REQUEST_DECRYPT,
- null, 0, 0, 0)
- } catch (e: IntentSender.SendIntentException) {
- Log.e(TAG, "SendIntentException", e)
- }
- }
- RESULT_CODE_ERROR -> {
- // TODO show what kind of error it is
- /* For example:
- * No suitable key found -> no key in OpenKeyChain
- *
- * Check in open-pgp-lib how their definitions and error code
- */
- val error: OpenPgpError = result.getParcelableExtra(RESULT_ERROR)
- handleError(error)
- }
+ RESULT_CODE_USER_INTERACTION_REQUIRED -> handleUserInteractionRequest(result, REQUEST_DECRYPT)
+ RESULT_CODE_ERROR -> handleError(result)
}
})
@@ -298,16 +311,7 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
Log.e(TAG, "An Exception occurred", e)
}
}
- OpenPgpApi.RESULT_CODE_ERROR -> {
- // TODO show what kind of error it is
- /* For example:
- * No suitable key found -> no key in OpenKeyChain
- *
- * Check in open-pgp-lib how their definitions and error code
- */
- val error: OpenPgpError = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR)
- handleError(error)
- }
+ OpenPgpApi.RESULT_CODE_ERROR -> handleError(result)
}
})
@@ -344,10 +348,10 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
/**
* Get the Key ids from OpenKeychain
*/
- fun getKeyIds() {
- val data = Intent()
+ fun getKeyIds(receivedIntent: Intent? = null) {
+ val data = receivedIntent ?: Intent()
data.action = OpenPgpApi.ACTION_GET_KEY_IDS
- val api = OpenPgpApi(this, mServiceConnection?.getService())
+ val api = OpenPgpApi(this, mServiceConnection?.service)
api.executeApiAsync(data, null, null, { result: Intent? ->
when (result?.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
OpenPgpApi.RESULT_CODE_SUCCESS -> {
@@ -366,16 +370,8 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
Log.e(TAG, "An Exception occurred", e)
}
}
- OpenPgpApi.RESULT_CODE_ERROR -> {
- // TODO show what kind of error it is
- /* For example:
- * No suitable key found -> no key in OpenKeyChain
- *
- * Check in open-pgp-lib how their definitions and error code
- */
- val error: OpenPgpError = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR)
- handleError(error)
- }
+ RESULT_CODE_USER_INTERACTION_REQUIRED -> handleUserInteractionRequest(result, REQUEST_KEY_ID)
+ OpenPgpApi.RESULT_CODE_ERROR -> handleError(result)
}
})
}
@@ -405,7 +401,8 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
// try again after user interaction
if (resultCode == Activity.RESULT_OK) {
when (requestCode) {
- REQUEST_DECRYPT -> decryptAndVerify()
+ REQUEST_DECRYPT -> decryptAndVerify(data)
+ REQUEST_KEY_ID -> getKeyIds(data)
else -> {
setResult(Activity.RESULT_OK)
finish()
@@ -568,12 +565,13 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
companion object {
val OPEN_PGP_BOUND = 101
- val REQUEST_EDIT = 201
val REQUEST_DECRYPT = 202
+ val REQUEST_KEY_ID = 203
val TAG = "PgpActivity"
private var delayTask: DelayShow? = null
+
}
}