Fix extra content for multiple username fields (#1192)

Fixes #1190

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
(cherry picked from commit df6ebfee27)
This commit is contained in:
Harsh Shandilya 2020-11-06 10:50:34 +05:30 committed by Harsh Shandilya
parent 7aee68f1fa
commit da8ca8b46d
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
3 changed files with 15 additions and 1 deletions

View file

@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
### Fixed
- Cancelling the Autofill "Generate password" action now correctly returns you to the original app.
- If multiple username fields exist in the password, we now ensure the later ones are not dropped from extra content.
## [1.13.1] - 2020-10-23

View file

@ -60,9 +60,11 @@ class PasswordEntry(content: String, private val totpFinder: TotpFinder = UriTot
}
val extraContentWithoutAuthData by lazy(LazyThreadSafetyMode.NONE) {
var foundUsername = false
extraContent.splitToSequence("\n").filter { line ->
return@filter when {
USERNAME_FIELDS.any { prefix -> line.startsWith(prefix, ignoreCase = true) } -> {
USERNAME_FIELDS.any { prefix -> line.startsWith(prefix, ignoreCase = true) } && !foundUsername -> {
foundUsername = true
false
}
line.startsWith("otpauth://", ignoreCase = true) ||

View file

@ -116,6 +116,17 @@ class PasswordEntryTest {
assertFalse(entry.hasUsername())
}
// https://github.com/android-password-store/Android-Password-Store/issues/1190
@Test fun extraContentWithMultipleUsernameFields() {
val entry = makeEntry("pass\nuser: user\nid: id\n$TOTP_URI")
assertTrue(entry.hasExtraContent())
assertTrue(entry.hasTotp())
assertTrue(entry.hasUsername())
assertEquals("pass", entry.password)
assertEquals("user", entry.username)
assertEquals("id: id", entry.extraContentWithoutAuthData)
}
companion object {
const val TOTP_URI = "otpauth://totp/ACME%20Co:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME%20Co&algorithm=SHA1&digits=6&period=30"