From 3b3a2a26dced6770a15fc35eaf7b14af54056e72 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Tue, 23 Jul 2019 13:59:34 -0400 Subject: [PATCH 01/12] fixed mbox attachment names --- .../src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java index 42d74bcc2a..c6ff9b2746 100644 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java @@ -314,7 +314,7 @@ class MboxParser { filename = filename.replaceAll("\"", "_"); filename = filename.replaceAll("/", "_"); filename = filename.replaceAll("\\\\", "_"); - filename = filename.replaceAll("|", "_"); + filename = filename.replaceAll("\\|", "_"); filename = filename.replaceAll("\\*", "_"); // also had some crazy long names, so make random one if we get those. From f6cb5488bc0c2d74ef17597bc850fe27c30fa968 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Wed, 24 Jul 2019 12:08:44 -0400 Subject: [PATCH 02/12] Used func from FileUtil to remove odd char from attachment file names. --- .../autopsy/thunderbirdparser/MboxParser.java | 15 ++------------- .../autopsy/thunderbirdparser/PstParser.java | 3 ++- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java index c6ff9b2746..e872252748 100644 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java @@ -57,6 +57,7 @@ import org.apache.tika.parser.txt.CharsetDetector; import org.apache.tika.parser.txt.CharsetMatch; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.coreutils.FileUtil; import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.datamodel.TskData; import org.sleuthkit.datamodel.EncodedFileOutputStream; @@ -303,19 +304,7 @@ class MboxParser { logger.log(Level.SEVERE, Bundle.MboxParser_handleAttch_noOpenCase_errMsg(), ex); //NON-NLS return; } - String filename = e.getFilename(); - - // sanitize name. Had an attachment with a Japanese encoded path that - // invalid characters and attachment could not be saved. - filename = filename.replaceAll("\\?", "_"); - filename = filename.replaceAll("<", "_"); - filename = filename.replaceAll(">", "_"); - filename = filename.replaceAll(":", "_"); - filename = filename.replaceAll("\"", "_"); - filename = filename.replaceAll("/", "_"); - filename = filename.replaceAll("\\\\", "_"); - filename = filename.replaceAll("\\|", "_"); - filename = filename.replaceAll("\\*", "_"); + String filename = FileUtil.escapeFileName(e.getFilename()); // also had some crazy long names, so make random one if we get those. // also from Japanese image that had encoded name diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java index 704e3b2e14..317eba85d9 100644 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java @@ -35,6 +35,7 @@ import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.coreutils.FileUtil; import org.sleuthkit.autopsy.ingest.IngestMonitor; import org.sleuthkit.autopsy.ingest.IngestServices; import static org.sleuthkit.autopsy.thunderbirdparser.ThunderbirdMboxFileIngestModule.getRelModuleOutputPath; @@ -245,7 +246,7 @@ class PstParser { if (filename.isEmpty()) { filename = attach.getFilename(); } - String uniqueFilename = fileID + "-" + msg.getDescriptorNodeId() + "-" + attach.getContentId() + "-" + filename; + String uniqueFilename = fileID + "-" + msg.getDescriptorNodeId() + "-" + attach.getContentId() + "-" + FileUtil.escapeFileName(filename); String outPath = outputDirPath + uniqueFilename; saveAttachmentToDisk(attach, outPath); From 390cc300b65eb7fda3fcee1554c09f1770793ef7 Mon Sep 17 00:00:00 2001 From: esaunders Date: Wed, 24 Jul 2019 12:59:49 -0400 Subject: [PATCH 03/12] See if setting jna.nosys to true fixes our AppVeyor build problem. --- Core/src/org/sleuthkit/autopsy/core/Installer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/core/Installer.java b/Core/src/org/sleuthkit/autopsy/core/Installer.java index 329fe3dfc9..65b5fbacdb 100644 --- a/Core/src/org/sleuthkit/autopsy/core/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/core/Installer.java @@ -299,6 +299,10 @@ public class Installer extends ModuleInstall { * initialized later. */ private static void addGstreamerPathsToEnv() { + if (System.getProperty("jna.nosys") == null) { + System.setProperty("jna.nosys", "true"); + } + Path gstreamerPath = InstalledFileLocator.getDefault().locate("gstreamer", Installer.class.getPackage().getName(), false).toPath(); if (gstreamerPath == null) { From 554db1aedcdc94b6532e472ba2b1efea0ddbe348 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Wed, 24 Jul 2019 15:13:54 -0400 Subject: [PATCH 04/12] added code size table columns to the available space --- .../corecomponents/DataResultViewerTable.java | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java index b99a94af96..1767ac9f01 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -434,7 +434,7 @@ public class DataResultViewerTable extends AbstractDataResultViewer { } setColumnWidths(); - + /* * Load column sorting information from preferences file and apply it to * columns. @@ -516,12 +516,22 @@ public class DataResultViewerTable extends AbstractDataResultViewer { protected void setColumnWidths() { if (rootNode.getChildren().getNodesCount() != 0) { final Graphics graphics = outlineView.getGraphics(); + if (graphics != null) { + // Current width of the outlineView + double outlineViewWidth = outlineView.getSize().getWidth(); + // List of the column widths + List columnWidths = new ArrayList<>(); final FontMetrics metrics = graphics.getFontMetrics(); int margin = 4; int padding = 8; - + + int totalColumnWidth = 0; + int cntMaxSizeColumns =0; + + // Calulate the width for each column keeping track of the number + // of columns that were set to columnwidthLimit. for (int column = 0; column < outline.getModel().getColumnCount(); column++) { int firstColumnPadding = (column == 0) ? 32 : 0; int columnWidthLimit = (column == 0) ? 350 : 300; @@ -539,8 +549,43 @@ public class DataResultViewerTable extends AbstractDataResultViewer { int columnWidth = Math.max(valuesWidth, headerWidth); columnWidth += 2 * margin + padding; // add margin and regular padding - columnWidth = Math.min(columnWidth, columnWidthLimit); + columnWidth = Math.min(columnWidth, columnWidthLimit); + columnWidths.add(columnWidth); + + totalColumnWidth += columnWidth; + + if( columnWidth == columnWidthLimit) { + cntMaxSizeColumns++; + } + } + + // Figure out how much extra, if any can be given to the columns + // so that the table is as wide as outlineViewWidth. If cntMaxSizeColumns + // is greater than 0 divide the extra space between the columns + // that could use more space. Otherwise divide evenly amoung + // all columns. + int extraWidth = 0; + + if (totalColumnWidth < outlineViewWidth) { + if (cntMaxSizeColumns > 0) { + extraWidth = (int) ((outlineViewWidth - totalColumnWidth)/cntMaxSizeColumns); + } else { + extraWidth = (int) ((outlineViewWidth - totalColumnWidth)/columnWidths.size()); + } + } + + for(int column = 0; column < columnWidths.size(); column++) { + int columnWidth = columnWidths.get(column); + + if(cntMaxSizeColumns > 0) { + if(columnWidth >= 300) { + columnWidth += extraWidth; + } + } else { + columnWidth += extraWidth; + } + outline.getColumnModel().getColumn(column).setPreferredWidth(columnWidth); } } From 494e853a53f0c034c549bc82d808d3dd9135cbe7 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Mon, 29 Jul 2019 10:14:14 -0400 Subject: [PATCH 05/12] Text translation exported public API adjustments --- .../autopsy/texttranslation/Bundle.properties | 8 ++++++++ .../texttranslation/Bundle.properties-MERGED | 12 ++++++++++++ .../TextTranslationService.java | 18 +++++++++--------- .../texttranslation/TextTranslator.java | 6 +++--- .../{ui => }/TranslationOptionsPanel.form | 4 ++-- .../{ui => }/TranslationOptionsPanel.java | 6 ++---- .../TranslationOptionsPanelController.java | 2 +- .../translators/BingTranslator.java | 2 +- .../translators/GoogleTranslator.java | 2 +- .../texttranslation/ui/Bundle.properties | 2 -- .../ui/Bundle.properties-MERGED | 6 ------ .../ui/TranslatedTextViewer.java | 2 +- 12 files changed, 40 insertions(+), 30 deletions(-) create mode 100755 Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties create mode 100755 Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties-MERGED rename Core/src/org/sleuthkit/autopsy/texttranslation/{ui => }/TranslationOptionsPanel.form (91%) rename Core/src/org/sleuthkit/autopsy/texttranslation/{ui => }/TranslationOptionsPanel.java (97%) rename Core/src/org/sleuthkit/autopsy/texttranslation/{ui => }/TranslationOptionsPanelController.java (98%) diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties b/Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties new file mode 100755 index 0000000000..5fcf80851c --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties @@ -0,0 +1,8 @@ +OptionsCategory_Name_Machine_Translation=Machine Translation +OptionsCategory_Keywords_Machine_Translation_Settings=Machine Translation Settings +TranslationContentPanel.ocrLabel.text=OCR: +TranslationOptionsPanelController.moduleErr=Module Error +TranslationOptionsPanelController.moduleErr.msg=A module caused an error listening to TranslationSettingsPanelController updates. See log to determine which module. Some data could be incomplete. +TranslationContentPanel.showLabel.text=Show: +TranslationOptionsPanel.translationServiceLabel.text=Text translator: +TranslationOptionsPanel.translationOptionsDescription.text=Configure a 3rd party text translation service to enable text and file name translation. diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties-MERGED new file mode 100755 index 0000000000..665c07c36f --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/Bundle.properties-MERGED @@ -0,0 +1,12 @@ +OptionsCategory_Name_Machine_Translation=Machine Translation +OptionsCategory_Keywords_Machine_Translation_Settings=Machine Translation Settings +TranslationContentPanel.ocrLabel.text=OCR: +TranslationOptionsPanel.noTextTranslators.text=No text translators exist, translation is disabled. +TranslationOptionsPanel.noTextTranslatorSelected.text=No text translator selected, translation is disabled. +TranslationOptionsPanel.textTranslatorsUnavailable.text=Unable to get selected text translator, translation is disabled. +TranslationOptionsPanel.translationDisabled.text=Translation disabled +TranslationOptionsPanelController.moduleErr=Module Error +TranslationOptionsPanelController.moduleErr.msg=A module caused an error listening to TranslationSettingsPanelController updates. See log to determine which module. Some data could be incomplete. +TranslationContentPanel.showLabel.text=Show: +TranslationOptionsPanel.translationServiceLabel.text=Text translator: +TranslationOptionsPanel.translationOptionsDescription.text=Configure a 3rd party text translation service to enable text and file name translation. diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java index b24dca2aac..8c8809b045 100755 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java @@ -50,7 +50,7 @@ public final class TextTranslationService { * Update the translator currently in use to match the one saved to the user * preferences */ - public void updateSelectedTranslator() { + void updateSelectedTranslator() { String translatorName = UserPreferences.getTextTranslatorName(); for (TextTranslator translator : translators) { if (translator.getName().equals(translatorName)) { @@ -92,7 +92,7 @@ public final class TextTranslationService { * * @throws NoServiceProviderException */ - public TextTranslator getTranslatorByName(String translatorName) throws NoServiceProviderException { + TextTranslator getTranslatorByName(String translatorName) throws NoServiceProviderException { for (TextTranslator translator : translators) { if (translator.getName().equals(translatorName)) { return translator; @@ -107,7 +107,7 @@ public final class TextTranslationService { * * @return an unmodifiable collection of TextTranslators */ - public Collection getTranslators() { + Collection getTranslators() { return Collections.unmodifiableCollection(translators); } @@ -120,13 +120,13 @@ public final class TextTranslationService { public boolean hasProvider() { return selectedTranslator.isPresent(); } - + /** - * Returns the hard limit for translation request sizes. - * - * @return + * Gets the maximum number of characters allowed in a translation request. + * + * @return The maximum character count. */ - public int getMaxPayloadSize() { - return selectedTranslator.get().getMaxPayloadSize(); + public int getMaxTextChars() { + return selectedTranslator.get().getMaxTextChars(); } } diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java index e996e6331e..ac0818f313 100755 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java @@ -58,9 +58,9 @@ public interface TextTranslator { void saveSettings(); /** - * Returns the hard limit for translation request sizes. + * Gets the maximum number of characters allowed in a translation request. * - * @return + * @return The maximum character count. */ - int getMaxPayloadSize(); + int getMaxTextChars(); } diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanel.form b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.form similarity index 91% rename from Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanel.form rename to Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.form index 8705086cfe..52cd0fb65c 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.form @@ -61,7 +61,7 @@ - + @@ -72,7 +72,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java similarity index 97% rename from Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanel.java rename to Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java index b742f51be0..30893cb326 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.texttranslation.ui; +package org.sleuthkit.autopsy.texttranslation; import java.awt.BorderLayout; import java.awt.Color; @@ -27,8 +27,6 @@ import java.util.logging.Level; import javax.swing.JLabel; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.core.UserPreferences; -import org.sleuthkit.autopsy.texttranslation.NoServiceProviderException; -import org.sleuthkit.autopsy.texttranslation.TextTranslationService; import org.sleuthkit.autopsy.coreutils.Logger; /** @@ -172,7 +170,7 @@ public class TranslationOptionsPanel extends javax.swing.JPanel { .addGap(10, 10, 10) .addComponent(translatorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 214, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(translationOptionsDescription, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE)) + .addComponent(translationOptionsDescription, javax.swing.GroupLayout.PREFERRED_SIZE, 462, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanelController.java similarity index 98% rename from Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanelController.java rename to Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanelController.java index 65488292c7..c52559d665 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanelController.java @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.texttranslation.ui; +package org.sleuthkit.autopsy.texttranslation; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java index 3dfd984b0a..9950dd328b 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java @@ -173,7 +173,7 @@ public class BingTranslator implements TextTranslator { } @Override - public int getMaxPayloadSize() { + public int getMaxTextChars() { return MAX_STRING_LENGTH; } } diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java index 887da71c8d..b6d3e35855 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java @@ -180,7 +180,7 @@ public final class GoogleTranslator implements TextTranslator { } @Override - public int getMaxPayloadSize() { + public int getMaxTextChars() { return MAX_PAYLOAD_SIZE; } } diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties index 15c0fccadd..ac480ca0e1 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties @@ -1,8 +1,6 @@ OptionsCategory_Name_Machine_Translation=Machine Translation OptionsCategory_Keywords_Machine_Translation_Settings=Machine Translation Settings TranslationContentPanel.ocrLabel.text=OCR: -TranslationOptionsPanel.translationServiceLabel.text=Text translator: TranslationOptionsPanelController.moduleErr=Module Error TranslationOptionsPanelController.moduleErr.msg=A module caused an error listening to TranslationSettingsPanelController updates. See log to determine which module. Some data could be incomplete. -TranslationOptionsPanel.translationOptionsDescription.text=Configure a 3rd party text translation service to enable text and file name translation. TranslationContentPanel.showLabel.text=Show: diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties-MERGED index eee82c541b..141ca2f7ef 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties-MERGED @@ -17,12 +17,6 @@ TranslatedTextViewer.title=Translation TranslatedTextViewer.toolTip=Displays translated file text. TranslationContentPanel.autoDetectOCR=Autodetect language TranslationContentPanel.ocrLabel.text=OCR: -TranslationOptionsPanel.noTextTranslators.text=No text translators exist, translation is disabled. -TranslationOptionsPanel.noTextTranslatorSelected.text=No text translator selected, translation is disabled. -TranslationOptionsPanel.textTranslatorsUnavailable.text=Unable to get selected text translator, translation is disabled. -TranslationOptionsPanel.translationDisabled.text=Translation disabled -TranslationOptionsPanel.translationServiceLabel.text=Text translator: TranslationOptionsPanelController.moduleErr=Module Error TranslationOptionsPanelController.moduleErr.msg=A module caused an error listening to TranslationSettingsPanelController updates. See log to determine which module. Some data could be incomplete. -TranslationOptionsPanel.translationOptionsDescription.text=Configure a 3rd party text translation service to enable text and file name translation. TranslationContentPanel.showLabel.text=Show: diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslatedTextViewer.java b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslatedTextViewer.java index 562fa98ddd..8c49c23ed7 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslatedTextViewer.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslatedTextViewer.java @@ -96,7 +96,7 @@ public final class TranslatedTextViewer implements TextViewer { } } - int payloadMaxInKB = TextTranslationService.getInstance().getMaxPayloadSize() / 1000; + int payloadMaxInKB = TextTranslationService.getInstance().getMaxTextChars() / 1000; panel.setWarningLabelMsg(String.format(Bundle.TranslatedTextViewer_maxPayloadSize(), payloadMaxInKB)); //Force a background task. From d81d91285c2e1adda703121f9eea9f133f565319 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Mon, 29 Jul 2019 14:13:46 -0400 Subject: [PATCH 06/12] Reduced the severity of the Solr message --- .../org/sleuthkit/autopsy/keywordsearch/Server.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java index 7259f29966..32515af9f7 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java @@ -64,11 +64,13 @@ import org.apache.solr.common.util.NamedList; import org.openide.modules.InstalledFileLocator; import org.openide.modules.Places; import org.openide.util.NbBundle; +import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case.CaseType; import org.sleuthkit.autopsy.casemodule.CaseMetadata; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.healthmonitor.HealthMonitor; @@ -492,7 +494,14 @@ public class Server { // If we get here the Solr server has not responded to connection // attempts in a timely fashion. logger.log(Level.WARNING, "Local Solr server failed to respond to status requests."); - throw new KeywordSearchModuleException(Bundle.Server_status_failed_msg()); + WindowManager.getDefault().invokeWhenUIReady(new Runnable() { + @Override + public void run() { + MessageNotifyUtil.Notify.error( + NbBundle.getMessage(this.getClass(), "Installer.errorInitKsmMsg"), + Bundle.Server_status_failed_msg()); + } + }); } catch (SecurityException ex) { logger.log(Level.SEVERE, "Could not start Solr process!", ex); //NON-NLS throw new KeywordSearchModuleException( From ba8618801a0b60110800d6720b46849b0b8bdc3e Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 30 Jul 2019 18:39:14 -0400 Subject: [PATCH 07/12] Text translation exported public API modifications before release --- .../TextTranslationService.java | 10 ++-- .../texttranslation/TextTranslator.java | 13 +++-- .../TranslationConfigException.java | 48 +++++++++++++++++++ .../texttranslation/TranslationException.java | 9 +--- .../TranslationOptionsPanel.java | 6 +-- .../translators/BingTranslator.java | 7 +-- .../translators/GoogleTranslator.java | 7 +-- 7 files changed, 75 insertions(+), 25 deletions(-) create mode 100755 Core/src/org/sleuthkit/autopsy/texttranslation/TranslationConfigException.java diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java index 8c8809b045..638bad71c8 100755 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslationService.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.Optional; import org.openide.util.Lookup; import org.sleuthkit.autopsy.core.UserPreferences; +import javax.annotation.concurrent.GuardedBy; /** * Performs a lookup for a TextTranslator service provider and if present, will @@ -33,6 +34,7 @@ public final class TextTranslationService { private final static TextTranslationService tts = new TextTranslationService(); private final Collection translators; + @GuardedBy("this") private Optional selectedTranslator; private TextTranslationService() { @@ -50,7 +52,7 @@ public final class TextTranslationService { * Update the translator currently in use to match the one saved to the user * preferences */ - void updateSelectedTranslator() { + synchronized void updateSelectedTranslator() { String translatorName = UserPreferences.getTextTranslatorName(); for (TextTranslator translator : translators) { if (translator.getName().equals(translatorName)) { @@ -75,7 +77,7 @@ public final class TextTranslationService { * when specific translation * implementations fail */ - public String translate(String input) throws NoServiceProviderException, TranslationException { + public synchronized String translate(String input) throws NoServiceProviderException, TranslationException { if (hasProvider()) { return selectedTranslator.get().translate(input); } @@ -117,7 +119,7 @@ public final class TextTranslationService { * * @return */ - public boolean hasProvider() { + public synchronized boolean hasProvider() { return selectedTranslator.isPresent(); } @@ -126,7 +128,7 @@ public final class TextTranslationService { * * @return The maximum character count. */ - public int getMaxTextChars() { + public synchronized int getMaxTextChars() { return selectedTranslator.get().getMaxTextChars(); } } diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java index ac0818f313..b0be0f06b8 100755 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.texttranslation; import java.awt.Component; +import javax.swing.JPanel; /** * Interface for creating text translators. Implementing classes will be picked @@ -45,17 +46,19 @@ public interface TextTranslator { String getName(); /** - * Get the component to display on the settings options panel when this + * Get the JPanel to display on the settings options panel when this * TextTranslator is selected * - * @return the component which displays the settings options + * @return the panel which displays the settings options */ - Component getComponent(); + JPanel getSettingsPanel(); /** - * Save the settings as they have been modified in the component. + * Saves the current state of the settings in the settings panel. + * + * @throws TranslationConfigException */ - void saveSettings(); + void saveSettings() throws TranslationConfigException; /** * Gets the maximum number of characters allowed in a translation request. diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationConfigException.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationConfigException.java new file mode 100755 index 0000000000..cb3df8c268 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationConfigException.java @@ -0,0 +1,48 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.texttranslation; + +/** + * Instances of this exception class are thrown when there is an error + * configuring text translation. + */ +public class TranslationConfigException extends Exception { + + private static final long serialVersionUID = 1L; + + /** + * Constructs a new exception with the specified message. + * + * @param message The message. + */ + public TranslationConfigException(String message) { + super(message); + } + + /** + * Constructs a new exception with the specified message and cause. + * + * @param message The message. + * @param cause The cause. + */ + public TranslationConfigException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationException.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationException.java index 4d8703e585..01adc66176 100755 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationException.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationException.java @@ -22,13 +22,8 @@ package org.sleuthkit.autopsy.texttranslation; * Provides a system exception for Text Translation errors */ public class TranslationException extends Exception { - - /** - * Constructs a new exception with null as its message. - */ - public TranslationException() { - super(); - } + + private static final long serialVersionUID = 1L; /** * Constructs a new exception with the specified message. diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java index 30893cb326..079dcf062e 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java @@ -32,7 +32,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; /** * Options panel to display translation options */ -public class TranslationOptionsPanel extends javax.swing.JPanel { +final class TranslationOptionsPanel extends javax.swing.JPanel { private final static Logger logger = Logger.getLogger(TranslationOptionsPanel.class.getName()); private static final long serialVersionUID = 1L; @@ -76,7 +76,7 @@ public class TranslationOptionsPanel extends javax.swing.JPanel { translationServicePanel.removeAll(); if (translatorComboBox.getSelectedItem() != null && !translatorComboBox.getSelectedItem().toString().equals(Bundle.TranslationOptionsPanel_translationDisabled_text())) { try { - Component panel = TextTranslationService.getInstance().getTranslatorByName(translatorComboBox.getSelectedItem().toString()).getComponent(); + Component panel = TextTranslationService.getInstance().getTranslatorByName(translatorComboBox.getSelectedItem().toString()).getSettingsPanel(); panel.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { @@ -124,7 +124,7 @@ public class TranslationOptionsPanel extends javax.swing.JPanel { if (currentSelection != null && !currentSelection.equals(Bundle.TranslationOptionsPanel_translationDisabled_text())) { try { TextTranslationService.getInstance().getTranslatorByName(currentSelection).saveSettings(); - } catch (NoServiceProviderException ex) { + } catch (NoServiceProviderException | TranslationConfigException ex) { logger.log(Level.WARNING, "Unable to save settings for TextTranslator named: " + currentSelection, ex); } } diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java index 9950dd328b..948aae9217 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/BingTranslator.java @@ -26,11 +26,12 @@ import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.Response; -import java.awt.Component; import java.io.IOException; +import javax.swing.JPanel; import org.openide.util.NbBundle.Messages; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.texttranslation.TextTranslator; +import org.sleuthkit.autopsy.texttranslation.TranslationConfigException; import org.sleuthkit.autopsy.texttranslation.TranslationException; /** @@ -132,12 +133,12 @@ public class BingTranslator implements TextTranslator { } @Override - public Component getComponent() { + public JPanel getSettingsPanel() { return settingsPanel; } @Override - public void saveSettings() { + public void saveSettings() throws TranslationConfigException { settings.setAuthenticationKey(settingsPanel.getAuthenticationKey()); settings.setTargetLanguageCode(settingsPanel.getTargetLanguageCode()); settings.saveSettings(); diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java index b6d3e35855..ec74190229 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/translators/GoogleTranslator.java @@ -23,7 +23,6 @@ import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.translate.Translate; import com.google.cloud.translate.TranslateOptions; import com.google.cloud.translate.Translation; -import java.awt.Component; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; @@ -31,12 +30,14 @@ import java.io.InputStream; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.logging.Level; +import javax.swing.JPanel; import org.sleuthkit.autopsy.coreutils.Logger; import org.apache.commons.lang3.StringUtils; import org.openide.util.NbBundle.Messages; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.coreutils.EscapeUtil; import org.sleuthkit.autopsy.texttranslation.TextTranslator; +import org.sleuthkit.autopsy.texttranslation.TranslationConfigException; import org.sleuthkit.autopsy.texttranslation.TranslationException; /** @@ -133,7 +134,7 @@ public final class GoogleTranslator implements TextTranslator { } @Override - public Component getComponent() { + public JPanel getSettingsPanel() { return settingsPanel; } @@ -172,7 +173,7 @@ public final class GoogleTranslator implements TextTranslator { } @Override - public void saveSettings() { + public void saveSettings() throws TranslationConfigException { settings.setTargetLanguageCode(settingsPanel.getTargetLanguageCode()); settings.setCredentialPath(settingsPanel.getCredentialsPath()); settings.saveSettings(); From 755743e05a999b7b29260ea97aee884d519b6a70 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Wed, 31 Jul 2019 12:53:02 -0400 Subject: [PATCH 08/12] Resolve code hygiene issues for misc text translation classes --- .../org/sleuthkit/autopsy/texttranslation/TextTranslator.java | 1 - .../autopsy/texttranslation/TranslationOptionsPanel.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java index b0be0f06b8..525e432d1d 100755 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TextTranslator.java @@ -18,7 +18,6 @@ */ package org.sleuthkit.autopsy.texttranslation; -import java.awt.Component; import javax.swing.JPanel; /** diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java index 079dcf062e..3c9ee7dc7b 100644 --- a/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/texttranslation/TranslationOptionsPanel.java @@ -43,7 +43,7 @@ final class TranslationOptionsPanel extends javax.swing.JPanel { * Creates new form TranslationOptionsPanel */ @Messages({"TranslationOptionsPanel.translationDisabled.text=Translation disabled"}) - public TranslationOptionsPanel(TranslationOptionsPanelController theController) { + TranslationOptionsPanel(TranslationOptionsPanelController theController) { initComponents(); controller = theController; translatorComboBox.addItem(Bundle.TranslationOptionsPanel_translationDisabled_text()); From 6d45a54ccd796bb0a72e23e61cedb0f259ddff2e Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Wed, 31 Jul 2019 15:16:50 -0400 Subject: [PATCH 09/12] changes based on review comment --- .../sleuthkit/autopsy/corecomponents/DataResultViewerTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java index 1767ac9f01..71f801282b 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -579,7 +579,7 @@ public class DataResultViewerTable extends AbstractDataResultViewer { int columnWidth = columnWidths.get(column); if(cntMaxSizeColumns > 0) { - if(columnWidth >= 300) { + if(columnWidth >= ((column == 0) ? 350 : 300)) { columnWidth += extraWidth; } } else { From 6474fdcb6692f2fde1b591d36dcce5dc3fb76e41 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Wed, 31 Jul 2019 15:18:56 -0400 Subject: [PATCH 10/12] Update NBM versioning for release 4.12.0 --- Core/manifest.mf | 2 +- Core/nbproject/project.properties | 2 +- Experimental/nbproject/project.xml | 2 +- ImageGallery/nbproject/project.xml | 2 +- KeywordSearch/nbproject/project.xml | 2 +- RecentActivity/nbproject/project.xml | 2 +- thunderbirdparser/nbproject/project.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Core/manifest.mf b/Core/manifest.mf index b1a14babea..53b737fbd1 100644 --- a/Core/manifest.mf +++ b/Core/manifest.mf @@ -2,7 +2,7 @@ Manifest-Version: 1.0 OpenIDE-Module: org.sleuthkit.autopsy.core/10 OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/core/Bundle.properties OpenIDE-Module-Layer: org/sleuthkit/autopsy/core/layer.xml -OpenIDE-Module-Implementation-Version: 27 +OpenIDE-Module-Implementation-Version: 28 OpenIDE-Module-Requires: org.openide.windows.WindowManager AutoUpdate-Show-In-Client: true AutoUpdate-Essential-Module: true diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index 5e07fadf28..d9f4d9824a 100644 --- a/Core/nbproject/project.properties +++ b/Core/nbproject/project.properties @@ -122,5 +122,5 @@ nbm.homepage=http://www.sleuthkit.org/ nbm.module.author=Brian Carrier nbm.needs.restart=true source.reference.curator-recipes-2.8.0.jar=release/modules/ext/curator-recipes-2.8.0-sources.jar -spec.version.base=10.15 +spec.version.base=10.16 diff --git a/Experimental/nbproject/project.xml b/Experimental/nbproject/project.xml index 551dc9baa7..1523e88e06 100644 --- a/Experimental/nbproject/project.xml +++ b/Experimental/nbproject/project.xml @@ -135,7 +135,7 @@ 10 - 10.15 + 10.16 diff --git a/ImageGallery/nbproject/project.xml b/ImageGallery/nbproject/project.xml index fc0058cb7b..2220f662b4 100644 --- a/ImageGallery/nbproject/project.xml +++ b/ImageGallery/nbproject/project.xml @@ -127,7 +127,7 @@ 10 - 10.15 + 10.16 diff --git a/KeywordSearch/nbproject/project.xml b/KeywordSearch/nbproject/project.xml index 7257676027..3f40ab3ace 100644 --- a/KeywordSearch/nbproject/project.xml +++ b/KeywordSearch/nbproject/project.xml @@ -119,7 +119,7 @@ 10 - 10.15 + 10.16 diff --git a/RecentActivity/nbproject/project.xml b/RecentActivity/nbproject/project.xml index 0f16ae22e4..269723962e 100644 --- a/RecentActivity/nbproject/project.xml +++ b/RecentActivity/nbproject/project.xml @@ -60,7 +60,7 @@ 10 - 10.15 + 10.16 diff --git a/thunderbirdparser/nbproject/project.xml b/thunderbirdparser/nbproject/project.xml index d6e024f08c..98e94988f2 100644 --- a/thunderbirdparser/nbproject/project.xml +++ b/thunderbirdparser/nbproject/project.xml @@ -36,7 +36,7 @@ 10 - 10.15 + 10.16 From a807017ac651676048b9ebd160aac4039e754810 Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Thu, 1 Aug 2019 09:30:48 -0400 Subject: [PATCH 11/12] reorganized main page of user docs. Removed duplicate info --- docs/doxygen-user/logs_and_output_page.dox | 18 +++---- docs/doxygen-user/main.dox | 57 ++++++++++++++-------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/docs/doxygen-user/logs_and_output_page.dox b/docs/doxygen-user/logs_and_output_page.dox index 9c2a716433..1f9002a0b3 100644 --- a/docs/doxygen-user/logs_and_output_page.dox +++ b/docs/doxygen-user/logs_and_output_page.dox @@ -1,13 +1,11 @@ -/*! \page logs_and_output_page Logs, Output, and Progress -There are several shortcuts for getting to the output folder, log folder, and progress shapshot shown below. -

-To open the Case output folder, use "Tools", "Open Output Folder" as shown below: +/*! \page logs_and_output_page Viewing Case Logs and Output + +There are several shortcuts for getting to the case and log folders. + +- To open the Case output folder, use "Tools", "Open Output Folder" as shown below: \image html open_output_folder.PNG -

-To open the Case log folder, use "Help", "Open Log Folder" as shown below: + +- To open the Case log folder, use "Help", "Open Log Folder" as shown below: \image html open_log_folder.PNG -

-While Ingest is running, one can use the "Ingest Progress Snapshot" tool to see what activity is going on at the moment. Click on "Help", "Get Ingest Progress Snapshot" to view the dialog shown in the screenshot below. -\image html ingest_progress_snapshot.PNG -To refresh the view, use the "Refresh" button. + */ diff --git a/docs/doxygen-user/main.dox b/docs/doxygen-user/main.dox index 7087c42ec2..032b46b1fd 100644 --- a/docs/doxygen-user/main.dox +++ b/docs/doxygen-user/main.dox @@ -10,13 +10,23 @@ Help Topics ------- The following topics are available here: -- \subpage installation_page +- Installation + - \subpage installation_page + - \subpage performance_page + - Multi-user Cluster + - \subpage install_multiuser_page + - \subpage multiuser_sec_page + - \subpage multiuser_page + - \subpage quick_start_guide "Quick Start Guide" -- \subpage workflow_page + - Cases and Adding Data Sources + - \subpage workflow_page - \subpage cases_page - \subpage ds_page - - \subpage uilayout_page + - \subpage logs_and_output_page + + - Ingest Modules - \subpage ingest_page "Ingest Modules" - \subpage recent_activity_page @@ -34,42 +44,51 @@ The following topics are available here: - \subpage cr_ingest_module - \subpage encryption_page - \subpage vm_extractor_page + - Reviewing the Results + - \subpage uilayout_page - \subpage tree_viewer_page - \subpage result_viewer_page - \subpage content_viewer_page + - \subpage machine_translation_page + +- Searching - \subpage ui_quick_search - - \subpage image_gallery_page - \subpage file_search_page - \subpage ad_hoc_keyword_search_page - - \subpage timeline_page - \subpage stix_page - - \subpage central_repo_page - - \subpage communications_page - \subpage common_properties_page - \subpage search_all_cases_page - - \subpage logs_and_output_page - - \subpage machine_translation_page + +- Specialized Viewers + - \subpage image_gallery_page + - \subpage timeline_page + - \subpage communications_page + + - Reporting - \subpage tagging_page - \subpage reporting_page + - \subpage module_install_page -- \subpage performance_page -- Multi-user Cluster - - \subpage install_multiuser_page - - \subpage multiuser_sec_page - - \subpage multiuser_page -- Triage - - \subpage triage_page - - \subpage live_triage_page +- \subpage central_repo_page + +- Other Workflows + - Triage + - \subpage triage_page + - \subpage live_triage_page + - \subpage logical_imager_page + - \subpage command_line_ingest_page + + - Experimental Module - \subpage experimental_page - \ref auto_ingest_page - \ref object_detection_page - \ref volatility_dsp_page -- \subpage command_line_ingest_page -- \subpage logical_imager_page + - \subpage translations_page + If the topic you need is not listed, refer to the Autopsy Wiki or join the SleuthKit User List at SourceForge. From 9a12b61c270147f8a0a77aec3cb1950c8da2bc8d Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Thu, 1 Aug 2019 12:37:24 -0400 Subject: [PATCH 12/12] Added link to forum --- docs/doxygen-user/main.dox | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/doxygen-user/main.dox b/docs/doxygen-user/main.dox index 032b46b1fd..122e14fb0f 100644 --- a/docs/doxygen-user/main.dox +++ b/docs/doxygen-user/main.dox @@ -90,6 +90,9 @@ The following topics are available here: - \subpage translations_page -If the topic you need is not listed, refer to the Autopsy Wiki or join the SleuthKit User List at SourceForge. +If the topic you need is not listed, then you can: +- Refer to the Autopsy Wiki +- Ask a question on the Forum +- Ask a question on the Email List. */