aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt
diff options
context:
space:
mode:
authorFabian Henneke <FabianHenneke@users.noreply.github.com>2020-03-24 14:03:40 +0100
committerGitHub <noreply@github.com>2020-03-24 14:03:40 +0100
commitbebe43468330f182ea35e01ace555ce8d0512aeb (patch)
tree85899eccd985b302183ee1551054ef54bdb0ada5 /app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt
parent98e9f6734a00cfb1d8164227b2de07d2aea150d2 (diff)
downloadHardenedPass-bebe43468330f182ea35e01ace555ce8d0512aeb.tar.gz
HardenedPass-bebe43468330f182ea35e01ace555ce8d0512aeb.zip
Add support for Oreo Autofill (#653)
Adds support for the Autofill feature first available in Android Oreo. In compatible apps and browsers, login forms are automatically detected and the user is presented with options to fill or generate credentials. In most apps and certain browsers, the service will also offer to create new Password Store entries from credentials entered into login forms. Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt31
1 files changed, 21 insertions, 10 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt b/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt
index e692c5af..c75fb02d 100644
--- a/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.kt
@@ -20,7 +20,7 @@ class PasswordEntry(private val content: String) {
val totpAlgorithm: String
val hotpSecret: String?
val hotpCounter: Long?
- var extraContent: String? = null
+ var extraContent: String
private set
private var isIncremented = false
@@ -41,7 +41,7 @@ class PasswordEntry(private val content: String) {
}
fun hasExtraContent(): Boolean {
- return !extraContent.isNullOrEmpty()
+ return extraContent.isNotEmpty()
}
fun hasUsername(): Boolean {
@@ -63,19 +63,30 @@ class PasswordEntry(private val content: String) {
fun incrementHotp() {
content.split("\n".toRegex()).forEach { line ->
if (line.startsWith("otpauth://hotp/")) {
- extraContent = extraContent?.replaceFirst("counter=[0-9]+".toRegex(), "counter=${hotpCounter!! + 1}")
+ extraContent = extraContent.replaceFirst("counter=[0-9]+".toRegex(), "counter=${hotpCounter!! + 1}")
isIncremented = true
}
}
}
+ val extraContentWithoutUsername by lazy {
+ var usernameFound = false
+ extraContent.splitToSequence("\n").filter { line ->
+ if (usernameFound)
+ return@filter true
+ if (USERNAME_FIELDS.any { prefix -> line.startsWith(prefix, ignoreCase = true) }) {
+ usernameFound = true
+ return@filter false
+ }
+ true
+ }.joinToString(separator = "\n")
+ }
+
private fun findUsername(): String? {
- val extraLines = extraContent!!.split("\n".toRegex())
- for (line in extraLines) {
- for (field in USERNAME_FIELDS) {
- if (line.toLowerCase().startsWith("$field:", ignoreCase = true)) {
- return line.split(": *".toRegex(), 2).toTypedArray()[1]
- }
+ extraContent.splitToSequence("\n").forEach { line ->
+ for (prefix in USERNAME_FIELDS) {
+ if (line.startsWith(prefix, ignoreCase = true))
+ return line.substring(prefix.length).trimStart()
}
}
return null
@@ -152,6 +163,6 @@ class PasswordEntry(private val content: String) {
companion object {
- private val USERNAME_FIELDS = arrayOf("login", "username")
+ private val USERNAME_FIELDS = arrayOf("login:", "username:")
}
}