summaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt171
1 files changed, 94 insertions, 77 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 e48b9a03..96cca034 100644
--- a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
@@ -37,24 +37,17 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
}
var passwordEntry: PasswordEntry? = null
+ var api : OpenPgpApi? = null
- val name: String by lazy { intent.getStringExtra("NAME") }
+ val operation: String by lazy { intent.getStringExtra("OPERATION") }
val repoPath: String by lazy { intent.getStringExtra("REPO_PATH") }
+
val path: String by lazy { intent.getStringExtra("FILE_PATH") }
- val parentPath: String by lazy {
- // when encrypting we pass "PARENT_PATH" as we do not have a file
- if (operation == "ENCRYPT") intent.getStringExtra("PARENT_PATH")
- else File(path).parentFile.absolutePath
- }
- val cat: String by lazy { parentPath.replace(repoPath, "") }
- val operation: String by lazy { intent.getStringExtra("OPERATION") }
+ val name: String by lazy { getName(path, repoPath) }
+ val relativeParentPath: String by lazy { getParentPath(path, repoPath) }
- val settings: SharedPreferences by lazy {
- PreferenceManager.getDefaultSharedPreferences(this)
- }
- val keyIDs: MutableSet<String> by lazy {
- settings.getStringSet("openpgp_key_ids_set", emptySet())
- }
+ val settings: SharedPreferences by lazy { PreferenceManager.getDefaultSharedPreferences(this) }
+ val keyIDs: MutableSet<String> by lazy { settings.getStringSet("openpgp_key_ids_set", emptySet()) }
var mServiceConnection: OpenPgpServiceConnection? = null
override fun onCreate(savedInstanceState: Bundle?) {
@@ -78,13 +71,13 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
when (operation) {
"DECRYPT", "EDIT" -> {
setContentView(R.layout.decrypt_layout)
- crypto_password_category_decrypt.text = "$cat/"
+ crypto_password_category_decrypt.text = relativeParentPath
crypto_password_file.text = name
}
"ENCRYPT" -> {
setContentView(R.layout.encrypt_layout)
title = getString(R.string.new_password_title)
- crypto_password_category.text = "$cat/"
+ crypto_password_category.text = relativeParentPath
}
}
}
@@ -178,6 +171,10 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
Log.e(TAG, "onError getMessage:" + error.message)
}
+ fun initOpenPgpApi() {
+ api = api ?: OpenPgpApi(this, mServiceConnection?.service)
+ }
+
private fun decryptAndVerify(receivedIntent: Intent? = null): Unit {
val data = receivedIntent ?: Intent()
data.action = ACTION_DECRYPT_VERIFY
@@ -185,64 +182,62 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
val iStream = FileUtils.openInputStream(File(path))
val oStream = ByteArrayOutputStream()
- val api = OpenPgpApi(this, mServiceConnection?.service)
-
- api.executeApiAsync(data, iStream, oStream, { result: Intent? ->
+ api?.executeApiAsync(data, iStream, oStream, { result: Intent? ->
when (result?.getIntExtra(RESULT_CODE, RESULT_CODE_ERROR)) {
RESULT_CODE_SUCCESS -> {
try {
- val showPassword = settings.getBoolean("show_password", true)
- val showExtraContent = settings.getBoolean("show_extra_content", true)
-
- crypto_container_decrypt.visibility = View.VISIBLE
-
- val monoTypeface = Typeface.createFromAsset(assets, "fonts/sourcecodepro.ttf")
- val entry = PasswordEntry(oStream)
-
- passwordEntry = entry
-
- if (operation == "EDIT") {
- editPassword()
- return@executeApiAsync
- }
-
- crypto_password_show.typeface = monoTypeface
- crypto_password_show.text = entry.password
-
- crypto_password_toggle_show.visibility = if (showPassword) View.GONE else View.VISIBLE
- crypto_password_show.transformationMethod = if (showPassword) {
- null
- } else {
- HoldToShowPasswordTransformation(
- crypto_password_toggle_show,
- Runnable { crypto_password_show.text = entry.password }
- )
- }
-
- if (entry.hasExtraContent()) {
- crypto_extra_show_layout.visibility = if (showExtraContent) View.VISIBLE else View.GONE
-
- crypto_extra_show.typeface = monoTypeface
- crypto_extra_show.text = entry.extraContent
-
- if (entry.hasUsername()) {
- crypto_username_show.visibility = View.VISIBLE
- crypto_username_show_label.visibility = View.VISIBLE
- crypto_copy_username.visibility = View.VISIBLE
-
- crypto_copy_username.setOnClickListener { copyUsernameToClipBoard(entry.username) }
- crypto_username_show.typeface = monoTypeface
- crypto_username_show.text = entry.username
- } else {
- crypto_username_show.visibility = View.GONE
- crypto_username_show_label.visibility = View.GONE
- crypto_copy_username.visibility = View.GONE
- }
- }
-
- if (settings.getBoolean("copy_on_decrypt", true)) {
- copyPasswordToClipBoard()
- }
+// val showPassword = settings.getBoolean("show_password", true)
+// val showExtraContent = settings.getBoolean("show_extra_content", true)
+//
+// crypto_container_decrypt.visibility = View.VISIBLE
+//
+// val monoTypeface = Typeface.createFromAsset(assets, "fonts/sourcecodepro.ttf")
+// val entry = PasswordEntry(oStream)
+//
+// passwordEntry = entry
+//
+// if (operation == "EDIT") {
+// editPassword()
+// return@executeApiAsync
+// }
+//
+// crypto_password_show.typeface = monoTypeface
+// crypto_password_show.text = entry.password
+//
+// crypto_password_toggle_show.visibility = if (showPassword) View.GONE else View.VISIBLE
+// crypto_password_show.transformationMethod = if (showPassword) {
+// null
+// } else {
+// HoldToShowPasswordTransformation(
+// crypto_password_toggle_show,
+// Runnable { crypto_password_show.text = entry.password }
+// )
+// }
+//
+// if (entry.hasExtraContent()) {
+// crypto_extra_show_layout.visibility = if (showExtraContent) View.VISIBLE else View.GONE
+//
+// crypto_extra_show.typeface = monoTypeface
+// crypto_extra_show.text = entry.extraContent
+//
+// if (entry.hasUsername()) {
+// crypto_username_show.visibility = View.VISIBLE
+// crypto_username_show_label.visibility = View.VISIBLE
+// crypto_copy_username.visibility = View.VISIBLE
+//
+// crypto_copy_username.setOnClickListener { copyUsernameToClipBoard(entry.username) }
+// crypto_username_show.typeface = monoTypeface
+// crypto_username_show.text = entry.username
+// } else {
+// crypto_username_show.visibility = View.GONE
+// crypto_username_show_label.visibility = View.GONE
+// crypto_copy_username.visibility = View.GONE
+// }
+// }
+//
+// if (settings.getBoolean("copy_on_decrypt", true)) {
+// copyPasswordToClipBoard()
+// }
} catch (e: Exception) {
Log.e(TAG, "An Exception occurred", e)
}
@@ -284,10 +279,9 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
val iStream = ByteArrayInputStream("$pass\n$extra".toByteArray(Charset.forName("UTF-8")))
val oStream = ByteArrayOutputStream()
- val api = OpenPgpApi(this, mServiceConnection?.service)
- val path = "$parentPath/$name.gpg"
+ val path = "$repoPath/$relativeParentPath/$name.gpg"
- api.executeApiAsync(data, iStream, oStream, { result: Intent? ->
+ api?.executeApiAsync(data, iStream, oStream, { result: Intent? ->
when (result?.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
OpenPgpApi.RESULT_CODE_SUCCESS -> {
try {
@@ -332,7 +326,7 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
crypto_extra_edit.setText(passwordEntry?.extraContent)
crypto_extra_edit.typeface = monoTypeface
- crypto_password_category.text = "$cat/"
+ crypto_password_category.text = relativeParentPath
crypto_password_file_edit.setText(name)
crypto_password_file_edit.isEnabled = false
@@ -351,8 +345,7 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
fun getKeyIds(receivedIntent: Intent? = null) {
val data = receivedIntent ?: Intent()
data.action = OpenPgpApi.ACTION_GET_KEY_IDS
- val api = OpenPgpApi(this, mServiceConnection?.service)
- api.executeApiAsync(data, null, null, { result: Intent? ->
+ api?.executeApiAsync(data, null, null, { result: Intent? ->
when (result?.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
OpenPgpApi.RESULT_CODE_SUCCESS -> {
try {
@@ -382,6 +375,7 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
* The action to take when the PGP service is bound
*/
override fun onBound(service: IOpenPgpService2?) {
+ initOpenPgpApi()
when (operation) {
"EDIT", "DECRYPT" -> decryptAndVerify()
"GET_KEY_ID" -> getKeyIds()
@@ -572,6 +566,29 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
private var delayTask: DelayShow? = null
+ /**
+ * Gets the relative path to the repository
+ */
+ fun getRelativePath(fullPath: String, repositoryPath: String): String =
+ fullPath.replace(repositoryPath, "").replace("//", "/")
+
+ /**
+ * Gets the Parent path, relative to the repository
+ */
+ fun getParentPath(fullPath: String, repositoryPath: String) : String {
+ val relativePath = getRelativePath(fullPath, repositoryPath)
+ val index = relativePath.lastIndexOf("/")
+ return "/${relativePath.substring(startIndex = 0, endIndex = index + 1)}/".replace("//", "/")
+ }
+
+ /**
+ * Gets the name of the password (excluding .gpg)
+ */
+ fun getName(fullPath: String, repositoryPath: String) : String {
+ val relativePath = getRelativePath(fullPath, repositoryPath)
+ val index = relativePath.lastIndexOf("/")
+ return relativePath.substring(index + 1).replace("\\.gpg$".toRegex(), "")
+ }
}
}