diff --git a/app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporter.java b/app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporter.java index dffd4619..9e0c1267 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporter.java +++ b/app/src/main/java/com/beemdevelopment/aegis/importers/DatabaseImporter.java @@ -34,6 +34,7 @@ public abstract class DatabaseImporter { _importers.put("FreeOTP+", FreeOtpPlusImporter.class); _importers.put("Google Authenticator", GoogleAuthImporter.class); _importers.put("Microsoft Authenticator", MicrosoftAuthImporter.class); + _importers.put("Plain text", GoogleAuthUriImporter.class); _importers.put("Steam", SteamImporter.class); _importers.put("TOTP Authenticator", TotpAuthenticatorImporter.class); _importers.put("WinAuth", WinAuthImporter.class); diff --git a/app/src/main/java/com/beemdevelopment/aegis/importers/GoogleAuthUriImporter.java b/app/src/main/java/com/beemdevelopment/aegis/importers/GoogleAuthUriImporter.java new file mode 100644 index 00000000..5e9d33e9 --- /dev/null +++ b/app/src/main/java/com/beemdevelopment/aegis/importers/GoogleAuthUriImporter.java @@ -0,0 +1,81 @@ +package com.beemdevelopment.aegis.importers; + +import android.content.Context; + +import com.beemdevelopment.aegis.otp.GoogleAuthInfo; +import com.beemdevelopment.aegis.otp.GoogleAuthInfoException; +import com.beemdevelopment.aegis.vault.VaultEntry; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +public class GoogleAuthUriImporter extends DatabaseImporter { + public GoogleAuthUriImporter(Context context) { + super(context); + } + + @Override + protected String getAppPkgName() { + return null; + } + + @Override + protected String getAppSubPath() { + return null; + } + + @Override + public GoogleAuthUriImporter.State read(DatabaseImporter.FileReader reader) throws DatabaseImporterException { + ArrayList lines = new ArrayList<>(); + + try (InputStreamReader streamReader = new InputStreamReader(reader.getStream()); + BufferedReader bufferedReader = new BufferedReader(streamReader)) { + String line; + while ((line = bufferedReader.readLine()) != null) { + if (!line.isEmpty()) { + lines.add(line); + } + } + } catch (IOException e) { + throw new DatabaseImporterException(e); + } + + return new GoogleAuthUriImporter.State(lines); + } + + public static class State extends DatabaseImporter.State { + private ArrayList _lines; + + private State(ArrayList lines) { + super(false); + _lines = lines; + } + + @Override + public DatabaseImporter.Result convert() { + DatabaseImporter.Result result = new DatabaseImporter.Result(); + + for (String line : _lines) { + try { + VaultEntry entry = convertEntry(line); + result.addEntry(entry); + } catch (DatabaseImporterEntryException e) { + result.addError(e); + } + } + + return result; + } + + private static VaultEntry convertEntry(String line) throws DatabaseImporterEntryException { + try { + GoogleAuthInfo info = GoogleAuthInfo.parseUri(line); + return new VaultEntry(info); + } catch (GoogleAuthInfoException e) { + throw new DatabaseImporterEntryException(e, line); + } + } + } +} diff --git a/app/src/main/java/com/beemdevelopment/aegis/importers/WinAuthImporter.java b/app/src/main/java/com/beemdevelopment/aegis/importers/WinAuthImporter.java index 8841bf4e..774a31c2 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/importers/WinAuthImporter.java +++ b/app/src/main/java/com/beemdevelopment/aegis/importers/WinAuthImporter.java @@ -1,14 +1,8 @@ package com.beemdevelopment.aegis.importers; import android.content.Context; -import com.beemdevelopment.aegis.vault.VaultEntry; -import com.beemdevelopment.aegis.otp.GoogleAuthInfo; -import com.beemdevelopment.aegis.otp.GoogleAuthInfoException; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; +import com.beemdevelopment.aegis.vault.VaultEntry; public class WinAuthImporter extends DatabaseImporter { public WinAuthImporter(Context context) { @@ -27,57 +21,29 @@ public class WinAuthImporter extends DatabaseImporter { @Override public WinAuthImporter.State read(FileReader reader) throws DatabaseImporterException { - ArrayList lines = new ArrayList<>(); - - try { - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(reader.getStream())); - String line; - - while ((line = bufferedReader.readLine()) != null) { - lines.add(line); - } - } catch (IOException e) { - throw new DatabaseImporterException(e); - } - - return new State(lines); + GoogleAuthUriImporter importer = new GoogleAuthUriImporter(getContext()); + GoogleAuthUriImporter.State state = importer.read(reader); + return new State(state); } public static class State extends DatabaseImporter.State { - private ArrayList _lines; + private GoogleAuthUriImporter.State _state; - private State(ArrayList lines) { + private State(GoogleAuthUriImporter.State state) { super(false); - _lines = lines; + _state = state; } @Override public Result convert() { - Result result = new Result(); + Result result = _state.convert(); - for (String line : _lines) { - try { - VaultEntry entry = convertEntry(line); - result.addEntry(entry); - } catch (DatabaseImporterEntryException e) { - result.addError(e); - } + for (VaultEntry entry : result.getEntries()) { + entry.setIssuer(entry.getName()); + entry.setName("WinAuth"); } return result; } - - private static VaultEntry convertEntry(String line) throws DatabaseImporterEntryException { - try { - GoogleAuthInfo info = GoogleAuthInfo.parseUri(line); - VaultEntry vaultEntry = new VaultEntry(info); - vaultEntry.setIssuer(vaultEntry.getName()); - vaultEntry.setName("WinAuth"); - - return vaultEntry; - } catch (GoogleAuthInfoException e) { - throw new DatabaseImporterEntryException(e, line); - } - } } }