summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiogenes Molinares <amolinares19@gmail.com>2020-06-18 16:19:31 +0200
committerGitHub <noreply@github.com>2020-06-18 19:49:31 +0530
commit0a4bcc57f5d0f319f72f751c4406ca1877401b63 (patch)
treea3110cc111ab23249e8a7262ce2a3228ba055c9c
parent23b488a8eb69c99d5337538cc17690d2b637b9be (diff)
Avoid destination's file outside repository (#861)
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt7
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/crypto/PasswordCreationActivity.kt6
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt5
-rw-r--r--app/src/main/res/values/strings.xml2
4 files changed, 14 insertions, 6 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt
index b0f6fd44..0a768fd0 100644
--- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt
@@ -66,6 +66,7 @@ import com.zeapo.pwdstore.utils.PasswordRepository.Companion.initialize
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.isInitialized
import com.zeapo.pwdstore.utils.PasswordRepository.PasswordSortOrder.Companion.getSortOrder
import com.zeapo.pwdstore.utils.commitChange
+import com.zeapo.pwdstore.utils.isInsideRepository
import com.zeapo.pwdstore.utils.listFilesRecursively
import com.zeapo.pwdstore.utils.requestInputFocusOnView
import kotlinx.coroutines.Dispatchers
@@ -666,15 +667,11 @@ class PasswordStore : AppCompatActivity(R.layout.activity_pwdstore) {
}.launch(intent)
}
- private fun isInsideRepository(file: File): Boolean {
- return file.canonicalPath.contains(getRepositoryDirectory(this).canonicalPath)
- }
-
enum class CategoryRenameError(val resource: Int) {
None(0),
EmptyField(R.string.message_category_error_empty_field),
CategoryExists(R.string.message_category_error_category_exists),
- DestinationOutsideRepo(R.string.message_category_error_destination_outside_repo),
+ DestinationOutsideRepo(R.string.message_error_destination_outside_repo),
}
/**
diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/PasswordCreationActivity.kt b/app/src/main/java/com/zeapo/pwdstore/crypto/PasswordCreationActivity.kt
index 1fdeafe9..c34d1a8a 100644
--- a/app/src/main/java/com/zeapo/pwdstore/crypto/PasswordCreationActivity.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/crypto/PasswordCreationActivity.kt
@@ -18,6 +18,7 @@ import androidx.lifecycle.lifecycleScope
import com.github.ajalt.timberkt.e
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.zeapo.pwdstore.PasswordEntry
+import com.zeapo.pwdstore.utils.isInsideRepository
import com.zeapo.pwdstore.R
import com.zeapo.pwdstore.autofill.oreo.AutofillPreferences
import com.zeapo.pwdstore.autofill.oreo.DirectoryStructure
@@ -235,6 +236,11 @@ class PasswordCreationActivity : BasePgpActivity(), OpenPgpServiceConnection.OnB
snackbar(message = getString(R.string.password_creation_duplicate_error))
return@executeApiAsync
}
+
+ if (!isInsideRepository(file)) {
+ snackbar(message = getString(R.string.message_error_destination_outside_repo))
+ return@executeApiAsync
+ }
try {
file.outputStream().use {
it.write(outputStream.toByteArray())
diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt b/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt
index fa22b75e..c84465e9 100644
--- a/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt
@@ -23,6 +23,7 @@ import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
import com.github.ajalt.timberkt.d
import com.google.android.material.snackbar.Snackbar
+import com.zeapo.pwdstore.PasswordStore
import com.zeapo.pwdstore.git.GitAsyncTask
import com.zeapo.pwdstore.git.GitOperation
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepositoryDirectory
@@ -123,3 +124,7 @@ fun <T : View> AlertDialog.requestInputFocusOnView(@IdRes id: Int) {
val Context.autofillManager: AutofillManager?
@RequiresApi(Build.VERSION_CODES.O)
get() = getSystemService()
+
+fun Activity.isInsideRepository(file: File): Boolean {
+ return file.canonicalPath.contains(getRepositoryDirectory(this).canonicalPath)
+}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 58126392..c4f38a9f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -327,7 +327,7 @@
<string name="title_rename_folder">Rename folder</string>
<string name="message_category_error_empty_field">Category name can\'t be empty</string>
<string name="message_category_error_category_exists">Category name already exists</string>
- <string name="message_category_error_destination_outside_repo">Destination must be within the repository</string>
+ <string name="message_error_destination_outside_repo">Destination must be within the repository</string>
<string name="message_rename_folder">Enter destination for %1$s</string>
<string name="button_create">Create</string>
<string name="pref_search_on_start">Open search on start</string>