diff options
author | Harsh Shandilya <me@msfjarvis.dev> | 2021-07-17 03:13:16 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-17 03:13:16 +0530 |
commit | 921e9f96b9bec5e2bf8633947792d6991956507f (patch) | |
tree | 6de848fc6edaf962b71277e704519cd90bcd0b8e /app | |
parent | fd6d0e52fc378eefd3de35bc9e7778897ccc396f (diff) |
Refactor TOTP implementation and expand SteamGuard hacks (#1460)
* UriTotpFinder: commonize query parameter handling
* gitignore: add more IDEA files
* TotpFinder: add `findIssuer`
* PasswordEntry: don't eagerly fetch TOTP related fields
* format-common: expand SteamGuard workaround
* CHANGELOG: add SteamGuard workaround
Diffstat (limited to 'app')
-rw-r--r-- | app/src/main/java/dev/msfjarvis/aps/util/totp/UriTotpFinder.kt | 31 | ||||
-rw-r--r-- | app/src/test/java/dev/msfjarvis/aps/util/totp/UriTotpFinderTest.kt | 6 |
2 files changed, 20 insertions, 17 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/totp/UriTotpFinder.kt b/app/src/main/java/dev/msfjarvis/aps/util/totp/UriTotpFinder.kt index fa8481a9..a420fe5d 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/totp/UriTotpFinder.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/totp/UriTotpFinder.kt @@ -24,32 +24,29 @@ class UriTotpFinder @Inject constructor() : TotpFinder { } override fun findDigits(content: String): String { - content.split("\n".toRegex()).forEach { line -> - if (line.startsWith(TOTP_FIELDS[0]) && Uri.parse(line).getQueryParameter("digits") != null) { - return Uri.parse(line).getQueryParameter("digits")!! - } - } - return "6" + return getQueryParameter(content, "digits") ?: "6" } override fun findPeriod(content: String): Long { - content.split("\n".toRegex()).forEach { line -> - 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) return period - } - } - return 30 + return getQueryParameter(content, "period")?.toLongOrNull() ?: 30 } override fun findAlgorithm(content: String): String { + return getQueryParameter(content, "algorithm") ?: "sha1" + } + + override fun findIssuer(content: String): String? { + return getQueryParameter(content, "issuer") ?: Uri.parse(content).authority + } + + private fun getQueryParameter(content: String, parameterName: String): String? { content.split("\n".toRegex()).forEach { line -> - if (line.startsWith(TOTP_FIELDS[0]) && Uri.parse(line).getQueryParameter("algorithm") != null - ) { - return Uri.parse(line).getQueryParameter("algorithm")!! + val uri = Uri.parse(line) + if (line.startsWith(TOTP_FIELDS[0]) && uri.getQueryParameter(parameterName) != null) { + return uri.getQueryParameter(parameterName) } } - return "sha1" + return null } companion object { diff --git a/app/src/test/java/dev/msfjarvis/aps/util/totp/UriTotpFinderTest.kt b/app/src/test/java/dev/msfjarvis/aps/util/totp/UriTotpFinderTest.kt index f04913a1..37cbef2f 100644 --- a/app/src/test/java/dev/msfjarvis/aps/util/totp/UriTotpFinderTest.kt +++ b/app/src/test/java/dev/msfjarvis/aps/util/totp/UriTotpFinderTest.kt @@ -45,6 +45,12 @@ class UriTotpFinderTest { assertEquals("SHA256", totpFinder.findAlgorithm(PASS_FILE_CONTENT)) } + @Test + fun findIssuer() { + assertEquals("ACME Co", totpFinder.findIssuer(TOTP_URI)) + assertEquals("ACME Co", totpFinder.findIssuer(PASS_FILE_CONTENT)) + } + companion object { const val TOTP_URI = |