From c8b6328cc624b4a20c28d792b4c76209208607dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Wed, 5 Jul 2023 13:05:47 +0100 Subject: [PATCH] Fix parse of import URI with trailing slash --- .../protect/card_locker/ImportURIHelper.java | 5 ++- .../protect/card_locker/ImportURITest.java | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java index d110cc24f..b733d71d4 100644 --- a/app/src/main/java/protect/card_locker/ImportURIHelper.java +++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java @@ -46,8 +46,11 @@ public class ImportURIHelper { } private boolean isImportUri(Uri uri) { + // Remove trailing slash added by some browsers (if it exists) + final String uriPath = uri.getPath().replaceAll("/$", ""); + for (int i = 0; i < hosts.length; i++) { - if (uri.getHost().equals(hosts[i]) && uri.getPath().equals(paths[i])) { + if (uri.getHost().equals(hosts[i]) && uriPath.equals(paths[i])) { return true; } } diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java index 7d16b1fa5..7ee0934e3 100644 --- a/app/src/test/java/protect/card_locker/ImportURITest.java +++ b/app/src/test/java/protect/card_locker/ImportURITest.java @@ -97,6 +97,37 @@ public class ImportURITest { assertEquals(0, parsedCard.archiveStatus); } + @Test + public void parseWithTrailingSlash() throws InvalidObjectException, UnsupportedEncodingException { + // Generate card + DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0); + + // Get card + LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1); + + // Card to URI, with a trailing slash + Uri cardUri = importURIHelper.toUri(card).buildUpon().path("/share/").build(); + assertEquals("/share/", cardUri.getPath()); + + // Parse URI + LoyaltyCard parsedCard = importURIHelper.parse(cardUri); + + // Compare everything + assertEquals(card.store, parsedCard.store); + assertEquals(card.note, parsedCard.note); + assertEquals(card.validFrom, parsedCard.validFrom); + assertEquals(card.expiry, parsedCard.expiry); + assertEquals(card.balance, parsedCard.balance); + assertEquals(card.balanceType, parsedCard.balanceType); + assertEquals(card.cardId, parsedCard.cardId); + assertEquals(card.barcodeId, parsedCard.barcodeId); + assertEquals(card.barcodeType.format(), parsedCard.barcodeType.format()); + assertNull(parsedCard.headerColor); + // No export of starStatus for export URL foreseen therefore 0 will be imported + assertEquals(0, parsedCard.starStatus); + assertEquals(0, parsedCard.archiveStatus); + } + @Test public void failToParseInvalidUri() { try {