From fc9c61686958322595cf123b99a4aeaf69bde334 Mon Sep 17 00:00:00 2001 From: Ankit Tiwari Date: Thu, 14 Oct 2021 23:23:01 +0530 Subject: [PATCH] 1.Created new method multipleCardsExportImportPasswordProtected() in ImportExportTest.java \n 2.Added 5th Paramete --- .../protect/card_locker/ImportExportTask.java | 2 +- .../importexport/CatimaExporter.java | 16 ++++++- .../card_locker/importexport/Exporter.java | 2 +- .../importexport/MultiFormatExporter.java | 4 +- .../protect/card_locker/ImportExportTest.java | 42 ++++++++++++++++--- 5 files changed, 54 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/protect/card_locker/ImportExportTask.java b/app/src/main/java/protect/card_locker/ImportExportTask.java index 1538185c3..00b78b4d5 100644 --- a/app/src/main/java/protect/card_locker/ImportExportTask.java +++ b/app/src/main/java/protect/card_locker/ImportExportTask.java @@ -77,7 +77,7 @@ class ImportExportTask extends AsyncTask try { OutputStreamWriter writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8); - result = MultiFormatExporter.exportData(context, db, stream, format); + result = MultiFormatExporter.exportData(context, db, stream, format,null); writer.close(); } catch (IOException e) diff --git a/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java b/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java index 4afe49841..124e9d9c9 100644 --- a/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CatimaExporter.java @@ -6,6 +6,7 @@ import android.graphics.Bitmap; import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.ZipParameters; +import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.util.InternalZipConstants; import org.apache.commons.csv.CSVFormat; @@ -30,14 +31,21 @@ import protect.card_locker.Utils; */ public class CatimaExporter implements Exporter { - public void exportData(Context context, DBHelper db, OutputStream output) throws IOException, InterruptedException + public void exportData(Context context, DBHelper db, OutputStream output,char[] password) throws IOException, InterruptedException { // Necessary vars int readLen; byte[] readBuffer = new byte[InternalZipConstants.BUFF_SIZE]; // Create zip output stream - ZipOutputStream zipOutputStream = new ZipOutputStream(output); + ZipOutputStream zipOutputStream; + + if(password!=null && password.length>0){ + zipOutputStream = new ZipOutputStream(output,password); + } + else{ + zipOutputStream = new ZipOutputStream(output); + } // Generate CSV ByteArrayOutputStream catimaOutputStream = new ByteArrayOutputStream(); @@ -47,6 +55,10 @@ public class CatimaExporter implements Exporter // Add CSV to zip file ZipParameters csvZipParameters = new ZipParameters(); csvZipParameters.setFileNameInZip("catima.csv"); + if(password!=null && password.length>0){ + csvZipParameters.setEncryptFiles(true); + csvZipParameters.setEncryptionMethod(EncryptionMethod.AES); + } zipOutputStream.putNextEntry(csvZipParameters); InputStream csvInputStream = new ByteArrayInputStream(catimaOutputStream.toByteArray()); while ((readLen = csvInputStream.read(readBuffer)) != -1) { diff --git a/app/src/main/java/protect/card_locker/importexport/Exporter.java b/app/src/main/java/protect/card_locker/importexport/Exporter.java index 6f70f6d80..ad4928030 100644 --- a/app/src/main/java/protect/card_locker/importexport/Exporter.java +++ b/app/src/main/java/protect/card_locker/importexport/Exporter.java @@ -17,5 +17,5 @@ public interface Exporter * Export the database to the output stream in a given format. * @throws IOException */ - void exportData(Context context, DBHelper db, OutputStream output) throws IOException, InterruptedException; + void exportData(Context context, DBHelper db, OutputStream output,char[] password) throws IOException, InterruptedException; } diff --git a/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java b/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java index 8e95c49c4..b45cf1eda 100644 --- a/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java +++ b/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java @@ -22,7 +22,7 @@ public class MultiFormatExporter * another ImportExportResult otherwise. If not Success, partial data may have been * written to the output stream, and it should be discarded. */ - public static ImportExportResult exportData(Context context, DBHelper db, OutputStream output, DataFormat format) + public static ImportExportResult exportData(Context context, DBHelper db, OutputStream output, DataFormat format,char[] password) { Exporter exporter = null; @@ -40,7 +40,7 @@ public class MultiFormatExporter { try { - exporter.exportData(context, db, output); + exporter.exportData(context, db, output,password); return ImportExportResult.Success; } catch(IOException e) diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index 41374d496..f0ed57a1e 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -334,7 +334,7 @@ public class ImportExportTest OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,null); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -354,6 +354,36 @@ public class ImportExportTest TestHelpers.getEmptyDb(activity); } + public void multipleCardsExportImportPasswordProtected() throws IOException + { + final int NUM_CARDS = 10; + final String password = "123456789"; + addLoyaltyCards(NUM_CARDS); + + ByteArrayOutputStream outData = new ByteArrayOutputStream(); + OutputStreamWriter outStream = new OutputStreamWriter(outData); + + // Export data to CSV format + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,password.toCharArray()); + assertEquals(ImportExportResult.Success, result); + outStream.close(); + + TestHelpers.getEmptyDb(activity); + + ByteArrayInputStream inData = new ByteArrayInputStream(outData.toByteArray()); + + // Import the CSV data + result = MultiFormatImporter.importData(activity.getApplicationContext(), db, inData, DataFormat.Catima, password.toCharArray()); + assertEquals(ImportExportResult.Success, result); + + assertEquals(NUM_CARDS, db.getLoyaltyCardCount()); + + checkLoyaltyCards(); + + // Clear the database for the next format under test + TestHelpers.getEmptyDb(activity); + } + @Test public void multipleCardsExportImportSomeStarred() throws IOException { @@ -365,7 +395,7 @@ public class ImportExportTest OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,null); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -438,7 +468,7 @@ public class ImportExportTest OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,null); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -482,7 +512,7 @@ public class ImportExportTest OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export into CSV data - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,null); assertEquals(ImportExportResult.Success, result); outStream.close(); @@ -513,7 +543,7 @@ public class ImportExportTest OutputStreamWriter outStream = new OutputStreamWriter(outData); // Export data to CSV format - ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima); + ImportExportResult result = MultiFormatExporter.exportData(activity.getApplicationContext(), db, outData, DataFormat.Catima,null); assertEquals(ImportExportResult.Success, result); TestHelpers.getEmptyDb(activity); @@ -901,7 +931,7 @@ public class ImportExportTest // Export everything ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - MultiFormatExporter.exportData(activity.getApplicationContext(), db, outputStream, DataFormat.Catima); + MultiFormatExporter.exportData(activity.getApplicationContext(), db, outputStream, DataFormat.Catima,null); // Wipe database TestHelpers.getEmptyDb(activity);