diff options
| author | Wiktor Kwapisiewicz <wiktor@metacode.biz> | 2017-11-06 12:41:00 +0100 |
|---|---|---|
| committer | Mohamed Zenadi <zeapo@users.noreply.github.com> | 2017-11-19 11:14:45 +0100 |
| commit | 3d5dd65e306ba3ca560b3c221830ee4cdb4363fb (patch) | |
| tree | 6a417353098a9dc22093568c7e6c1dd505997512 /app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java | |
| parent | 67a7b124eec9178f8539664bf4d2528a111465b2 (diff) | |
| download | HardenedPass-3d5dd65e306ba3ca560b3c221830ee4cdb4363fb.tar.gz HardenedPass-3d5dd65e306ba3ca560b3c221830ee4cdb4363fb.zip | |
Display TOTP code if entry contains OTP secret
TOTP is calculated on display and on copy to clipboard from secret
embedded in entry (either in password or in extra) and the current time.
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java')
| -rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java b/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java index d4d3fe81..ba689fe9 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java @@ -1,5 +1,7 @@ package com.zeapo.pwdstore; +import android.net.Uri; + import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; @@ -13,6 +15,7 @@ public class PasswordEntry { private final String extraContent; private final String password; private final String username; + private final String totpSecret; public PasswordEntry(final ByteArrayOutputStream os) throws UnsupportedEncodingException { this(os.toString("UTF-8")); @@ -23,6 +26,7 @@ public class PasswordEntry { password = passContent[0]; extraContent = passContent.length > 1 ? passContent[1] : ""; username = findUsername(); + totpSecret = findTotpSecret(decryptedContent); } public String getPassword() { @@ -37,6 +41,10 @@ public class PasswordEntry { return username; } + public String getTotpSecret() { + return totpSecret; + } + public boolean hasExtraContent() { return extraContent.length() != 0; } @@ -45,6 +53,8 @@ public class PasswordEntry { return username != null; } + public boolean hasTotp() { return totpSecret != null; } + private String findUsername() { final String[] extraLines = extraContent.split("\n"); for (String line : extraLines) { @@ -56,4 +66,13 @@ public class PasswordEntry { } return null; } + + private String findTotpSecret(String decryptedContent) { + for (String line : decryptedContent.split("\n")) { + if (line.startsWith("otpauth://totp/")) { + return Uri.parse(line).getQueryParameter("secret"); + } + } + return null; + } } |
