From 5cba6c62d7b4628dfaf482dd883e333f93d323d4 Mon Sep 17 00:00:00 2001 From: Felix Bechstein Date: Sat, 22 Jul 2017 12:09:34 +0200 Subject: Parse username from password entry, refs #192 (#318) This is a first step of letting APS handle usernames from password entries. It shows the username in PgpHandler and allows to copy it to the clipboard. --- .../java/com/zeapo/pwdstore/PasswordEntry.java | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java (limited to 'app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java') diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java b/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java new file mode 100644 index 00000000..d4d3fe81 --- /dev/null +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordEntry.java @@ -0,0 +1,59 @@ +package com.zeapo.pwdstore; + +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 extraContent; + private final String password; + private final String username; + + public PasswordEntry(final ByteArrayOutputStream os) throws UnsupportedEncodingException { + this(os.toString("UTF-8")); + } + + public PasswordEntry(final String decryptedContent) { + final String[] passContent = decryptedContent.split("\n", 2); + password = passContent[0]; + extraContent = passContent.length > 1 ? passContent[1] : ""; + username = findUsername(); + } + + public String getPassword() { + return password; + } + + public String getExtraContent() { + return extraContent; + } + + public String getUsername() { + return username; + } + + public boolean hasExtraContent() { + return extraContent.length() != 0; + } + + public boolean hasUsername() { + return username != null; + } + + 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; + } +} -- cgit v1.2.3