From 871f8e3bb39458a239505d6a2bc58a436140acf2 Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Wed, 11 May 2016 12:54:22 -0400 Subject: [PATCH 1/6] Mocked up solution to delete report problem. --- .../sleuthkit/autopsy/casemodule/Case.java | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 2d1d0c0a03..6c1863421f 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -31,8 +31,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Collection; +import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.HashSet; @@ -54,26 +54,26 @@ import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.casemodule.CaseMetadata.CaseMetadataException; import org.sleuthkit.autopsy.casemodule.events.AddingDataSourceEvent; import org.sleuthkit.autopsy.casemodule.events.AddingDataSourceFailedEvent; -import org.sleuthkit.autopsy.casemodule.events.DataSourceAddedEvent; -import org.sleuthkit.autopsy.casemodule.events.ReportAddedEvent; -import org.sleuthkit.autopsy.casemodule.services.Services; -import org.sleuthkit.autopsy.core.UserPreferences; -import org.sleuthkit.autopsy.corecomponentinterfaces.CoreComponentControl; -import org.sleuthkit.autopsy.coreutils.FileUtil; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import org.sleuthkit.autopsy.coreutils.PlatformUtil; -import org.sleuthkit.autopsy.coreutils.Version; -import org.sleuthkit.autopsy.coreutils.NetworkUtils; -import org.sleuthkit.autopsy.events.AutopsyEvent; -import org.sleuthkit.autopsy.events.AutopsyEventException; -import org.sleuthkit.autopsy.events.AutopsyEventPublisher; import org.sleuthkit.autopsy.casemodule.events.BlackBoardArtifactTagAddedEvent; import org.sleuthkit.autopsy.casemodule.events.BlackBoardArtifactTagDeletedEvent; import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent; import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent; +import org.sleuthkit.autopsy.casemodule.events.DataSourceAddedEvent; +import org.sleuthkit.autopsy.casemodule.events.ReportAddedEvent; +import org.sleuthkit.autopsy.casemodule.services.Services; import org.sleuthkit.autopsy.core.RuntimeProperties; +import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.core.UserPreferencesException; +import org.sleuthkit.autopsy.corecomponentinterfaces.CoreComponentControl; +import org.sleuthkit.autopsy.coreutils.FileUtil; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import org.sleuthkit.autopsy.coreutils.NetworkUtils; +import org.sleuthkit.autopsy.coreutils.PlatformUtil; +import org.sleuthkit.autopsy.coreutils.Version; +import org.sleuthkit.autopsy.events.AutopsyEvent; +import org.sleuthkit.autopsy.events.AutopsyEventException; +import org.sleuthkit.autopsy.events.AutopsyEventPublisher; import org.sleuthkit.autopsy.ingest.IngestJob; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.datamodel.BlackboardArtifactTag; @@ -437,7 +437,7 @@ public class Case implements SleuthkitCase.ErrorObserver { * CaseActionException.getCause will return a Throwable * (null otherwise). * - * @throws CaseActionException if there is a problem creating the case. + * @throws CaseActionException if there is a problem creating the case. */ @Messages({"Case.creationException=Could not create case: failed to make metadata file."}) public static void create(String caseDir, String caseName, String caseNumber, String examiner, CaseType caseType) throws CaseActionException { @@ -1629,8 +1629,6 @@ public class Case implements SleuthkitCase.ErrorObserver { * @throws TskCoreException */ public void deleteReports(Collection reports, boolean deleteFromDisk) throws TskCoreException { - - String pathToReportsFolder = Paths.get(this.db.getDbDirPath(), "Reports").normalize().toString(); // NON-NLS for (Report report : reports) { // delete from the database. @@ -1639,20 +1637,26 @@ public class Case implements SleuthkitCase.ErrorObserver { if (deleteFromDisk) { // traverse to the root directory of Report report. String reportPath = report.getPath(); - while (!Paths.get(reportPath, "..").normalize().toString().equals(pathToReportsFolder)) { // NON-NLS - reportPath = Paths.get(reportPath, "..").normalize().toString(); // NON-NLS - } // delete from the disk. - try { - FileUtils.deleteDirectory(new File(reportPath)); - } catch (IOException | SecurityException ex) { - logger.log(Level.WARNING, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.log.msg"), ex); - JOptionPane.showMessageDialog(null, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.msg", report.getReportName(), reportPath)); + File toDelete = new File(reportPath); + if (toDelete.isDirectory()) { + try { + FileUtils.deleteDirectory(new File(reportPath)); + } catch (IOException | SecurityException ex) { + logger.log(Level.WARNING, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.log.msg"), ex); + JOptionPane.showMessageDialog(null, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.msg", report.getReportName(), reportPath)); + } + } else { + boolean deleted = toDelete.delete(); + if (!deleted) { + logger.log(Level.WARNING, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.log.msg")); + JOptionPane.showMessageDialog(null, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.msg", report.getReportName(), reportPath)); + } } - } - eventPublisher.publish(new AutopsyEvent(Events.REPORT_DELETED.toString(), null, null)); + eventPublisher.publish(new AutopsyEvent(Events.REPORT_DELETED.toString(), null, null)); + } } } @@ -1676,11 +1680,12 @@ public class Case implements SleuthkitCase.ErrorObserver { * Gets the full path to the case metadata file for this case. * * @return configFilePath The case metadata file path. + * * @deprecated Use getCaseMetadata and CaseMetadata.getFilePath instead. */ @Deprecated String getConfigFilePath() { return getCaseMetadata().getFilePath().toString(); - } - + } + } From 05f6cd44a762a9838a42cc40e1c5316749aba6a7 Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Thu, 12 May 2016 14:14:47 -0400 Subject: [PATCH 2/6] Fixed event publishing for deleting report. --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 6c1863421f..3248a852e1 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1655,8 +1655,9 @@ public class Case implements SleuthkitCase.ErrorObserver { } } - eventPublisher.publish(new AutopsyEvent(Events.REPORT_DELETED.toString(), null, null)); + } + eventPublisher.publish(new AutopsyEvent(Events.REPORT_DELETED.toString(), null, null)); } } From d2dca5a8550abd0eb9fcbb2981edd5897d4a95eb Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Mon, 16 May 2016 10:00:37 -0400 Subject: [PATCH 3/6] Fixed delete behavior on html reports. --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 3248a852e1..a1562a72a5 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1640,9 +1640,12 @@ public class Case implements SleuthkitCase.ErrorObserver { // delete from the disk. File toDelete = new File(reportPath); + if (report.getReportName().equals("") && report.getSourceModuleName().equals("HTML Report")) { + toDelete = toDelete.getParentFile(); + } if (toDelete.isDirectory()) { try { - FileUtils.deleteDirectory(new File(reportPath)); + FileUtils.deleteDirectory(toDelete); } catch (IOException | SecurityException ex) { logger.log(Level.WARNING, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.log.msg"), ex); JOptionPane.showMessageDialog(null, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.msg", report.getReportName(), reportPath)); @@ -1655,7 +1658,6 @@ public class Case implements SleuthkitCase.ErrorObserver { } } - } eventPublisher.publish(new AutopsyEvent(Events.REPORT_DELETED.toString(), null, null)); } From 0eadea1a1552c76f22945069b130a95ef2e335d1 Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Mon, 16 May 2016 10:03:46 -0400 Subject: [PATCH 4/6] Added comment making it clear why html reports are given a special case. --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index a1562a72a5..ca531d9092 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1640,6 +1640,9 @@ public class Case implements SleuthkitCase.ErrorObserver { // delete from the disk. File toDelete = new File(reportPath); + // Makes sure that html reports are properly deleted from disk, + // as there are multiple files so the super directory should be + // deleted. if (report.getReportName().equals("") && report.getSourceModuleName().equals("HTML Report")) { toDelete = toDelete.getParentFile(); } From 6a12af021db36da8029ba6812ea834b7cf016f9f Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Tue, 17 May 2016 10:17:50 -0400 Subject: [PATCH 5/6] Rescinded special delete of reports. --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index ca531d9092..f05314c3f3 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1642,10 +1642,7 @@ public class Case implements SleuthkitCase.ErrorObserver { File toDelete = new File(reportPath); // Makes sure that html reports are properly deleted from disk, // as there are multiple files so the super directory should be - // deleted. - if (report.getReportName().equals("") && report.getSourceModuleName().equals("HTML Report")) { - toDelete = toDelete.getParentFile(); - } + // deleted. if (toDelete.isDirectory()) { try { FileUtils.deleteDirectory(toDelete); From f4c6963720368767c4ffd0af08e3b6ad2f9ea72a Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Tue, 17 May 2016 11:43:38 -0400 Subject: [PATCH 6/6] Fixed logging in deleting reports. --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index f05314c3f3..0b9f8ee58e 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1635,25 +1635,21 @@ public class Case implements SleuthkitCase.ErrorObserver { this.db.deleteReport(report); if (deleteFromDisk) { - // traverse to the root directory of Report report. String reportPath = report.getPath(); // delete from the disk. - File toDelete = new File(reportPath); - // Makes sure that html reports are properly deleted from disk, - // as there are multiple files so the super directory should be - // deleted. + File toDelete = new File(reportPath); if (toDelete.isDirectory()) { try { FileUtils.deleteDirectory(toDelete); } catch (IOException | SecurityException ex) { - logger.log(Level.WARNING, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.log.msg"), ex); + logger.log(Level.WARNING, "Unable to delete the report from the disk.", ex); JOptionPane.showMessageDialog(null, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.msg", report.getReportName(), reportPath)); } } else { boolean deleted = toDelete.delete(); if (!deleted) { - logger.log(Level.WARNING, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.log.msg")); + logger.log(Level.WARNING, "Unable to delete the report from the disk."); JOptionPane.showMessageDialog(null, NbBundle.getMessage(Case.class, "Case.deleteReports.deleteFromDiskException.msg", report.getReportName(), reportPath)); } }