aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java
diff options
context:
space:
mode:
authorHarsh Shandilya <msfjarvis@gmail.com>2019-02-03 16:54:15 +0530
committerMohamed Zenadi <zeapo@users.noreply.github.com>2019-02-03 12:24:15 +0100
commit86696c668c08c8e283e840b6c54e40fa043c542a (patch)
treef36139bed1a6ae1589570b7fcf8aff2ad4d3d4a9 /app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java
parenta819343c747b2ce022c5a5c7810979a62a213dc5 (diff)
downloadHardenedPass-86696c668c08c8e283e840b6c54e40fa043c542a.tar.gz
HardenedPass-86696c668c08c8e283e840b6c54e40fa043c542a.zip
Convert PasswordEntry to Kotlin (#477)
Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com>
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java138
1 files changed, 0 insertions, 138 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java b/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java
deleted file mode 100644
index d876aefd..00000000
--- a/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package com.zeapo.pwdstore;
-
-import android.net.Uri;
-
-import java.io.ByteArrayOutputStream;
-import java.io.UnsupportedEncodingException;
-
-/**
- * A single entry in password store.
- */
-public class PasswordEntry {
-
- private static final String[] USERNAME_FIELDS = new String[]{"login", "username"};
- private final String password;
- private final String username;
- private final String totpSecret;
- private final String hotpSecret;
- private final Long hotpCounter;
- private final String content;
- private String extraContent;
- private boolean isIncremented = false;
-
- public PasswordEntry(final ByteArrayOutputStream os) throws UnsupportedEncodingException {
- this(os.toString("UTF-8"));
- }
-
- public PasswordEntry(final String decryptedContent) {
- final String[] passContent = decryptedContent.split("\n", 2);
- content = decryptedContent;
- password = passContent[0];
- totpSecret = findTotpSecret(content);
- hotpSecret = findHotpSecret(content);
- hotpCounter = findHotpCounter(content);
- extraContent = findExtraContent(passContent);
- username = findUsername();
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getExtraContent() {
- return extraContent;
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getTotpSecret() {
- return totpSecret;
- }
-
- public Long getHotpCounter() {
- return hotpCounter;
- }
-
- public String getHotpSecret() {
- return hotpSecret;
- }
-
- public boolean hasExtraContent() {
- return extraContent.length() != 0;
- }
-
- public boolean hasUsername() {
- return username != null;
- }
-
- public boolean hasTotp() {
- return totpSecret != null;
- }
-
- public boolean hasHotp() {
- return hotpSecret != null && hotpCounter != null;
- }
-
- public boolean hotpIsIncremented() {
- return isIncremented;
- }
-
- public void incrementHotp() {
- for (String line : content.split("\n")) {
- if (line.startsWith("otpauth://hotp/")) {
- extraContent = extraContent.replaceFirst("counter=[0-9]+", "counter=" + Long.toString(hotpCounter + 1));
- isIncremented = true;
- }
- }
- }
-
- private String findUsername() {
- final String[] extraLines = extraContent.split("\n");
- for (String line : extraLines) {
- for (String field : USERNAME_FIELDS) {
- if (line.toLowerCase().startsWith(field + ":")) {
- return line.split(": *", 2)[1];
- }
- }
- }
- 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;
- }
-
- private String findHotpSecret(String decryptedContent) {
- for (String line : decryptedContent.split("\n")) {
- if (line.startsWith("otpauth://hotp/")) {
- return Uri.parse(line).getQueryParameter("secret");
- }
- }
- return null;
- }
-
- private Long findHotpCounter(String decryptedContent) {
- for (String line : decryptedContent.split("\n")) {
- if (line.startsWith("otpauth://hotp/")) {
- return Long.parseLong(Uri.parse(line).getQueryParameter("counter"));
- }
- }
- return null;
- }
-
- private String findExtraContent(String[] passContent) {
- String extraContent = passContent.length > 1 ? passContent[1] : "";
- // if there is a HOTP URI, we must return the extra content with the counter incremented
- if (hasHotp()) {
- return extraContent.replaceFirst("counter=[0-9]+", "counter=" + Long.toString(hotpCounter));
- }
- return extraContent;
- }
-}