From c81e08bf1feb72e48f105abdca56c9f24ae5caa4 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Wed, 23 Apr 2025 15:51:49 +0200 Subject: [PATCH] Fall back to default values in the FreeOTP importer --- .../aegis/importers/FreeOtpImporter.java | 6 +++--- .../aegis/importers/DatabaseImporterTest.java | 9 +++++++++ .../aegis/importers/freeotp_v2_null_algo.xml | Bin 0 -> 1066 bytes 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 app/src/test/resources/com/beemdevelopment/aegis/importers/freeotp_v2_null_algo.xml diff --git a/app/src/main/java/com/beemdevelopment/aegis/importers/FreeOtpImporter.java b/app/src/main/java/com/beemdevelopment/aegis/importers/FreeOtpImporter.java index 8b96299b82..0266ca95e5 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/importers/FreeOtpImporter.java +++ b/app/src/main/java/com/beemdevelopment/aegis/importers/FreeOtpImporter.java @@ -298,8 +298,8 @@ public Result convert() { private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEntryException { try { String type = obj.getString("type").toLowerCase(Locale.ROOT); - String algo = obj.getString("algo"); - int digits = obj.getInt("digits"); + String algo = obj.optString("algo", OtpInfo.DEFAULT_ALGORITHM); + int digits = obj.optInt("digits", OtpInfo.DEFAULT_DIGITS); byte[] secret = toBytes(obj.getJSONArray("secret")); String issuer = obj.getString("issuerExt"); @@ -308,7 +308,7 @@ private static VaultEntry convertEntry(JSONObject obj) throws DatabaseImporterEn OtpInfo info; switch (type) { case "totp": - int period = obj.getInt("period"); + int period = obj.optInt("period", TotpInfo.DEFAULT_PERIOD); if (issuer.equals("Steam")) { info = new SteamInfo(secret, algo, digits, period); } else { diff --git a/app/src/test/java/com/beemdevelopment/aegis/importers/DatabaseImporterTest.java b/app/src/test/java/com/beemdevelopment/aegis/importers/DatabaseImporterTest.java index 4742eabd43..1457d118ff 100644 --- a/app/src/test/java/com/beemdevelopment/aegis/importers/DatabaseImporterTest.java +++ b/app/src/test/java/com/beemdevelopment/aegis/importers/DatabaseImporterTest.java @@ -257,6 +257,15 @@ public void testImportFreeOtpV2Api34() throws IOException, DatabaseImporterExcep checkImportedEntries(entries); } + @Test + public void testImportFreeOtpV2NullAlgo() throws IOException, DatabaseImporterException, OtpInfoException { + List entries = importEncrypted(FreeOtpImporter.class, "freeotp_v2_null_algo.xml", encryptedState -> { + final char[] password = "test".toCharArray(); + return ((FreeOtpImporter.EncryptedState) encryptedState).decrypt(password); + }); + checkImportedEntries(entries); + } + @Test public void testImportFreeOtpPlus() throws IOException, DatabaseImporterException, OtpInfoException { List entries = importPlain(FreeOtpPlusImporter.class, "freeotp_plus.json"); diff --git a/app/src/test/resources/com/beemdevelopment/aegis/importers/freeotp_v2_null_algo.xml b/app/src/test/resources/com/beemdevelopment/aegis/importers/freeotp_v2_null_algo.xml new file mode 100644 index 0000000000000000000000000000000000000000..dc890c5c66d0c0ba93b80a9e815c512863d94c7c GIT binary patch literal 1066 zcma)*O>Wab7=}%&Qp%1E2N+nPnbu>EJ$5#wv?;BsLZoJgD=~?kCe%NXJ*A1F+=xpc zPQaEsa0lMc4ivE>QsVLVKi~7_%TH&gshww^%xANIXJ`5TnQ5k%X1=rglAJzo&j^%W=ad>gFG7OLg@+`H zi}Ca$O7eLKdyF83cVF|6`|dRjGBC9%GMm*64FWGJQCYM_M(88DZ5wi>VQ$YH<4Wmr z^yn;}&tc&*Y)cNS+pKJ_e^!|B)!C6u*qW`a^Xh+=DJ-R1r@vyern$@N{=#ChCs|oB zzA>Gbf0=SK%5p?pnx-ldVwdv_ufzAl0X5w#OoQuPWJ|lXyJE#repA&mJ1r11cyn=b z>fPgQGie|_R4Dr8xL(d}mLiMwkklbX27nUJ2b>h%c?l-51R9Mc2O*CL8nM8tuzH}< zn_c>_Mnnsg@QlbzXNA23eS4Ok=A;Qi4`LFE09X(K%E;q@E3x;OvIsu12s7vb1$+90ZI iq*GjpMuIj28V}b~vfG>+bM3Y?utYe(L`Z$TUi<>?SPG*6 literal 0 HcmV?d00001