mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
Merge remote-tracking branch 'upstream/develop' into timeline-event-mgr
This commit is contained in:
commit
1975c0e369
@ -220,10 +220,15 @@ AddImageWizardIngestConfigPanel.dsProcDone.errs.text=*Errors encountered in addi
|
||||
AddImageWizardIngestConfigVisual.getName.text=Configure Ingest Modules
|
||||
AddImageWizardIterator.stepXofN=Step {0} of {1}
|
||||
AddLocalFilesTask.localFileAdd.progress.text=Adding: {0}/{1}
|
||||
Case.getCurCase.exception.noneOpen=Cannot get the current case; there is no case open!
|
||||
Case.getCurCase.exception.noneOpen=Cannot get the current case; there is no case open\!
|
||||
Case.open.msgDlg.updated.msg=Updated case database schema.\nA backup copy of the database with the following path has been made:\n {0}
|
||||
Case.open.msgDlg.updated.title=Case Database Schema Update
|
||||
Case.checkImgExist.confDlg.doesntExist.msg=One of the images associated with \nthis case are missing. Would you like to search for them now?\nPreviously, the image was located at:\n{0}\nPlease note that you will still be able to browse directories and generate reports\nif you choose No, but you will not be able to view file content or run the ingest process.
|
||||
Case.checkImgExist.confDlg.doesntExist.msg=One of the images associated with \n\
|
||||
this case are missing. Would you like to search for them now?\n\
|
||||
Previously, the image was located at:\n\
|
||||
{0}\n\
|
||||
Please note that you will still be able to browse directories and generate reports\n\
|
||||
if you choose No, but you will not be able to view file content or run the ingest process.
|
||||
Case.checkImgExist.confDlg.doesntExist.title=Missing Image
|
||||
Case.addImg.exception.msg=Error adding image to the case
|
||||
Case.updateCaseName.exception.msg=Error while trying to update the case name.
|
||||
@ -242,9 +247,12 @@ Case.GetCaseTypeGivenPath.Failure=Unable to get case type
|
||||
Case.metaDataFileCorrupt.exception.msg=The case metadata file (.aut) is corrupted.
|
||||
Case.deleteReports.deleteFromDiskException.log.msg=Unable to delete the report from the disk.
|
||||
Case.deleteReports.deleteFromDiskException.msg=Unable to delete the report {0} from the disk.\nYou may manually delete it from {1}
|
||||
CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \nCase Name: {0}\nCase Directory: {1}
|
||||
CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \n\
|
||||
Case Name: {0}\n\
|
||||
Case Directory: {1}
|
||||
CaseDeleteAction.closeConfMsg.title=Warning: Closing the Current Case
|
||||
CaseDeleteAction.msgDlg.fileInUse.msg=The delete action cannot be fully completed because the folder or file in it is open by another program.\n\nClose the folder and file and try again or you can delete the case manually.
|
||||
CaseDeleteAction.msgDlg.fileInUse.msg=The delete action cannot be fully completed because the folder or file in it is open by another program.\n\n\
|
||||
Close the folder and file and try again or you can delete the case manually.
|
||||
CaseDeleteAction.msgDlg.fileInUse.title=Error: Folder In Use
|
||||
CaseDeleteAction.msgDlg.caseDelete.msg=Case {0} has been deleted.
|
||||
CaseOpenAction.autFilter.title={0} Case File ( {1})
|
||||
@ -276,7 +284,8 @@ NewCaseWizardAction.databaseProblem1.text=Cannot open database. Cancelling case
|
||||
NewCaseWizardAction.databaseProblem2.text=Error
|
||||
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=The Case Name cannot contain any of the following symbols: \\ / : * ? " < > |
|
||||
NewCaseWizardPanel1.validate.errMsg.dirExists=Case directory ''{0}'' already exists.
|
||||
NewCaseWizardPanel1.validate.confMsg.createDir.msg=The base directory "{0}" does not exist. \n\nDo you want to create that directory?
|
||||
NewCaseWizardPanel1.validate.confMsg.createDir.msg=The base directory "{0}" does not exist. \n\n\
|
||||
Do you want to create that directory?
|
||||
NewCaseWizardPanel1.validate.confMsg.createDir.title=Create directory
|
||||
NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=Error: Could not create case parent directory {0}
|
||||
NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=Prevented from creating base directory {0}
|
||||
@ -312,15 +321,15 @@ StartupWindow.title.text=Welcome
|
||||
UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases
|
||||
UpdateRecentCases.menuItem.empty=-Empty-
|
||||
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=Cancel
|
||||
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=Warning: Path to multi-user case folder is on "C:" drive
|
||||
NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=Warning: Path to case folder is on "C:" drive. Case folder is created on the target system
|
||||
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=Warning: Path to multi-user case folder is on \"C:\" drive
|
||||
NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=Warning: Path to case folder is on \"C:\" drive. Case folder is created on the target system
|
||||
NewCaseVisualPanel1.CaseFolderOnInternalDriveLinuxError.text=Warning: Path to case folder is on the target system. Create case folder in mounted drive.
|
||||
CollaborationMonitor.addingDataSourceStatus.msg={0} adding data source
|
||||
CollaborationMonitor.analyzingDataSourceStatus.msg={0} analyzing {1}
|
||||
MissingImageDialog.lbWarning.text=
|
||||
MissingImageDialog.lbWarning.toolTipText=
|
||||
NewCaseVisualPanel1.caseParentDirWarningLabel.text=
|
||||
NewCaseVisualPanel1.multiUserCaseRadioButton.text=Multi-user\t\t
|
||||
NewCaseVisualPanel1.multiUserCaseRadioButton.text=Multi-user
|
||||
NewCaseVisualPanel1.singleUserCaseRadioButton.text=Single-user
|
||||
NewCaseVisualPanel1.caseTypeLabel.text=Case Type:
|
||||
SingleUserCaseConverter.BadDatabaseFileName=Database file does not exist!
|
||||
|
@ -5,7 +5,10 @@ CentralRepoCommentDialog.title.addEditCentralRepoComment=Add/Edit Central Reposi
|
||||
OpenIDE-Module-Name=Central Repository
|
||||
OpenIDE-Module-Display-Category=Ingest Module
|
||||
OpenIDE-Module-Short-Description=Correlation Engine Ingest Module
|
||||
OpenIDE-Module-Long-Description=Correlation Engine ingest module and central database. \n\nThe Correlation Engine ingest module stores attributes of artifacts matching selected correlation types into a central database.\nStored attributes are used in future cases to correlate and analyzes files and artifacts during ingest.
|
||||
OpenIDE-Module-Long-Description=\
|
||||
Correlation Engine ingest module and central database. \n\n\
|
||||
The Correlation Engine ingest module stores attributes of artifacts matching selected correlation types into a central database.\n\
|
||||
Stored attributes are used in future cases to correlate and analyzes files and artifacts during ingest.
|
||||
CentralRepoCommentDialog.commentLabel.text=Comment:
|
||||
CentralRepoCommentDialog.okButton.text=&OK
|
||||
CentralRepoCommentDialog.cancelButton.text=C&ancel
|
||||
|
@ -3,7 +3,13 @@ Installer.closing.confirmationDialog.title=Ingest is Running
|
||||
# {0} - exception message
|
||||
Installer.closing.messageBox.caseCloseExceptionMessage=Error closing case: {0}
|
||||
OpenIDE-Module-Display-Category=Infrastructure
|
||||
OpenIDE-Module-Long-Description=This is the core Autopsy module.\n\nThe module contains the core components needed for the bare application to run; the RCP platform, windowing GUI, sleuthkit bindings, datamodel / storage, explorer, result viewers, content viewers, ingest framework, reporting, and core tools, such as the file search.\n\nThe framework included in the module contains APIs for developing modules for ingest, viewers and reporting. The modules can be deployed as Plugins using the Autopsy plugin installer.\nThis module should not be uninstalled - without it, Autopsy will not run.\n\nFor more information, see http://www.sleuthkit.org/autopsy/
|
||||
OpenIDE-Module-Long-Description=\
|
||||
This is the core Autopsy module.\n\n\
|
||||
The module contains the core components needed for the bare application to run; the RCP platform, windowing GUI, sleuthkit bindings, datamodel / storage, explorer, result viewers, content viewers, ingest framework, reporting, and core tools, such as the file search.\n\n\
|
||||
The framework included in the module contains APIs for developing modules for ingest, viewers and reporting. \
|
||||
The modules can be deployed as Plugins using the Autopsy plugin installer.\n\
|
||||
This module should not be uninstalled - without it, Autopsy will not run.\n\n\
|
||||
For more information, see http://www.sleuthkit.org/autopsy/
|
||||
OpenIDE-Module-Name=Autopsy-Core
|
||||
OpenIDE-Module-Short-Description=Autopsy Core Module
|
||||
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
|
||||
|
@ -63,9 +63,9 @@ DataContentViewerHex.pageLabel2.text=Page
|
||||
DataContentViewerString.pageLabel2.text=Page
|
||||
|
||||
# Product Information panel
|
||||
LBL_Description=<div style="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
|
||||
LBL_Description=<div style=\"font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;\">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
|
||||
Format_OperatingSystem_Value={0} version {1} running on {2}
|
||||
LBL_Copyright=<div style="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy™ is a digital forensics platform based on The Sleuth Kit™ and other tools. <br><ul><li>General Information: <a style="color: #1E2A60;" href="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style="color: #1E2A60;" href="http://www.basistech.com/autopsy-training">http://www.basistech.com/autopsy-training</a></li><li>Commercial Support: <a style="color: #1E2A60;" href="http://www.basistech.com/digital-forensics/autopsy/support/">http://www.basistech.com/digital-forensics/autopsy/support/</a></li></ul>Copyright © 2003-2018. </div>
|
||||
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy™ is a digital forensics platform based on The Sleuth Kit™ and other tools. <br><ul><li>General Information: <a style\="color: \#1E2A60;" href\="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/autopsy-training">http://www.basistech.com/autopsy-training</a></li><li>Commercial Support: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/digital-forensics/autopsy/support/">http://www.basistech.com/digital-forensics/autopsy/support/</a></li></ul>Copyright © 2003-2018. </div>
|
||||
SortChooser.dialogTitle=Choose Sort Criteria
|
||||
ThumbnailViewChildren.progress.cancelling=(Cancelling)
|
||||
# {0} - file name
|
||||
@ -102,7 +102,7 @@ DataResultViewerThumbnail.pageNextButton.text=
|
||||
DataResultViewerThumbnail.imagesLabel.text=Images:
|
||||
DataResultViewerThumbnail.imagesRangeLabel.text=-
|
||||
DataResultViewerThumbnail.pageNumLabel.text=-
|
||||
DataResultViewerThumbnail.filePathLabel.text=\
|
||||
DataResultViewerThumbnail.filePathLabel.text=\ \ \
|
||||
DataResultViewerThumbnail.goToPageLabel.text=Go to Page:
|
||||
DataResultViewerThumbnail.goToPageField.text=
|
||||
AdvancedConfigurationDialog.cancelButton.text=Cancel
|
||||
|
@ -23,7 +23,9 @@ PlatformUtil.getProcVmUsed.sigarNotInit.msg=Cannot get virt mem used, sigar not
|
||||
PlatformUtil.getProcVmUsed.gen.msg=Cannot get virt mem used, {0}
|
||||
PlatformUtil.getJvmMemInfo.usageText=JVM heap usage: {0}, JVM non-heap usage: {1}
|
||||
PlatformUtil.getPhysicalMemInfo.usageText=Physical memory usage (max, total, free): {0}, {1}, {2}
|
||||
PlatformUtil.getAllMemUsageInfo.usageText={0}\n{1}\nProcess Virtual Memory: {2}
|
||||
PlatformUtil.getAllMemUsageInfo.usageText={0}\n\
|
||||
{1}\n\
|
||||
Process Virtual Memory: {2}
|
||||
# {0} - file name
|
||||
ReadImageTask.mesageText=Reading image: {0}
|
||||
StringExtract.illegalStateException.cannotInit.msg=Unicode table not properly initialized, cannot instantiate StringExtract
|
||||
|
@ -258,10 +258,10 @@ ImageNode.getActions.viewInNewWin.text=View in New Window
|
||||
ImageNode.createSheet.name.name=Name
|
||||
ImageNode.createSheet.name.displayName=Name
|
||||
ImageNode.createSheet.name.desc=no description
|
||||
Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI test call returned without error, but version string was null!
|
||||
Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI test call returned without error, but version string was ""!
|
||||
Installer.tskLibErr.msg=Problem with Sleuth Kit JNI. Test call failed!\n\nDetails: {0}
|
||||
Installer.tskLibErr.err=Fatal Error!
|
||||
Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI test call returned without error, but version string was null\!
|
||||
Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI test call returned without error, but version string was ""\!
|
||||
Installer.tskLibErr.msg=Problem with Sleuth Kit JNI. Test call failed\!\n\nDetails: {0}
|
||||
Installer.tskLibErr.err=Fatal Error\!
|
||||
InterestingHits.interestingItems.text=INTERESTING ITEMS
|
||||
InterestingHits.displayName.text=Interesting Items
|
||||
InterestingHits.createSheet.name.name=Name
|
||||
|
@ -14,7 +14,7 @@ KnownStatusSearchPanel.knownCheckBox.text=Known Status:
|
||||
KnownStatusSearchPanel.knownBadOptionCheckBox.text=Notable
|
||||
KnownStatusSearchPanel.knownOptionCheckBox.text=Known (NSRL or other)
|
||||
KnownStatusSearchPanel.unknownOptionCheckBox.text=Unknown
|
||||
DateSearchFilter.noneSelectedMsg.text=At least one date type must be selected!
|
||||
DateSearchFilter.noneSelectedMsg.text=At least one date type must be selected\!
|
||||
DateSearchPanel.dateCheckBox.text=Date:
|
||||
DateSearchPanel.jLabel4.text=Timezone:
|
||||
DateSearchPanel.jLabel3.text=*The date format is mm/dd/yyyy
|
||||
@ -56,7 +56,7 @@ FileSearchPanel.search.results.details=Large number of matches may impact perfor
|
||||
FileSearchPanel.search.exception.noFilterSelected.msg=At least one filter must be selected.
|
||||
FileSearchPanel.search.validationErr.msg=Validation Error: {0}
|
||||
FileSearchPanel.emptyWhereClause.text=Invalid options, nothing to show.
|
||||
KnownStatusSearchFilter.noneSelectedMsg.text=At least one known status must be selected!
|
||||
KnownStatusSearchFilter.noneSelectedMsg.text=At least one known status must be selected\!
|
||||
NameSearchFilter.emptyNameMsg.text=Must enter something for name search.
|
||||
SearchNode.getName.text=Search Result
|
||||
SizeSearchPanel.sizeCompareComboBox.equalTo=equal to
|
||||
|
@ -140,7 +140,7 @@ IngestJob.cancelReason.outOfDiskSpace.text=Out of disk space
|
||||
IngestJob.cancelReason.servicesDown.text=Services Down
|
||||
IngestJob.cancelReason.caseClosed.text=Case closed
|
||||
IngestJobSettingsPanel.globalSettingsButton.text=Global Settings
|
||||
gest=
|
||||
gest
|
||||
IngestJobSettingsPanel.globalSettingsButton.actionCommand=Advanced
|
||||
IngestJobSettingsPanel.globalSettingsButton.text=Global Settings
|
||||
IngestJobSettingsPanel.pastJobsButton.text=History
|
||||
|
@ -11,7 +11,12 @@ ExtractArchiveWithPasswordAction.progress.text=Unpacking contents of archive: {0
|
||||
ExtractArchiveWithPasswordAction.prompt.text=Enter Password
|
||||
ExtractArchiveWithPasswordAction.prompt.title=Enter Password
|
||||
OpenIDE-Module-Display-Category=Ingest Module
|
||||
OpenIDE-Module-Long-Description=Embedded File Extraction Ingest Module\n\nThe Embedded File Extraction Ingest Module processes document files (such as doc, docx, ppt, pptx, xls, xlsx) and archive files (such as zip and others archive types supported by the 7zip extractor).\nContents of these files are extracted and the derived files are added back to the current ingest to be processed by the configured ingest modules.\nIf the derived file happens to be an archive file, it will be re-processed by the 7zip extractor - the extractor will process archive files N-levels deep.\n\nThe extracted files are navigable in the directory tree.\n\nThe module is supported on Windows, Linux and Mac operating systems.
|
||||
OpenIDE-Module-Long-Description=\
|
||||
Embedded File Extraction Ingest Module\n\nThe Embedded File Extraction Ingest Module processes document files (such as doc, docx, ppt, pptx, xls, xlsx) and archive files (such as zip and others archive types supported by the 7zip extractor).\n\
|
||||
Contents of these files are extracted and the derived files are added back to the current ingest to be processed by the configured ingest modules.\n\
|
||||
If the derived file happens to be an archive file, it will be re-processed by the 7zip extractor - the extractor will process archive files N-levels deep.\n\n\
|
||||
The extracted files are navigable in the directory tree.\n\n\
|
||||
The module is supported on Windows, Linux and Mac operating systems.
|
||||
OpenIDE-Module-Name=Embedded File Extraction
|
||||
OpenIDE-Module-Short-Description=Embedded File Extraction Ingest Module
|
||||
EmbeddedFileExtractorIngestModule.SevenZipContentReadStream.seek.exception.invalidOrigin=Invalid seek origin: {0}
|
||||
|
@ -1,7 +1,9 @@
|
||||
CannotRunFileTypeDetection=Cannot run file type detection.
|
||||
ExifParserFileIngestModule.indexError.message=Failed to post EXIF Metadata artifact(s).
|
||||
OpenIDE-Module-Display-Category=Ingest Module
|
||||
OpenIDE-Module-Long-Description=Exif metadata ingest module. \n\nThe ingest module analyzes image files, extracts Exif information and posts the Exif data as results.
|
||||
OpenIDE-Module-Long-Description=\
|
||||
Exif metadata ingest module. \n\n\
|
||||
The ingest module analyzes image files, extracts Exif information and posts the Exif data as results.
|
||||
OpenIDE-Module-Name=ExifParser
|
||||
OpenIDE-Module-Short-Description=Exif metadata ingest module
|
||||
ExifParserFileIngestModule.moduleName.text=Exif Parser
|
||||
|
@ -36,27 +36,27 @@ FileExtMismatchSettingsPanel.jLabel1.text=File Types:
|
||||
FileExtMismatchSettingsPanel.newExtButton.text=New Extension
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.message=Add a new MIME file type:
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.title=New MIME
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.emptyMime.message=MIME type text is empty!
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.emptyMime.message=MIME type text is empty\!
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.emptyMime.title=Empty type
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotSupported.message=MIME type not supported!
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotSupported.message=MIME type not supported\!
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotSupported.title=Type not supported
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeExists.message=MIME type already exists!
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeExists.message=MIME type already exists\!
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeExists.title=Type already exists
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotDetectable.message=MIME type is not detectable by this module.
|
||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotDetectable.title=Type not detectable
|
||||
FileExtMismatchSettingsPanel.removeTypeButton.noneSelected.message=No MIME type selected!
|
||||
FileExtMismatchSettingsPanel.removeTypeButton.noneSelected.message=No MIME type selected\!
|
||||
FileExtMismatchSettingsPanel.removeTypeButton.noneSelected.title=No type selected
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.message=Add an allowed extension:
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.title=New allowed extension
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.empty.message=Extension text is empty!
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.empty.message=Extension text is empty\!
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.empty.title=Extension text empty
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.noMimeType.message=No MIME type selected!
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.noMimeType.message=No MIME type selected\!
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.noMimeType.title=No MIME type selected
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.extExists.message=Extension already exists!
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.extExists.message=Extension already exists\!
|
||||
FileExtMismatchSettingsPanel.newExtPrompt.extExists.title=Extension already exists
|
||||
FileExtMismatchSettingsPanel.removeExtButton.noneSelected.message=No extension selected!
|
||||
FileExtMismatchSettingsPanel.removeExtButton.noneSelected.message=No extension selected\!
|
||||
FileExtMismatchSettingsPanel.removeExtButton.noneSelected.title=No extension selected
|
||||
FileExtMismatchSettingsPanel.removeExtButton.noMimeTypeSelected.message=No MIME type selected!
|
||||
FileExtMismatchSettingsPanel.removeExtButton.noMimeTypeSelected.message=No MIME type selected\!
|
||||
FileExtMismatchSettingsPanel.removeExtButton.noMimeTypeSelected.title=No MIME type selected
|
||||
FileExtMismatchSettingsPanel.removeTypeButton.toolTipText=
|
||||
FileExtMismatchModuleSettingsPanel.checkAllRadioButton.text=Check all file types
|
||||
|
@ -40,7 +40,10 @@ ImportCentralRepoDbProgressDialog.errorParsingFile.message=Error parsing hash se
|
||||
ImportCentralRepoDbProgressDialog.linesProcessed.message=\ hashes processed
|
||||
ImportCentralRepoDbProgressDialog.title.text=Central Repository Import Progress
|
||||
OpenIDE-Module-Display-Category=Ingest Module
|
||||
OpenIDE-Module-Long-Description=Hash Set ingest module. \n\nThe ingest module analyzes files in the disk image and marks them as "known" (based on NSRL hashset lookup for "known" files) and "bad / interesting" (based on one or more hash sets supplied by the user).\n\nThe module also contains additional non-ingest tools that are integrated in the GUI, such as file lookup by hash and hash set configuration.
|
||||
OpenIDE-Module-Long-Description=\
|
||||
Hash Set ingest module. \n\n\
|
||||
The ingest module analyzes files in the disk image and marks them as "known" (based on NSRL hashset lookup for "known" files) and "bad / interesting" (based on one or more hash sets supplied by the user).\n\n\
|
||||
The module also contains additional non-ingest tools that are integrated in the GUI, such as file lookup by hash and hash set configuration.
|
||||
OpenIDE-Module-Name=HashDatabases
|
||||
OptionsCategory_Name_HashDatabase=Hash Sets
|
||||
OptionsCategory_Keywords_HashDatabase=Hash Sets
|
||||
@ -169,7 +172,10 @@ HashDbSearchThread.name.searching=Searching
|
||||
HashDbSearchThread.noMoreFilesWithMD5Msg=No other files with the same MD5 hash were found.
|
||||
ModalNoButtons.indexingDbsTitle=Indexing hash sets
|
||||
ModalNoButtons.indexingDbTitle=Indexing hash set
|
||||
ModalNoButtons.exitHashDbIndexingMsg=You are about to exit out of indexing your hash sets. \nThe generated index will be left unusable. If you choose to continue,\nplease delete the corresponding -md5.idx file in the hash folder.\nExit indexing?
|
||||
ModalNoButtons.exitHashDbIndexingMsg=You are about to exit out of indexing your hash sets. \n\
|
||||
The generated index will be left unusable. If you choose to continue,\n\
|
||||
please delete the corresponding -md5.idx file in the hash folder.\n\
|
||||
Exit indexing?
|
||||
ModalNoButtons.dlgTitle.unfinishedIndexing=Unfinished Indexing
|
||||
ModalNoButtons.indexThis.currentlyIndexing1Db=Currently indexing 1 hash set
|
||||
ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=Currently indexing 1 of {0}
|
||||
|
@ -81,8 +81,8 @@ FilesSetRulePanel.nameTextField.text=
|
||||
FilesSetRulePanel.ruleNameLabel.text=Rule Name (Optional):
|
||||
FilesSetRulePanel.messages.emptyNameCondition=You must specify a name pattern for this rule.
|
||||
FilesSetRulePanel.messages.invalidNameRegex=The name regular expression is not valid:\n\n{0}
|
||||
FilesSetRulePanel.messages.invalidCharInName=The name cannot contain \\, /, :, *, ?, ", <, or > unless it is a regular expression.
|
||||
FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, ", <, or > unless it is a regular expression.
|
||||
FilesSetRulePanel.messages.invalidCharInName=The name cannot contain \\, /, :, *, ?, \", <, or > unless it is a regular expression.
|
||||
FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, \", <, or > unless it is a regular expression.
|
||||
FilesSetRulePanel.messages.invalidPathRegex=The path regular expression is not valid:\n\n{0}
|
||||
FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text=Rule set with name {0} already exists.
|
||||
FilesSetRulePanel.pathSeparatorInfoLabel.text=Use / as path separator
|
||||
|
@ -21,7 +21,7 @@ PhotoRecIngestModule.complete.totalParsetime=Total Parsing Time:
|
||||
PhotoRecIngestModule.complete.photoRecResults=PhotoRec Results
|
||||
PhotoRecIngestModule.NotEnoughDiskSpace.detail.msg=PhotoRec error processing {0} with {1} Not enough space on primary disk to save unallocated space.
|
||||
PhotoRecIngestModule.cancelledByUser=PhotoRec cancelled by user.
|
||||
PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value = {0} when scanning {1}
|
||||
PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value \= {0} when scanning {1}
|
||||
PhotoRecIngestModule.error.msg=Error processing {0} with PhotoRec carver.
|
||||
PhotoRecIngestModule.complete.numberOfErrors=Number of Errors while Carving:
|
||||
PhotoRecCarverIngestJobSettingsPanel.detectionSettingsLabel.text=PhotoRec Settings
|
||||
|
@ -86,7 +86,7 @@ FileReportDataTypes.path.text=Full Path
|
||||
FileReportText.getName.text=Files - Text
|
||||
FileReportText.getDesc.text=A tab delimited text file containing information about individual files in the case.
|
||||
ReportBodyFile.progress.querying=Querying files...
|
||||
ReportBodyFile.ingestWarning.text=Warning, this report was run before ingest services completed!
|
||||
ReportBodyFile.ingestWarning.text=Warning, this report was run before ingest services completed\!
|
||||
ReportBodyFile.progress.loading=Loading files...
|
||||
ReportBodyFile.progress.processing=Now processing {0}...
|
||||
ReportBodyFile.getName.text=TSK Body File
|
||||
@ -228,13 +228,13 @@ ReportHTML.getName.text=HTML Report
|
||||
ReportHTML.getDesc.text=A report about results and tagged items in HTML format.
|
||||
ReportHTML.writeIndex.title=for case {0}
|
||||
ReportHTML.writeIndex.noFrames.msg=Your browser is not compatible with our frame setup.
|
||||
ReportHTML.writeIndex.noFrames.seeNav=Please see <a href="content\nav.html">the navigation page</a> for artifact links,
|
||||
ReportHTML.writeIndex.seeSum=and <a href="contentsummary.html">the summary page</a> for a case summary.
|
||||
ReportHTML.writeIndex.noFrames.seeNav=Please see <a href\="content\nav.html">the navigation page</a> for artifact links,
|
||||
ReportHTML.writeIndex.seeSum=and <a href\="content\summary.html">the summary page</a> for a case summary.
|
||||
ReportHTML.writeNav.title=Report Navigation
|
||||
ReportHTML.writeNav.h1=Report Navigation
|
||||
ReportHTML.writeNav.summary=Case Summary
|
||||
ReportHTML.writeSum.title=Case Summary
|
||||
ReportHTML.writeSum.warningMsg=<span>Warning, this report was run before ingest services completed!</span>
|
||||
ReportHTML.writeSum.warningMsg=<span>Warning, this report was run before ingest services completed\!</span>
|
||||
#
|
||||
# autopsy/test/scripts/regression.py._html_report_diff() uses reportGenOn.text, caseName, caseNum,
|
||||
# examiner as a regex signature to skip report.html and summary.html
|
||||
|
@ -1,4 +1,4 @@
|
||||
/*=
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2013-15 Basis Technology Corp.
|
||||
@ -14,8 +14,8 @@
|
||||
* 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.
|
||||
*/=
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
AbstractTimelineChart.defaultTooltip.text=Drag the mouse to select a time interval to zoom into.\nRight-click for more actions.
|
||||
HistoryToolBar.historyLabel.text=History
|
||||
|
@ -350,6 +350,7 @@ SolrSearchService.exceptionMessage.failedToDeleteIndexFiles=Failed to delete tex
|
||||
SolrSearchService.exceptionMessage.noCurrentSolrCore=IndexMetadata did not contain a current Solr core so could not delete the case
|
||||
# {0} - case directory
|
||||
SolrSearchService.exceptionMessage.noIndexMetadata=Unable to create IndexMetaData from case directory: {0}
|
||||
SolrSearchService.indexingError=Unable to index blackboard artifact.
|
||||
SolrSearchService.ServiceName=Solr Keyword Search Service
|
||||
SolrSearchService.IndexReadOnlyDialog.title=Text Index Is Read-Only
|
||||
SolrSearchService.IndexReadOnlyDialog.msg=<html>The text index for this case is read-only. <br />You will be able to see existing keyword search results and perform exact match and substring match keyword searches,<br />but you will not be able to add new text to the index or perform regex searches. You may instead open the case<br /> with your previous version of this application.</html>
|
||||
|
@ -6,6 +6,8 @@ DataSourceUsageAnalyzer.customVolume.label=OS Drive ({0})
|
||||
DataSourceUsageAnalyzer.parentModuleName=Recent Activity
|
||||
Extract.indexError.message=Failed to index artifact for keyword search.
|
||||
Extract.noOpenCase.errMsg=No open case available.
|
||||
#{0} - the module name
|
||||
Extractor.errPostingArtifacts=Error posting {0} artifacts to the blackboard.
|
||||
ExtractOs.androidOs.label=Android
|
||||
ExtractOs.androidVolume.label=OS Drive (Android)
|
||||
ExtractOs.debianLinuxOs.label=Linux (Debian)
|
||||
@ -37,7 +39,7 @@ ExtractOs.windowsVolume.label=OS Drive (Windows)
|
||||
ExtractOs.yellowDogLinuxOs.label=Linux (Yellow Dog)
|
||||
ExtractOs.yellowDogLinuxVolume.label=OS Drive (Linux Yellow Dog)
|
||||
OpenIDE-Module-Display-Category=Ingest Module
|
||||
OpenIDE-Module-Long-Description=Recent Activity ingest module.\n\n\The module extracts useful information about the recent user activity on the disk image being ingested, such as:\n\n- Recently open documents,\n- Web acitivity (sites visited, stored cookies, bookmarked sites, search engine queries, file downloads),\n- Recently attached devices,\n- Installed programs.\n\n\The module currently supports Windows only disk images.\n\The plugin is also fully functional when deployed on Windows version of Autopsy.
|
||||
OpenIDE-Module-Long-Description=Recent Activity ingest module.\n\nThe module extracts useful information about the recent user activity on the disk image being ingested, such as:\n\n- Recently open documents,\n- Web acitivity (sites visited, stored cookies, bookmarked sites, search engine queries, file downloads),\n- Recently attached devices,\n- Installed programs.\n\nThe module currently supports Windows only disk images. \nThe plugin is also fully functional when deployed on Windows version of Autopsy.
|
||||
OpenIDE-Module-Name=RecentActivity
|
||||
OpenIDE-Module-Short-Description=Recent Activity finder ingest module
|
||||
Chrome.moduleName=Chrome
|
||||
@ -124,6 +126,7 @@ RAImageIngestModule.process.ingestMsg.results={0} - Browser Results
|
||||
RAImageIngestModule.complete.errMsg.failed={0} failed to complete - see log for details <br>
|
||||
RAImageIngestModule.getName=Recent Activity
|
||||
RAImageIngestModule.getDesc=Extracts recent user activity, such as Web browsing, recently used documents and installed programs.
|
||||
RecentDocumentsByLnk.getRecDoc.errMsg.errCreatingArtifact={0}: Error creating Recent Document artifact.
|
||||
RecentDocumentsByLnk.getRecDoc.errMsg.errGetLnkFiles={0}: Error getting lnk Files.
|
||||
RecentDocumentsByLnk.getRecDoc.errParsingFile={0}: Error parsing Recent File {1}
|
||||
RecentDocumentsByLnk.parentModuleName.noSpace=RecentActivity
|
||||
@ -135,7 +138,7 @@ SearchEngineURLQueryAnalyzer.init.exception.msg=Unable to find {0}.
|
||||
SearchEngineURLQueryAnalyzer.moduleName.text=Search Engine
|
||||
SearchEngineURLQueryAnalyzer.engineName.none=NONE
|
||||
SearchEngineURLQueryAnalyzer.domainSubStr.none=NONE
|
||||
SearchEngineURLQueryAnalyzer.toString=Name: {0}\nDomain Substring: {1}\n\count: {2}\nSplit Tokens: \n{3}
|
||||
SearchEngineURLQueryAnalyzer.toString=Name: {0}\nDomain Substring: {1}\ncount: {2}\nSplit Tokens: \n{3}
|
||||
SearchEngineURLQueryAnalyzer.parentModuleName.noSpace=RecentActivity
|
||||
SearchEngineURLQueryAnalyzer.parentModuleName=Recent Activity
|
||||
UsbDeviceIdMapper.parseAndLookup.text=Product: {0}
|
||||
|
@ -42,6 +42,7 @@ import org.netbeans.jellytools.NbDialogOperator;
|
||||
import org.netbeans.jellytools.WizardOperator;
|
||||
import org.netbeans.jemmy.JemmyProperties;
|
||||
import org.netbeans.jemmy.Timeout;
|
||||
import org.netbeans.jemmy.TimeoutExpiredException;
|
||||
import org.netbeans.jemmy.Timeouts;
|
||||
import org.netbeans.jemmy.operators.JButtonOperator;
|
||||
import org.netbeans.jemmy.operators.JCheckBoxOperator;
|
||||
@ -67,7 +68,7 @@ public class AutopsyTestCases {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(AutopsyTestCases.class.getName());
|
||||
private long start;
|
||||
|
||||
|
||||
/**
|
||||
* Escapes the slashes in a file or directory path.
|
||||
*
|
||||
@ -96,274 +97,338 @@ public class AutopsyTestCases {
|
||||
}
|
||||
|
||||
public void testNewCaseWizardOpen(String title) {
|
||||
logger.info("New Case");
|
||||
resetTimeouts("WindowWaiter.WaitWindowTimeout", 240000);
|
||||
NbDialogOperator nbdo = new NbDialogOperator(title);
|
||||
JButtonOperator jbo = new JButtonOperator(nbdo, 0); // the "New Case" button
|
||||
jbo.pushNoBlock();
|
||||
try {
|
||||
logger.info("New Case");
|
||||
setTimeout("WindowWaiter.WaitWindowTimeout", 240000);
|
||||
NbDialogOperator nbdo = new NbDialogOperator(title);
|
||||
JButtonOperator jbo = new JButtonOperator(nbdo, 0); // the "New Case" button
|
||||
jbo.pushNoBlock();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void testNewCaseWizard() {
|
||||
logger.info("New Case Wizard");
|
||||
WizardOperator wo = new WizardOperator("New Case Information");
|
||||
JTextFieldOperator jtfo0 = new JTextFieldOperator(wo, 1);
|
||||
jtfo0.typeText("AutopsyTestCase"); // Name the case "AutopsyTestCase"
|
||||
JTextFieldOperator jtfo1 = new JTextFieldOperator(wo, 2);
|
||||
jtfo1.typeText(getEscapedPath(System.getProperty("out_path")));
|
||||
wo.btNext().clickMouse();
|
||||
JTextFieldOperator jtfo2 = new JTextFieldOperator(wo, 0);
|
||||
jtfo2.typeText("000"); // Set the case number
|
||||
JTextFieldOperator jtfo3 = new JTextFieldOperator(wo, 1);
|
||||
jtfo3.typeText("Examiner 1"); // Set the case examiner
|
||||
start = System.currentTimeMillis();
|
||||
wo.btFinish().clickMouse();
|
||||
try {
|
||||
logger.info("New Case Wizard");
|
||||
WizardOperator wo = new WizardOperator("New Case Information");
|
||||
JTextFieldOperator jtfo0 = new JTextFieldOperator(wo, 1);
|
||||
jtfo0.typeText("AutopsyTestCase"); // Name the case "AutopsyTestCase"
|
||||
JTextFieldOperator jtfo1 = new JTextFieldOperator(wo, 2);
|
||||
jtfo1.typeText(getEscapedPath(System.getProperty("out_path")));
|
||||
wo.btNext().clickMouse();
|
||||
JTextFieldOperator jtfo2 = new JTextFieldOperator(wo, 0);
|
||||
jtfo2.typeText("000"); // Set the case number
|
||||
JTextFieldOperator jtfo3 = new JTextFieldOperator(wo, 1);
|
||||
jtfo3.typeText("Examiner 1"); // Set the case examiner
|
||||
start = System.currentTimeMillis();
|
||||
wo.btFinish().clickMouse();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void testStartAddImageFileDataSource() {
|
||||
/*
|
||||
* This time out is to give time for creating case database and opening solr index
|
||||
*/
|
||||
new Timeout("pausing", 120000).sleep();
|
||||
logger.info("Starting Add Image process");
|
||||
resetTimeouts("WindowWaiter.WaitWindowTimeOut", 240000);
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while(!wo.btNext().isEnabled()){
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
try {
|
||||
/*
|
||||
* This time out is to give time for creating case database and
|
||||
* opening solr index
|
||||
*/
|
||||
new Timeout("pausing", 120000).sleep();
|
||||
logger.info("Starting Add Image process");
|
||||
setTimeout("WindowWaiter.WaitWindowTimeOut", 240000);
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while (!wo.btNext().isEnabled()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
}
|
||||
//select the toggle button for Disk Image or VM File it will be the first button created and proceed to next panel
|
||||
JToggleButtonOperator jtbo = new JToggleButtonOperator(wo, 0);
|
||||
jtbo.clickMouse();
|
||||
wo.btNext().clickMouse();
|
||||
JTextFieldOperator jtfo0 = new JTextFieldOperator(wo, 0);
|
||||
String img_path = getEscapedPath(System.getProperty("img_path"));
|
||||
String imageDir = img_path;
|
||||
((JTextComponent) jtfo0.getSource()).setText(imageDir);
|
||||
JComboBoxOperator comboBoxOperator = new JComboBoxOperator(wo, 0);
|
||||
comboBoxOperator.setSelectedItem("(GMT-5:00) America/New_York");
|
||||
wo.btNext().clickMouse();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
//select the toggle button for Disk Image or VM File it will be the first button created and proceed to next panel
|
||||
JToggleButtonOperator jtbo = new JToggleButtonOperator(wo, 0);
|
||||
jtbo.clickMouse();
|
||||
wo.btNext().clickMouse();
|
||||
JTextFieldOperator jtfo0 = new JTextFieldOperator(wo, 0);
|
||||
String img_path = getEscapedPath(System.getProperty("img_path"));
|
||||
String imageDir = img_path;
|
||||
((JTextComponent) jtfo0.getSource()).setText(imageDir);
|
||||
JComboBoxOperator comboBoxOperator = new JComboBoxOperator(wo, 0);
|
||||
comboBoxOperator.setSelectedItem("(GMT-5:00) America/New_York");
|
||||
wo.btNext().clickMouse();
|
||||
}
|
||||
|
||||
public void testStartAddLogicalFilesDataSource() {
|
||||
/*
|
||||
* This time out is to give time for creating case database and opening solr index
|
||||
*/
|
||||
new Timeout("pausing", 120000).sleep();
|
||||
logger.info("Starting Add Logical Files process");
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
wo.setTimeouts(resetTimeouts("WindowWaiter.WaitWindowTimeOut", 240000));
|
||||
while(!wo.btNext().isEnabled()){
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
try {
|
||||
/*
|
||||
* This time out is to give time for creating case database and
|
||||
* opening solr index
|
||||
*/
|
||||
new Timeout("pausing", 120000).sleep();
|
||||
logger.info("Starting Add Logical Files process");
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
wo.setTimeouts(setTimeout("WindowWaiter.WaitWindowTimeOut", 240000));
|
||||
while (!wo.btNext().isEnabled()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
}
|
||||
//select the toggle button for Logical Files it will be the third button created and proceed to next panel
|
||||
JToggleButtonOperator jtbo = new JToggleButtonOperator(wo, 2);
|
||||
jtbo.clickMouse();
|
||||
wo.btNext().clickMouse();
|
||||
JButtonOperator addButtonOperator = new JButtonOperator(wo, "Add");
|
||||
addButtonOperator.pushNoBlock();
|
||||
JFileChooserOperator fileChooserOperator = new JFileChooserOperator();
|
||||
fileChooserOperator.setCurrentDirectory(new File(getEscapedPath(System.getProperty("img_path"))));
|
||||
// set the current directory one level above the directory containing logicalFileSet folder.
|
||||
fileChooserOperator.goUpLevel();
|
||||
fileChooserOperator.chooseFile(new File(getEscapedPath(System.getProperty("img_path"))).getName());
|
||||
wo.btNext().clickMouse();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
//select the toggle button for Logical Files it will be the third button created and proceed to next panel
|
||||
JToggleButtonOperator jtbo = new JToggleButtonOperator(wo, 2);
|
||||
jtbo.clickMouse();
|
||||
wo.btNext().clickMouse();
|
||||
JButtonOperator addButtonOperator = new JButtonOperator(wo, "Add");
|
||||
addButtonOperator.pushNoBlock();
|
||||
JFileChooserOperator fileChooserOperator = new JFileChooserOperator();
|
||||
fileChooserOperator.setCurrentDirectory(new File(getEscapedPath(System.getProperty("img_path"))));
|
||||
// set the current directory one level above the directory containing logicalFileSet folder.
|
||||
fileChooserOperator.goUpLevel();
|
||||
fileChooserOperator.chooseFile(new File(getEscapedPath(System.getProperty("img_path"))).getName());
|
||||
wo.btNext().clickMouse();
|
||||
}
|
||||
|
||||
public void testAddSourceWizard1() {
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while (!wo.btFinish().isEnabled()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
|
||||
try {
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while (!wo.btFinish().isEnabled()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
|
||||
}
|
||||
logger.log(Level.INFO, "Add image took {0}ms", (System.currentTimeMillis() - start));
|
||||
wo.btFinish().clickMouse();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
logger.log(Level.INFO, "Add image took {0}ms", (System.currentTimeMillis() - start));
|
||||
wo.btFinish().clickMouse();
|
||||
}
|
||||
|
||||
public void testConfigureIngest1() {
|
||||
/*
|
||||
* This timeout is to allow the setup for the ingest job settings panel
|
||||
* to complete.
|
||||
*/
|
||||
new Timeout("pausing", 10000).sleep();
|
||||
try {
|
||||
/*
|
||||
* This timeout is to allow the setup for the ingest job settings
|
||||
* panel to complete.
|
||||
*/
|
||||
new Timeout("pausing", 10000).sleep();
|
||||
|
||||
logger.info("Looking for hash lookup module in ingest job settings panel");
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while(!wo.btNext().isEnabled()){
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
logger.info("Looking for hash lookup module in ingest job settings panel");
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while (!wo.btNext().isEnabled()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
}
|
||||
JTableOperator jto = new JTableOperator(wo, 0);
|
||||
int row = jto.findCellRow("Hash Lookup", 2, 0);
|
||||
jto.clickOnCell(row, 1);
|
||||
logger.info("Selected hash lookup module in ingest job settings panel");
|
||||
JButtonOperator jbo1 = new JButtonOperator(wo, "Global Settings");
|
||||
jbo1.pushNoBlock();
|
||||
logger.info("Pushed Global Settings button for hash lookup module in ingest job settings panel");
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
JTableOperator jto = new JTableOperator(wo, 0);
|
||||
int row = jto.findCellRow("Hash Lookup", 2, 0);
|
||||
jto.clickOnCell(row, 1);
|
||||
logger.info("Selected hash lookup module in ingest job settings panel");
|
||||
JButtonOperator jbo1 = new JButtonOperator(wo, "Global Settings");
|
||||
jbo1.pushNoBlock();
|
||||
logger.info("Pushed Global Settings button for hash lookup module in ingest job settings panel");
|
||||
}
|
||||
|
||||
public void testConfigureHash() {
|
||||
logger.info("Hash Configure");
|
||||
JDialog hashMainDialog = JDialogOperator.waitJDialog("Global Hash Lookup Settings", false, false);
|
||||
JDialogOperator hashMainDialogOperator = new JDialogOperator(hashMainDialog);
|
||||
List<String> databases = new ArrayList<>();
|
||||
databases.add(getEscapedPath(System.getProperty("nsrl_path")));
|
||||
databases.add(getEscapedPath(System.getProperty("known_bad_path")));
|
||||
databases.stream().map((database) -> {
|
||||
JButtonOperator importButtonOperator = new JButtonOperator(hashMainDialogOperator, "Import");
|
||||
importButtonOperator.pushNoBlock();
|
||||
JDialog addDatabaseDialog = JDialogOperator.waitJDialog("Import Hash Set", false, false);
|
||||
JDialogOperator addDatabaseDialogOperator = new JDialogOperator(addDatabaseDialog);
|
||||
JButtonOperator browseButtonOperator = new JButtonOperator(addDatabaseDialogOperator, "Open...", 0);
|
||||
browseButtonOperator.pushNoBlock();
|
||||
JFileChooserOperator fileChooserOperator = new JFileChooserOperator();
|
||||
fileChooserOperator.chooseFile(database);
|
||||
JButtonOperator okButtonOperator = new JButtonOperator(addDatabaseDialogOperator, "OK", 0);
|
||||
return okButtonOperator;
|
||||
}).map((okButtonOperator) -> {
|
||||
okButtonOperator.pushNoBlock();
|
||||
return okButtonOperator;
|
||||
}).forEach((_item) -> {
|
||||
try {
|
||||
logger.info("Hash Configure");
|
||||
JDialog hashMainDialog = JDialogOperator.waitJDialog("Global Hash Lookup Settings", false, false);
|
||||
JDialogOperator hashMainDialogOperator = new JDialogOperator(hashMainDialog);
|
||||
List<String> databases = new ArrayList<>();
|
||||
databases.add(getEscapedPath(System.getProperty("nsrl_path")));
|
||||
databases.add(getEscapedPath(System.getProperty("known_bad_path")));
|
||||
databases.stream().map((database) -> {
|
||||
JButtonOperator importButtonOperator = new JButtonOperator(hashMainDialogOperator, "Import");
|
||||
importButtonOperator.pushNoBlock();
|
||||
JDialog addDatabaseDialog = JDialogOperator.waitJDialog("Import Hash Set", false, false);
|
||||
JDialogOperator addDatabaseDialogOperator = new JDialogOperator(addDatabaseDialog);
|
||||
JButtonOperator browseButtonOperator = new JButtonOperator(addDatabaseDialogOperator, "Open...", 0);
|
||||
browseButtonOperator.pushNoBlock();
|
||||
JFileChooserOperator fileChooserOperator = new JFileChooserOperator();
|
||||
fileChooserOperator.chooseFile(database);
|
||||
JButtonOperator okButtonOperator = new JButtonOperator(addDatabaseDialogOperator, "OK", 0);
|
||||
return okButtonOperator;
|
||||
}).map((okButtonOperator) -> {
|
||||
okButtonOperator.pushNoBlock();
|
||||
return okButtonOperator;
|
||||
}).forEach((_item) -> {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
|
||||
});
|
||||
// Used if the database has no index
|
||||
//JDialog jd3 = JDialogOperator.waitJDialog("No Index Exists", false, false);
|
||||
//JDialogOperator jdo3 = new JDialogOperator(jd3);
|
||||
//JButtonOperator jbo3 = new JButtonOperator(jdo3, "Yes", 0);
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
|
||||
});
|
||||
// Used if the database has no index
|
||||
//JDialog jd3 = JDialogOperator.waitJDialog("No Index Exists", false, false);
|
||||
//JDialogOperator jdo3 = new JDialogOperator(jd3);
|
||||
//JButtonOperator jbo3 = new JButtonOperator(jdo3, "Yes", 0);
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
|
||||
//jbo3.pushNoBlock();
|
||||
JButtonOperator jbo4 = new JButtonOperator(hashMainDialogOperator, "OK", 0);
|
||||
jbo4.pushNoBlock();
|
||||
//jbo3.pushNoBlock();
|
||||
JButtonOperator jbo4 = new JButtonOperator(hashMainDialogOperator, "OK", 0);
|
||||
jbo4.pushNoBlock();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void testConfigureIngest2() {
|
||||
logger.info("Looking for keyword search module in ingest job settings panel");
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while(!wo.btNext().isEnabled()){
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
try {
|
||||
logger.info("Looking for keyword search module in ingest job settings panel");
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
while (!wo.btNext().isEnabled()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second till the Add Data Source dialog enabled
|
||||
}
|
||||
JTableOperator jto = new JTableOperator(wo, 0);
|
||||
int row = jto.findCellRow("Keyword Search", 2, 0);
|
||||
jto.clickOnCell(row, 1);
|
||||
logger.info("Selected keyword search module in ingest job settings panel");
|
||||
JButtonOperator jbo1 = new JButtonOperator(wo, "Global Settings");
|
||||
jbo1.pushNoBlock();
|
||||
logger.info("Pushed Global Settings button for keyword search module in ingest job settings panel");
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
JTableOperator jto = new JTableOperator(wo, 0);
|
||||
int row = jto.findCellRow("Keyword Search", 2, 0);
|
||||
jto.clickOnCell(row, 1);
|
||||
logger.info("Selected keyword search module in ingest job settings panel");
|
||||
JButtonOperator jbo1 = new JButtonOperator(wo, "Global Settings");
|
||||
jbo1.pushNoBlock();
|
||||
logger.info("Pushed Global Settings button for keyword search module in ingest job settings panel");
|
||||
}
|
||||
|
||||
public void testConfigureSearch() {
|
||||
logger.info("Search Configure");
|
||||
JDialog jd = JDialogOperator.waitJDialog("Global Keyword Search Settings", false, false);
|
||||
JDialogOperator jdo = new JDialogOperator(jd);
|
||||
String words = getEscapedPath(System.getProperty("keyword_path"));
|
||||
JButtonOperator jbo0 = new JButtonOperator(jdo, "Import List", 0);
|
||||
jbo0.pushNoBlock();
|
||||
JFileChooserOperator jfco0 = new JFileChooserOperator();
|
||||
jfco0.chooseFile(words);
|
||||
JTableOperator jto = new JTableOperator(jdo, 0);
|
||||
jto.clickOnCell(0, 0);
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second to process
|
||||
if (Boolean.parseBoolean(System.getProperty("mugen_mode"))) {
|
||||
JTabbedPaneOperator jtpo = new JTabbedPaneOperator(jdo);
|
||||
jtpo.selectPage("String Extraction");
|
||||
JCheckBoxOperator jcbo0 = new JCheckBoxOperator(jtpo, "Arabic (Arabic)");
|
||||
jcbo0.doClick();
|
||||
JCheckBoxOperator jcbo1 = new JCheckBoxOperator(jtpo, "Han (Chinese, Japanese, Korean)");
|
||||
jcbo1.doClick();
|
||||
try {
|
||||
logger.info("Search Configure");
|
||||
JDialog jd = JDialogOperator.waitJDialog("Global Keyword Search Settings", false, false);
|
||||
JDialogOperator jdo = new JDialogOperator(jd);
|
||||
String words = getEscapedPath(System.getProperty("keyword_path"));
|
||||
JButtonOperator jbo0 = new JButtonOperator(jdo, "Import List", 0);
|
||||
jbo0.pushNoBlock();
|
||||
JFileChooserOperator jfco0 = new JFileChooserOperator();
|
||||
jfco0.chooseFile(words);
|
||||
JTableOperator jto = new JTableOperator(jdo, 0);
|
||||
jto.clickOnCell(0, 0);
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second to process
|
||||
if (Boolean.parseBoolean(System.getProperty("mugen_mode"))) {
|
||||
JTabbedPaneOperator jtpo = new JTabbedPaneOperator(jdo);
|
||||
jtpo.selectPage("String Extraction");
|
||||
JCheckBoxOperator jcbo0 = new JCheckBoxOperator(jtpo, "Arabic (Arabic)");
|
||||
jcbo0.doClick();
|
||||
JCheckBoxOperator jcbo1 = new JCheckBoxOperator(jtpo, "Han (Chinese, Japanese, Korean)");
|
||||
jcbo1.doClick();
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second to process
|
||||
}
|
||||
JButtonOperator jbo2 = new JButtonOperator(jdo, "OK", 0);
|
||||
jbo2.pushNoBlock();
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
new Timeout("pausing", 10000).sleep(); // let things catch up
|
||||
wo.btNext().clickMouse();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
JButtonOperator jbo2 = new JButtonOperator(jdo, "OK", 0);
|
||||
jbo2.pushNoBlock();
|
||||
WizardOperator wo = new WizardOperator("Add Data Source");
|
||||
new Timeout("pausing", 10000).sleep(); // let things catch up
|
||||
wo.btNext().clickMouse();
|
||||
}
|
||||
|
||||
public void testIngest() {
|
||||
logger.info("Ingest 3");
|
||||
new Timeout("pausing", 10000).sleep(); // wait for ingest to actually start
|
||||
long startIngest = System.currentTimeMillis();
|
||||
IngestManager man = IngestManager.getInstance();
|
||||
while (man.isIngestRunning()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
|
||||
try {
|
||||
logger.info("Ingest 3");
|
||||
new Timeout("pausing", 10000).sleep(); // wait for ingest to actually start
|
||||
long startIngest = System.currentTimeMillis();
|
||||
IngestManager man = IngestManager.getInstance();
|
||||
while (man.isIngestRunning()) {
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process
|
||||
}
|
||||
logger.log(Level.INFO, "Ingest (including enqueue) took {0}ms", (System.currentTimeMillis() - startIngest));
|
||||
// allow keyword search to finish saving artifacts, just in case
|
||||
// but randomize the timing so that we don't always get the same error
|
||||
// consistently, making it seem like default behavior
|
||||
Random rand = new Random();
|
||||
new Timeout("pausing", 10000 + (rand.nextInt(15000) + 5000)).sleep();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
logger.log(Level.INFO, "Ingest (including enqueue) took {0}ms", (System.currentTimeMillis() - startIngest));
|
||||
// allow keyword search to finish saving artifacts, just in case
|
||||
// but randomize the timing so that we don't always get the same error
|
||||
// consistently, making it seem like default behavior
|
||||
Random rand = new Random();
|
||||
new Timeout("pausing", 10000 + (rand.nextInt(15000) + 5000)).sleep();
|
||||
screenshot("Finished Ingest");
|
||||
|
||||
}
|
||||
|
||||
public void testExpandDataSourcesTree() {
|
||||
logger.info("Data Sources Node");
|
||||
MainWindowOperator mwo = MainWindowOperator.getDefault();
|
||||
JTreeOperator jto = new JTreeOperator(mwo, "Data Sources");
|
||||
String [] nodeNames = {"Data Sources"};
|
||||
TreePath tp = jto.findPath(nodeNames);
|
||||
expandNodes(jto, tp);
|
||||
screenshot("Data Sources Tree");
|
||||
try {
|
||||
logger.info("Data Sources Node");
|
||||
MainWindowOperator mwo = MainWindowOperator.getDefault();
|
||||
JTreeOperator jto = new JTreeOperator(mwo, "Data Sources");
|
||||
String[] nodeNames = {"Data Sources"};
|
||||
TreePath tp = jto.findPath(nodeNames);
|
||||
expandNodes(jto, tp);
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void testGenerateReportToolbar() {
|
||||
logger.info("Generate Report Toolbars");
|
||||
MainWindowOperator mwo = MainWindowOperator.getDefault();
|
||||
JButtonOperator jbo = new JButtonOperator(mwo, "Generate Report");
|
||||
jbo.pushNoBlock();
|
||||
new Timeout("pausing", 5000).sleep();
|
||||
try {
|
||||
logger.info("Generate Report Toolbars");
|
||||
MainWindowOperator mwo = MainWindowOperator.getDefault();
|
||||
JButtonOperator jbo = new JButtonOperator(mwo, "Generate Report");
|
||||
jbo.pushNoBlock();
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void testGenerateReportButton() throws IOException {
|
||||
logger.info("Generate Report Button");
|
||||
resetTimeouts("ComponentOperator.WaitComponentTimeout", 240000);
|
||||
JDialog reportDialog = JDialogOperator.waitJDialog("Generate Report", false, false);
|
||||
JDialogOperator reportDialogOperator = new JDialogOperator(reportDialog);
|
||||
JListOperator listOperator = new JListOperator(reportDialogOperator);
|
||||
JButtonOperator jbo0 = new JButtonOperator(reportDialogOperator, "Next");
|
||||
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss");
|
||||
Date date = new Date();
|
||||
String datenotime = dateFormat.format(date);
|
||||
listOperator.clickOnItem(0, 1);
|
||||
jbo0.pushNoBlock();
|
||||
new Timeout("pausing", 2000).sleep();
|
||||
JButtonOperator jbo1 = new JButtonOperator(reportDialogOperator, "Finish");
|
||||
jbo1.pushNoBlock();
|
||||
JDialog previewDialog = JDialogOperator.waitJDialog("Progress", false, false);
|
||||
screenshot("Progress");
|
||||
JDialogOperator previewDialogOperator = new JDialogOperator(previewDialog);
|
||||
JLabelOperator.waitJLabel(previewDialog, "Complete", false, false);
|
||||
JButtonOperator jbo2 = new JButtonOperator(previewDialogOperator, "Close");
|
||||
jbo2.pushNoBlock();
|
||||
new Timeout("pausing", 10000).sleep();
|
||||
System.setProperty("ReportStr", datenotime);
|
||||
screenshot("Done Testing");
|
||||
try {
|
||||
logger.info("Generate Report Button");
|
||||
setTimeout("ComponentOperator.WaitComponentTimeout", 240000);
|
||||
JDialog reportDialog = JDialogOperator.waitJDialog("Generate Report", false, false);
|
||||
JDialogOperator reportDialogOperator = new JDialogOperator(reportDialog);
|
||||
JListOperator listOperator = new JListOperator(reportDialogOperator);
|
||||
JButtonOperator jbo0 = new JButtonOperator(reportDialogOperator, "Next");
|
||||
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss");
|
||||
Date date = new Date();
|
||||
String datenotime = dateFormat.format(date);
|
||||
listOperator.clickOnItem(0, 1);
|
||||
jbo0.pushNoBlock();
|
||||
new Timeout("pausing", 2000).sleep();
|
||||
JButtonOperator jbo1 = new JButtonOperator(reportDialogOperator, "Finish");
|
||||
jbo1.pushNoBlock();
|
||||
JDialog previewDialog = JDialogOperator.waitJDialog("Progress", false, false);
|
||||
JDialogOperator previewDialogOperator = new JDialogOperator(previewDialog);
|
||||
JLabelOperator.waitJLabel(previewDialog, "Complete", false, false);
|
||||
JButtonOperator jbo2 = new JButtonOperator(previewDialogOperator, "Close");
|
||||
jbo2.pushNoBlock();
|
||||
new Timeout("pausing", 10000).sleep();
|
||||
System.setProperty("ReportStr", datenotime);
|
||||
} catch (TimeoutExpiredException ex) {
|
||||
screenshot("TimeoutScreenshot");
|
||||
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void screenshot(String name) {
|
||||
logger.info("Taking screenshot.");
|
||||
try {
|
||||
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
|
||||
BufferedImage capture = new Robot().createScreenCapture(screenRect);
|
||||
String outPath = getEscapedPath(System.getProperty("out_path"));
|
||||
ImageIO.write(capture, "png", new File(outPath + "\\" + name + ".png"));
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second to save
|
||||
} catch (IOException ex) {
|
||||
logger.log(Level.WARNING, "IOException taking screenshot.", ex);
|
||||
} catch (AWTException ex) {
|
||||
logger.log(Level.WARNING, "AWTException taking screenshot.", ex);
|
||||
|
||||
String outPath = getEscapedPath(System.getProperty("out_path"));
|
||||
File screenShotFile = new File(outPath + "\\" + name + ".png");
|
||||
if (!screenShotFile.exists()) {
|
||||
logger.info("Taking screenshot.");
|
||||
try {
|
||||
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
|
||||
BufferedImage capture = new Robot().createScreenCapture(screenRect);
|
||||
ImageIO.write(capture, "png", screenShotFile);
|
||||
new Timeout("pausing", 1000).sleep(); // give it a second to save
|
||||
} catch (IOException ex) {
|
||||
logger.log(Level.WARNING, "IOException taking screenshot.", ex);
|
||||
} catch (AWTException ex) {
|
||||
logger.log(Level.WARNING, "AWTException taking screenshot.", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Nightly test failed at WindowWaiter.WaitWindowTimeOut because of TimeoutExpiredException. So we
|
||||
* use this conveninent method to override the default Jemmy Timeouts value.
|
||||
*/
|
||||
|
||||
private Timeouts resetTimeouts(String name, int value) {
|
||||
/*
|
||||
* Nightly test failed at WindowWaiter.WaitWindowTimeOut because of
|
||||
* TimeoutExpiredException. So we use this conveninent method to override
|
||||
* the default Jemmy Timeouts value.
|
||||
*/
|
||||
private Timeouts setTimeout(String name, int value) {
|
||||
Timeouts timeouts = JemmyProperties.getCurrentTimeouts();
|
||||
timeouts.setTimeout(name, value);
|
||||
return timeouts;
|
||||
}
|
||||
|
||||
|
||||
private void setMultiUserPerferences() {
|
||||
UserPreferences.setIsMultiUserModeEnabled(true);
|
||||
//PostgreSQL database settings
|
||||
@ -393,8 +458,8 @@ public class AutopsyTestCases {
|
||||
logger.log(Level.SEVERE, "Error saving messaging service connection info", ex); //NON-NLS
|
||||
}
|
||||
}
|
||||
|
||||
private void expandNodes (JTreeOperator jto, TreePath tp) {
|
||||
|
||||
private void expandNodes(JTreeOperator jto, TreePath tp) {
|
||||
try {
|
||||
jto.expandPath(tp);
|
||||
for (TreePath t : jto.getChildPaths(tp)) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
#Updated by build script
|
||||
#Tue, 26 Feb 2019 14:37:44 -0500
|
||||
#Fri, 01 Mar 2019 12:26:15 +0100
|
||||
LBL_splash_window_title=Starting Autopsy
|
||||
SPLASH_HEIGHT=314
|
||||
SPLASH_WIDTH=538
|
||||
|
@ -1,4 +1,4 @@
|
||||
#Updated by build script
|
||||
#Tue, 26 Feb 2019 14:37:44 -0500
|
||||
#Fri, 01 Mar 2019 12:26:15 +0100
|
||||
CTL_MainWindow_Title=Autopsy 4.10.0
|
||||
CTL_MainWindow_Title_No_Project=Autopsy 4.10.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user