From 64a6e0f4e916122fdd00df2e2b48d96ea7d49c1c Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 25 Jul 2020 14:37:16 +0530 Subject: Properly handle files without passwords (#969) * Properly handle files without passwords Fixes #967 Signed-off-by: Harsh Shandilya * Fix tests Signed-off-by: Harsh Shandilya * Only look for TOTP URI Signed-off-by: Harsh Shandilya (cherry picked from commit 62dbc183d52d93860228316b209ec5aa15f16a08) --- .../main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/com/zeapo/pwdstore/utils') diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt b/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt index 57c8f580..aab72d38 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt +++ b/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt @@ -14,10 +14,10 @@ class UriTotpFinder : TotpFinder { override fun findSecret(content: String): String? { content.split("\n".toRegex()).forEach { line -> - if (line.startsWith("otpauth://totp/")) { + if (line.startsWith(TOTP_FIELDS[0])) { return Uri.parse(line).getQueryParameter("secret") } - if (line.startsWith("totp:", ignoreCase = true)) { + if (line.startsWith(TOTP_FIELDS[1], ignoreCase = true)) { return line.split(": *".toRegex(), 2).toTypedArray()[1] } } @@ -26,7 +26,7 @@ class UriTotpFinder : TotpFinder { override fun findDigits(content: String): String { content.split("\n".toRegex()).forEach { line -> - if (line.startsWith("otpauth://totp/") && + if (line.startsWith(TOTP_FIELDS[0]) && Uri.parse(line).getQueryParameter("digits") != null) { return Uri.parse(line).getQueryParameter("digits")!! } @@ -36,7 +36,7 @@ class UriTotpFinder : TotpFinder { override fun findPeriod(content: String): Long { content.split("\n".toRegex()).forEach { line -> - if (line.startsWith("otpauth://totp/") && + if (line.startsWith(TOTP_FIELDS[0]) && Uri.parse(line).getQueryParameter("period") != null) { val period = Uri.parse(line).getQueryParameter("period")!!.toLongOrNull() if (period != null && period > 0) @@ -48,11 +48,18 @@ class UriTotpFinder : TotpFinder { override fun findAlgorithm(content: String): String { content.split("\n".toRegex()).forEach { line -> - if (line.startsWith("otpauth://totp/") && + if (line.startsWith(TOTP_FIELDS[0]) && Uri.parse(line).getQueryParameter("algorithm") != null) { return Uri.parse(line).getQueryParameter("algorithm")!! } } return "sha1" } + + companion object { + val TOTP_FIELDS = arrayOf( + "otpauth://totp", + "totp:" + ) + } } -- cgit v1.2.3