mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
Merge remote-tracking branch 'upstream/release-4.4.0' into develop
This commit is contained in:
commit
face5c1b33
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||||||
OpenIDE-Module: org.sleuthkit.autopsy.core/10
|
OpenIDE-Module: org.sleuthkit.autopsy.core/10
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/core/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/core/Bundle.properties
|
||||||
OpenIDE-Module-Layer: org/sleuthkit/autopsy/core/layer.xml
|
OpenIDE-Module-Layer: org/sleuthkit/autopsy/core/layer.xml
|
||||||
OpenIDE-Module-Implementation-Version: 18
|
OpenIDE-Module-Implementation-Version: 19
|
||||||
OpenIDE-Module-Requires: org.openide.windows.WindowManager
|
OpenIDE-Module-Requires: org.openide.windows.WindowManager
|
||||||
AutoUpdate-Show-In-Client: true
|
AutoUpdate-Show-In-Client: true
|
||||||
AutoUpdate-Essential-Module: true
|
AutoUpdate-Essential-Module: true
|
||||||
|
@ -140,11 +140,28 @@ public class Case {
|
|||||||
private volatile ExecutorService caseLockingExecutor;
|
private volatile ExecutorService caseLockingExecutor;
|
||||||
private CoordinationService.Lock caseDirLock;
|
private CoordinationService.Lock caseDirLock;
|
||||||
private SleuthkitCase caseDb;
|
private SleuthkitCase caseDb;
|
||||||
private SleuthkitErrorReporter sleuthkitErrorReporter;
|
|
||||||
private CollaborationMonitor collaborationMonitor;
|
private CollaborationMonitor collaborationMonitor;
|
||||||
private Services caseServices;
|
private Services caseServices;
|
||||||
private boolean hasDataSources;
|
private boolean hasDataSources;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get a reference to the main window of the desktop application to use to
|
||||||
|
* parent pop up dialogs and initialize the application name for use in
|
||||||
|
* changing the main window title.
|
||||||
|
*
|
||||||
|
* TODO (JIRA-2231): Make the application name a RuntimeProperties item set
|
||||||
|
* by Installers.
|
||||||
|
*/
|
||||||
|
static {
|
||||||
|
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mainFrame = WindowManager.getDefault().getMainWindow();
|
||||||
|
appName = mainFrame.getTitle();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An enumeration of case types.
|
* An enumeration of case types.
|
||||||
*/
|
*/
|
||||||
@ -474,8 +491,8 @@ public class Case {
|
|||||||
throw new CaseActionException(Bundle.Case_exceptionMessage_failedToReadMetadata(), ex);
|
throw new CaseActionException(Bundle.Case_exceptionMessage_failedToReadMetadata(), ex);
|
||||||
}
|
}
|
||||||
if (CaseType.MULTI_USER_CASE == metadata.getCaseType() && !UserPreferences.getIsMultiUserModeEnabled()) {
|
if (CaseType.MULTI_USER_CASE == metadata.getCaseType() && !UserPreferences.getIsMultiUserModeEnabled()) {
|
||||||
throw new CaseActionException(Bundle.Case_exceptionMessage_cannotOpenMultiUserCaseNoSettings());
|
throw new CaseActionException(Bundle.Case_exceptionMessage_cannotOpenMultiUserCaseNoSettings());
|
||||||
}
|
}
|
||||||
openAsCurrentCase(new Case(metadata), false);
|
openAsCurrentCase(new Case(metadata), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -634,28 +651,6 @@ public class Case {
|
|||||||
"Case.exceptionMessage.cannotLocateMainWindow=Cannot locate main application window"
|
"Case.exceptionMessage.cannotLocateMainWindow=Cannot locate main application window"
|
||||||
})
|
})
|
||||||
private static void openAsCurrentCase(Case newCurrentCase, boolean isNewCase) throws CaseActionException, CaseActionCancelledException {
|
private static void openAsCurrentCase(Case newCurrentCase, boolean isNewCase) throws CaseActionException, CaseActionCancelledException {
|
||||||
if (RuntimeProperties.runningWithGUI() && null == mainFrame) {
|
|
||||||
/*
|
|
||||||
* Get a reference to the main window of the desktop application to
|
|
||||||
* use to parent pop up dialogs and initialize the application name
|
|
||||||
* for use in changing the main window title. This is tricky and
|
|
||||||
* fragile. The application name aspect can be resolved thus:
|
|
||||||
*
|
|
||||||
* TODO (JIRA-2231): Make the application name a RuntimeProperties
|
|
||||||
* item set by Installers.
|
|
||||||
*
|
|
||||||
* And the getting of the main frame should be resolved when the
|
|
||||||
* code is refactored to separate the presentation layer fomr the
|
|
||||||
* business layer.
|
|
||||||
*
|
|
||||||
* TODO (JIRA-multiple): Make it possible to run "headless."
|
|
||||||
*/
|
|
||||||
assert (!SwingUtilities.isEventDispatchThread());
|
|
||||||
SwingUtilities.invokeLater(() -> {
|
|
||||||
mainFrame = WindowManager.getDefault().getMainWindow();
|
|
||||||
appName = mainFrame.getTitle();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
synchronized (caseActionSerializationLock) {
|
synchronized (caseActionSerializationLock) {
|
||||||
if (null != currentCase) {
|
if (null != currentCase) {
|
||||||
try {
|
try {
|
||||||
@ -1815,7 +1810,6 @@ public class Case {
|
|||||||
*/
|
*/
|
||||||
@Messages({
|
@Messages({
|
||||||
"Case.progressMessage.switchingLogDirectory=Switching log directory...",
|
"Case.progressMessage.switchingLogDirectory=Switching log directory...",
|
||||||
"Case.progressMessage.settingUpTskErrorReporting=Setting up SleuthKit error reporting...",
|
|
||||||
"Case.progressMessage.clearingTempDirectory=Clearing case temp directory...",
|
"Case.progressMessage.clearingTempDirectory=Clearing case temp directory...",
|
||||||
"Case.progressMessage.openingCaseLevelServices=Opening case-level services...",
|
"Case.progressMessage.openingCaseLevelServices=Opening case-level services...",
|
||||||
"Case.progressMessage.openingApplicationServiceResources=Opening application service case resources...",
|
"Case.progressMessage.openingApplicationServiceResources=Opening application service case resources...",
|
||||||
@ -1831,18 +1825,6 @@ public class Case {
|
|||||||
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelledByUser());
|
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelledByUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Hook up a SleuthKit layer error reporter.
|
|
||||||
*/
|
|
||||||
progressIndicator.progress(Bundle.Case_progressMessage_settingUpTskErrorReporting());
|
|
||||||
sleuthkitErrorReporter
|
|
||||||
= new SleuthkitErrorReporter(MIN_SECS_BETWEEN_TSK_ERROR_REPORTS, NbBundle.getMessage(Case.class,
|
|
||||||
"IntervalErrorReport.ErrorText"));
|
|
||||||
caseDb.addErrorObserver(this.sleuthkitErrorReporter);
|
|
||||||
if (Thread.currentThread().isInterrupted()) {
|
|
||||||
throw new CaseActionCancelledException(Bundle.Case_exceptionMessage_cancelledByUser());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear the temp subdirectory of the case directory.
|
* Clear the temp subdirectory of the case directory.
|
||||||
*/
|
*/
|
||||||
@ -2077,8 +2059,8 @@ public class Case {
|
|||||||
"Case.progressMessage.shuttingDownNetworkCommunications=Shutting down network communications...",
|
"Case.progressMessage.shuttingDownNetworkCommunications=Shutting down network communications...",
|
||||||
"Case.progressMessage.closingApplicationServiceResources=Closing case-specific application service resources...",
|
"Case.progressMessage.closingApplicationServiceResources=Closing case-specific application service resources...",
|
||||||
"Case.progressMessage.closingCaseLevelServices=Closing case-level services...",
|
"Case.progressMessage.closingCaseLevelServices=Closing case-level services...",
|
||||||
"Case.progressMessage.closingCaseDatabase=Closing case database...",
|
"Case.progressMessage.closingCaseDatabase=Closing case database..."
|
||||||
"Case.progressMessage.shuttingDownTskErrorReporting=Shutting down SleuthKit error reporting..."})
|
})
|
||||||
private void close(ProgressIndicator progressIndicator) {
|
private void close(ProgressIndicator progressIndicator) {
|
||||||
IngestManager.getInstance().cancelAllIngestJobs(IngestJob.CancellationReason.CASE_CLOSED);
|
IngestManager.getInstance().cancelAllIngestJobs(IngestJob.CancellationReason.CASE_CLOSED);
|
||||||
|
|
||||||
@ -2119,10 +2101,6 @@ public class Case {
|
|||||||
if (null != caseDb) {
|
if (null != caseDb) {
|
||||||
progressIndicator.progress(Bundle.Case_progressMessage_closingCaseDatabase());
|
progressIndicator.progress(Bundle.Case_progressMessage_closingCaseDatabase());
|
||||||
caseDb.close();
|
caseDb.close();
|
||||||
if (null != sleuthkitErrorReporter) {
|
|
||||||
progressIndicator.progress(Bundle.Case_progressMessage_shuttingDownTskErrorReporting());
|
|
||||||
caseDb.removeErrorObserver(sleuthkitErrorReporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2391,6 +2369,17 @@ public class Case {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the application name.
|
||||||
|
*
|
||||||
|
* @return The application name.
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public static String getAppName() {
|
||||||
|
return appName;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new, single-user Autopsy case.
|
* Creates a new, single-user Autopsy case.
|
||||||
*
|
*
|
||||||
@ -2632,16 +2621,4 @@ public class Case {
|
|||||||
deleteReports(reports);
|
deleteReports(reports);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the name of the keyword search index for the case.
|
|
||||||
*
|
|
||||||
* @param textIndexName The text index name.
|
|
||||||
*
|
|
||||||
* @throws CaseMetadataException
|
|
||||||
* @deprecated Do not use.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public void setTextIndexName(String textIndexName) throws CaseMetadataException {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,85 +0,0 @@
|
|||||||
/*
|
|
||||||
* Autopsy Forensic Browser
|
|
||||||
*
|
|
||||||
* Copyright 2011-2017 Basis Technology Corp.
|
|
||||||
* Contact: carrier <at> sleuthkit <dot> 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.casemodule;
|
|
||||||
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import org.openide.util.NbBundle;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
|
||||||
import org.sleuthkit.datamodel.SleuthkitCase;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Acts as a bridge between the Sleuthkit Java bindings classes and Autopsy by
|
|
||||||
* implementing the SleuthkitCase$ErrorObserver interface. All errors are
|
|
||||||
* written to the Autopsy logs. If a GUI is running, errors are also batched up
|
|
||||||
* and reported periodically to the user via the notification area in the lower
|
|
||||||
* right hand corner of the main application window.
|
|
||||||
*/
|
|
||||||
class SleuthkitErrorReporter implements SleuthkitCase.ErrorObserver {
|
|
||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(SleuthkitErrorReporter.class.getName());
|
|
||||||
private final int milliSecondsBetweenReports;
|
|
||||||
private final String message;
|
|
||||||
private long newProblems;
|
|
||||||
private long totalProblems;
|
|
||||||
private long lastReportedDate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new IntervalErrorReprotData instance and subscribe for TSK error
|
|
||||||
* notifications for the current case.
|
|
||||||
*
|
|
||||||
* @param secondsBetweenReports Minimum number of seconds between reports.
|
|
||||||
* It will not warn more frequently than this.
|
|
||||||
* @param message The message that will be shown when warning
|
|
||||||
* the user.
|
|
||||||
*/
|
|
||||||
SleuthkitErrorReporter(int secondsBetweenReports, String message) {
|
|
||||||
this.newProblems = 0;
|
|
||||||
this.totalProblems = 0;
|
|
||||||
this.lastReportedDate = 0; // arm the first warning by choosing zero
|
|
||||||
this.milliSecondsBetweenReports = secondsBetweenReports * 1000; // convert to milliseconds
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call this to add problems to the class. When the time threshold is met
|
|
||||||
* (or if this is the first problem encountered), a warning will be shown to
|
|
||||||
* the user.
|
|
||||||
*
|
|
||||||
* @param context The context in which the error occurred.
|
|
||||||
* @param errorMessage A description of the error that occurred.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void receiveError(String context, String errorMessage) {
|
|
||||||
LOGGER.log(Level.SEVERE, String.format("%s error in the SleuthKit layer: %s", context, errorMessage));
|
|
||||||
this.newProblems += 1;
|
|
||||||
this.totalProblems += newProblems;
|
|
||||||
long currentTimeStamp = System.currentTimeMillis();
|
|
||||||
if ((currentTimeStamp - lastReportedDate) > milliSecondsBetweenReports) {
|
|
||||||
this.lastReportedDate = currentTimeStamp;
|
|
||||||
MessageNotifyUtil.Notify.error(message, context + ", " + errorMessage + " "
|
|
||||||
+ this.newProblems + " "
|
|
||||||
+ NbBundle.getMessage(SleuthkitErrorReporter.class, "IntervalErrorReport.NewIssues")
|
|
||||||
+ " " + this.totalProblems + " "
|
|
||||||
+ NbBundle.getMessage(SleuthkitErrorReporter.class, "IntervalErrorReport.TotalIssues")
|
|
||||||
+ ".");
|
|
||||||
this.newProblems = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -64,7 +64,6 @@ public final class UserPreferences {
|
|||||||
private static final String MESSAGE_SERVICE_PORT = "MessageServicePort"; //NON-NLS
|
private static final String MESSAGE_SERVICE_PORT = "MessageServicePort"; //NON-NLS
|
||||||
public static final String PROCESS_TIME_OUT_ENABLED = "ProcessTimeOutEnabled"; //NON-NLS
|
public static final String PROCESS_TIME_OUT_ENABLED = "ProcessTimeOutEnabled"; //NON-NLS
|
||||||
public static final String PROCESS_TIME_OUT_HOURS = "ProcessTimeOutHours"; //NON-NLS
|
public static final String PROCESS_TIME_OUT_HOURS = "ProcessTimeOutHours"; //NON-NLS
|
||||||
public static final String AGENCY_LOGO_IMAGE_PATH = "AgencyLogoImagePath"; //NON-NLS
|
|
||||||
private static final int DEFAULT_PROCESS_TIMEOUT_HR = 60;
|
private static final int DEFAULT_PROCESS_TIMEOUT_HR = 60;
|
||||||
private static final String DEFAULT_PORT_STRING = "61616";
|
private static final String DEFAULT_PORT_STRING = "61616";
|
||||||
private static final int DEFAULT_PORT_INT = 61616;
|
private static final int DEFAULT_PORT_INT = 61616;
|
||||||
|
@ -27,7 +27,7 @@ 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-2017. </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-2017. </div>
|
||||||
URL_ON_IMG=http://www.sleuthkit.org/
|
URL_ON_IMG=http://www.sleuthkit.org/
|
||||||
|
|
||||||
URL_ON_HELP=http://sleuthkit.org/autopsy/docs/user-docs/4.3/
|
URL_ON_HELP=http://sleuthkit.org/autopsy/docs/user-docs/4.4/
|
||||||
|
|
||||||
FILE_FOR_LOCAL_HELP=file:///
|
FILE_FOR_LOCAL_HELP=file:///
|
||||||
INDEX_FOR_LOCAL_HELP=/docs/index.html
|
INDEX_FOR_LOCAL_HELP=/docs/index.html
|
||||||
|
@ -138,7 +138,7 @@ public class ImageUtils {
|
|||||||
SUPPORTED_IMAGE_EXTENSIONS.addAll(Arrays.asList(ImageIO.getReaderFileSuffixes()));
|
SUPPORTED_IMAGE_EXTENSIONS.addAll(Arrays.asList(ImageIO.getReaderFileSuffixes()));
|
||||||
SUPPORTED_IMAGE_EXTENSIONS.add("tec"); // Add JFIF .tec files
|
SUPPORTED_IMAGE_EXTENSIONS.add("tec"); // Add JFIF .tec files
|
||||||
SUPPORTED_IMAGE_EXTENSIONS.removeIf("db"::equals); // remove db files
|
SUPPORTED_IMAGE_EXTENSIONS.removeIf("db"::equals); // remove db files
|
||||||
|
|
||||||
SUPPORTED_IMAGE_MIME_TYPES = new TreeSet<>(Arrays.asList(ImageIO.getReaderMIMETypes()));
|
SUPPORTED_IMAGE_MIME_TYPES = new TreeSet<>(Arrays.asList(ImageIO.getReaderMIMETypes()));
|
||||||
/*
|
/*
|
||||||
* special cases and variants that we support, but don't get registered
|
* special cases and variants that we support, but don't get registered
|
||||||
@ -213,7 +213,7 @@ public class ImageUtils {
|
|||||||
* @param file the AbstractFile to test
|
* @param file the AbstractFile to test
|
||||||
*
|
*
|
||||||
* @return true if the file is an image we can read and generate thumbnail
|
* @return true if the file is an image we can read and generate thumbnail
|
||||||
* for.
|
* for.
|
||||||
*/
|
*/
|
||||||
public static boolean isImageThumbnailSupported(AbstractFile file) {
|
public static boolean isImageThumbnailSupported(AbstractFile file) {
|
||||||
return isMediaThumbnailSupported(file, "image/", SUPPORTED_IMAGE_MIME_TYPES, SUPPORTED_IMAGE_EXTENSIONS) || hasImageFileHeader(file);//NON-NLS
|
return isMediaThumbnailSupported(file, "image/", SUPPORTED_IMAGE_MIME_TYPES, SUPPORTED_IMAGE_EXTENSIONS) || hasImageFileHeader(file);//NON-NLS
|
||||||
@ -239,17 +239,16 @@ public class ImageUtils {
|
|||||||
* VideoUtils both implement/extend some base interface/abstract class. That
|
* VideoUtils both implement/extend some base interface/abstract class. That
|
||||||
* would be the natural place to put this.
|
* would be the natural place to put this.
|
||||||
*
|
*
|
||||||
* @param file the AbstractFile to test
|
* @param file the AbstractFile to test
|
||||||
* @param mimeTypePrefix a MIME 'top-level type name' such as "image/",
|
* @param mimeTypePrefix a MIME 'top-level type name' such as "image/",
|
||||||
* including the "/". In addition to the list of
|
* including the "/". In addition to the list of supported MIME types, any
|
||||||
* supported MIME types, any type that starts with
|
* type that starts with this prefix will be regarded as supported
|
||||||
* this prefix will be regarded as supported
|
|
||||||
* @param supportedMimeTypes a collection of mimetypes that are supported
|
* @param supportedMimeTypes a collection of mimetypes that are supported
|
||||||
* @param supportedExtension a collection of extensions that are supported
|
* @param supportedExtension a collection of extensions that are supported
|
||||||
*
|
*
|
||||||
* @return true if a thumbnail can be generated for the given file based on
|
* @return true if a thumbnail can be generated for the given file based on
|
||||||
* the given MIME type prefix and lists of supported MIME types and
|
* the given MIME type prefix and lists of supported MIME types and
|
||||||
* extensions
|
* extensions
|
||||||
*/
|
*/
|
||||||
static boolean isMediaThumbnailSupported(AbstractFile file, String mimeTypePrefix, final Collection<String> supportedMimeTypes, final List<String> supportedExtension) {
|
static boolean isMediaThumbnailSupported(AbstractFile file, String mimeTypePrefix, final Collection<String> supportedMimeTypes, final List<String> supportedExtension) {
|
||||||
if (false == file.isFile() || file.getSize() <= 0) {
|
if (false == file.isFile() || file.getSize() <= 0) {
|
||||||
@ -283,7 +282,7 @@ public class ImageUtils {
|
|||||||
* @return a FileTypeDetector
|
* @return a FileTypeDetector
|
||||||
*
|
*
|
||||||
* @throws FileTypeDetectorInitException if initializing the
|
* @throws FileTypeDetectorInitException if initializing the
|
||||||
* FileTypeDetector failed.
|
* FileTypeDetector failed.
|
||||||
*/
|
*/
|
||||||
synchronized private static FileTypeDetector getFileTypeDetector() throws FileTypeDetector.FileTypeDetectorInitException {
|
synchronized private static FileTypeDetector getFileTypeDetector() throws FileTypeDetector.FileTypeDetectorInitException {
|
||||||
if (fileTypeDetector == null) {
|
if (fileTypeDetector == null) {
|
||||||
@ -296,11 +295,11 @@ public class ImageUtils {
|
|||||||
* Get a thumbnail of a specified size for the given image. Generates the
|
* Get a thumbnail of a specified size for the given image. Generates the
|
||||||
* thumbnail if it is not already cached.
|
* thumbnail if it is not already cached.
|
||||||
*
|
*
|
||||||
* @param content the content to generate a thumbnail for
|
* @param content the content to generate a thumbnail for
|
||||||
* @param iconSize the size (one side of a square) in pixels to generate
|
* @param iconSize the size (one side of a square) in pixels to generate
|
||||||
*
|
*
|
||||||
* @return A thumbnail for the given image or a default one if there was a
|
* @return A thumbnail for the given image or a default one if there was a
|
||||||
* problem making a thumbnail.
|
* problem making a thumbnail.
|
||||||
*/
|
*/
|
||||||
public static BufferedImage getThumbnail(Content content, int iconSize) {
|
public static BufferedImage getThumbnail(Content content, int iconSize) {
|
||||||
if (content instanceof AbstractFile) {
|
if (content instanceof AbstractFile) {
|
||||||
@ -339,7 +338,7 @@ public class ImageUtils {
|
|||||||
* @param file The AbstractFile to get a stream for.
|
* @param file The AbstractFile to get a stream for.
|
||||||
*
|
*
|
||||||
* @return A BufferedInputStream wrapped around a ReadContentStream for the
|
* @return A BufferedInputStream wrapped around a ReadContentStream for the
|
||||||
* given AbstractFile
|
* given AbstractFile
|
||||||
*/
|
*/
|
||||||
private static BufferedInputStream getBufferedReadContentStream(AbstractFile file) {
|
private static BufferedInputStream getBufferedReadContentStream(AbstractFile file) {
|
||||||
return new BufferedInputStream(new ReadContentInputStream(file));
|
return new BufferedInputStream(new ReadContentInputStream(file));
|
||||||
@ -349,11 +348,11 @@ public class ImageUtils {
|
|||||||
* Get a thumbnail of a specified size for the given image. Generates the
|
* Get a thumbnail of a specified size for the given image. Generates the
|
||||||
* thumbnail if it is not already cached.
|
* thumbnail if it is not already cached.
|
||||||
*
|
*
|
||||||
* @param content the content to generate a thumbnail for
|
* @param content the content to generate a thumbnail for
|
||||||
* @param iconSize the size (one side of a square) in pixels to generate
|
* @param iconSize the size (one side of a square) in pixels to generate
|
||||||
*
|
*
|
||||||
* @return File object for cached image. Is guaranteed to exist, as long as
|
* @return File object for cached image. Is guaranteed to exist, as long as
|
||||||
* there was not an error generating or saving the thumbnail.
|
* there was not an error generating or saving the thumbnail.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public static File getCachedThumbnailFile(Content content, int iconSize) {
|
public static File getCachedThumbnailFile(Content content, int iconSize) {
|
||||||
@ -368,8 +367,8 @@ public class ImageUtils {
|
|||||||
* @param fileID the fileID to get the cached thumbnail location for
|
* @param fileID the fileID to get the cached thumbnail location for
|
||||||
*
|
*
|
||||||
* @return A File object representing the location of the cached thumbnail.
|
* @return A File object representing the location of the cached thumbnail.
|
||||||
* This file may not actually exist(yet). Returns null if there was
|
* This file may not actually exist(yet). Returns null if there was any
|
||||||
* any problem getting the file, such as no case was open.
|
* problem getting the file, such as no case was open.
|
||||||
*/
|
*/
|
||||||
private static File getCachedThumbnailLocation(long fileID) {
|
private static File getCachedThumbnailLocation(long fileID) {
|
||||||
return cacheFileMap.computeIfAbsent(fileID, id -> {
|
return cacheFileMap.computeIfAbsent(fileID, id -> {
|
||||||
@ -427,7 +426,7 @@ public class ImageUtils {
|
|||||||
* @param file the AbstractFile to parse
|
* @param file the AbstractFile to parse
|
||||||
*
|
*
|
||||||
* @return Offset of first Start Of Image marker, or 0 if none found. This
|
* @return Offset of first Start Of Image marker, or 0 if none found. This
|
||||||
* will let ImageIO try to open it from offset 0.
|
* will let ImageIO try to open it from offset 0.
|
||||||
*/
|
*/
|
||||||
private static long getJfifStartOfImageOffset(AbstractFile file) {
|
private static long getJfifStartOfImageOffset(AbstractFile file) {
|
||||||
byte[] fileHeaderBuffer;
|
byte[] fileHeaderBuffer;
|
||||||
@ -507,7 +506,7 @@ public class ImageUtils {
|
|||||||
* @return the width in pixels
|
* @return the width in pixels
|
||||||
*
|
*
|
||||||
* @throws IOException If the file is not a supported image or the width
|
* @throws IOException If the file is not a supported image or the width
|
||||||
* could not be determined.
|
* could not be determined.
|
||||||
*/
|
*/
|
||||||
static public int getImageWidth(AbstractFile file) throws IOException {
|
static public int getImageWidth(AbstractFile file) throws IOException {
|
||||||
return getImageProperty(file,
|
return getImageProperty(file,
|
||||||
@ -524,7 +523,7 @@ public class ImageUtils {
|
|||||||
* @return the height in pixels
|
* @return the height in pixels
|
||||||
*
|
*
|
||||||
* @throws IOException If the file is not a supported image or the height
|
* @throws IOException If the file is not a supported image or the height
|
||||||
* could not be determined.
|
* could not be determined.
|
||||||
*/
|
*/
|
||||||
static public int getImageHeight(AbstractFile file) throws IOException {
|
static public int getImageHeight(AbstractFile file) throws IOException {
|
||||||
return getImageProperty(file,
|
return getImageProperty(file,
|
||||||
@ -537,8 +536,8 @@ public class ImageUtils {
|
|||||||
/**
|
/**
|
||||||
* Functional interface for methods that extract a property out of an
|
* Functional interface for methods that extract a property out of an
|
||||||
* ImageReader. Initially created to abstract over
|
* ImageReader. Initially created to abstract over
|
||||||
* {@link #getImageHeight(org.sleuthkit.datamodel.AbstractFile)} and
|
* getImageHeight(org.sleuthkit.datamodel.AbstractFile) and
|
||||||
* {@link #getImageWidth(org.sleuthkit.datamodel.AbstractFile)}
|
* getImageWidth(org.sleuthkit.datamodel.AbstractFile)
|
||||||
*
|
*
|
||||||
* @param <T> The type of the property.
|
* @param <T> The type of the property.
|
||||||
*/
|
*/
|
||||||
@ -553,18 +552,17 @@ public class ImageUtils {
|
|||||||
* public methods that pull particular (usually meta-)data out of a image
|
* public methods that pull particular (usually meta-)data out of a image
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
* @param file the file to extract the data from
|
* @param file the file to extract the data from
|
||||||
* @param errorTemplate a message template used to log errors. Should
|
* @param errorTemplate a message template used to log errors. Should take
|
||||||
* take one parameter: the file's unique path or
|
* one parameter: the file's unique path or name.
|
||||||
* name.
|
|
||||||
* @param propertyExtractor an implementation of {@link PropertyExtractor}
|
* @param propertyExtractor an implementation of {@link PropertyExtractor}
|
||||||
* used to retrieve the specific property.
|
* used to retrieve the specific property.
|
||||||
*
|
*
|
||||||
* @return the the value of the property extracted by the given
|
* @return the the value of the property extracted by the given
|
||||||
* propertyExtractor
|
* propertyExtractor
|
||||||
*
|
*
|
||||||
* @throws IOException if there was a problem reading the property from the
|
* @throws IOException if there was a problem reading the property from the
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
* @see PropertyExtractor
|
* @see PropertyExtractor
|
||||||
* @see #getImageHeight(org.sleuthkit.datamodel.AbstractFile)
|
* @see #getImageHeight(org.sleuthkit.datamodel.AbstractFile)
|
||||||
@ -608,8 +606,8 @@ public class ImageUtils {
|
|||||||
* but is not started automatically. Clients are responsible for running the
|
* but is not started automatically. Clients are responsible for running the
|
||||||
* task, monitoring its progress, and using its result.
|
* task, monitoring its progress, and using its result.
|
||||||
*
|
*
|
||||||
* @param file The file to create a thumbnail for.
|
* @param file The file to create a thumbnail for.
|
||||||
* @param iconSize The size of the thumbnail.
|
* @param iconSize The size of the thumbnail.
|
||||||
* @param defaultOnFailure Whether or not to default on failure.
|
* @param defaultOnFailure Whether or not to default on failure.
|
||||||
*
|
*
|
||||||
* @return a new Task that returns a thumbnail as its result.
|
* @return a new Task that returns a thumbnail as its result.
|
||||||
@ -978,10 +976,10 @@ public class ImageUtils {
|
|||||||
* @param iconSize
|
* @param iconSize
|
||||||
*
|
*
|
||||||
* @return a thumbnail for the given image or a default one if there was a
|
* @return a thumbnail for the given image or a default one if there was a
|
||||||
* problem making a thumbnail.
|
* problem making a thumbnail.
|
||||||
*
|
*
|
||||||
* @deprecated use {@link #getThumbnail(org.sleuthkit.datamodel.Content, int)
|
* @deprecated use getThumbnail(org.sleuthkit.datamodel.Content, int)
|
||||||
* } instead.
|
* instead.
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@ -997,10 +995,10 @@ public class ImageUtils {
|
|||||||
* @param iconSize
|
* @param iconSize
|
||||||
*
|
*
|
||||||
* @return File object for cached image. Is guaranteed to exist, as long as
|
* @return File object for cached image. Is guaranteed to exist, as long as
|
||||||
* there was not an error generating or saving the thumbnail.
|
* there was not an error generating or saving the thumbnail.
|
||||||
*
|
*
|
||||||
* @deprecated use {@link #getCachedThumbnailFile(org.sleuthkit.datamodel.Content, int)
|
* @deprecated use getCachedThumbnailFile(org.sleuthkit.datamodel.Content,
|
||||||
* } instead.
|
* int) instead.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
AutoUpdate-Show-In-Client: true
|
AutoUpdate-Show-In-Client: true
|
||||||
OpenIDE-Module: org.sleuthkit.autopsy.experimental
|
OpenIDE-Module: org.sleuthkit.autopsy.experimental/10
|
||||||
|
OpenIDE-Module-Implementation-Version: 2
|
||||||
OpenIDE-Module-Layer: org/sleuthkit/autopsy/experimental/autoingest/layer.xml
|
OpenIDE-Module-Layer: org/sleuthkit/autopsy/experimental/autoingest/layer.xml
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties
|
||||||
OpenIDE-Module-Specification-Version: 1.0
|
OpenIDE-Module-Specification-Version: 1.0
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
OpenIDE-Module: org.sleuthkit.autopsy.imagegallery/2
|
OpenIDE-Module: org.sleuthkit.autopsy.imagegallery/2
|
||||||
OpenIDE-Module-Implementation-Version: 2
|
OpenIDE-Module-Implementation-Version: 3
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/imagegallery/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/imagegallery/Bundle.properties
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ public final class OpenHelpAction implements ActionListener {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
try {
|
try {
|
||||||
Desktop.getDesktop().browse(URI.create("http://sleuthkit.org/autopsy/docs/user-docs/4.3/image_gallery_page.html")); //NON-NLS
|
Desktop.getDesktop().browse(URI.create("http://sleuthkit.org/autopsy/docs/user-docs/4.4/image_gallery_page.html")); //NON-NLS
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
Logger.getLogger(OpenHelpAction.class.getName()).log(Level.SEVERE, "failed to open help page", ex); //NON-NLS
|
Logger.getLogger(OpenHelpAction.class.getName()).log(Level.SEVERE, "failed to open help page", ex); //NON-NLS
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
AutoUpdate-Show-In-Client: true
|
AutoUpdate-Show-In-Client: true
|
||||||
OpenIDE-Module: org.sleuthkit.autopsy.keywordsearch/6
|
OpenIDE-Module: org.sleuthkit.autopsy.keywordsearch/6
|
||||||
OpenIDE-Module-Implementation-Version: 16
|
OpenIDE-Module-Implementation-Version: 17
|
||||||
OpenIDE-Module-Install: org/sleuthkit/autopsy/keywordsearch/Installer.class
|
OpenIDE-Module-Install: org/sleuthkit/autopsy/keywordsearch/Installer.class
|
||||||
OpenIDE-Module-Layer: org/sleuthkit/autopsy/keywordsearch/layer.xml
|
OpenIDE-Module-Layer: org/sleuthkit/autopsy/keywordsearch/layer.xml
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/keywordsearch/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/keywordsearch/Bundle.properties
|
||||||
|
@ -63,6 +63,24 @@
|
|||||||
<specification-version>10.7</specification-version>
|
<specification-version>10.7</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.sleuthkit.autopsy.corelibs</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<release-version>3</release-version>
|
||||||
|
<specification-version>1.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.sleuthkit.autopsy.keywordsearch</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<release-version>6</release-version>
|
||||||
|
<specification-version>6.3</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
</module-dependencies>
|
</module-dependencies>
|
||||||
<public-packages>
|
<public-packages>
|
||||||
<package>org.sleuthkit.autopsy.recentactivity</package>
|
<package>org.sleuthkit.autopsy.recentactivity</package>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
AutoUpdate-Show-In-Client: false
|
AutoUpdate-Show-In-Client: false
|
||||||
OpenIDE-Module: org.sleuthkit.autopsy.testing/3
|
OpenIDE-Module: org.sleuthkit.autopsy.testing/3
|
||||||
OpenIDE-Module-Implementation-Version: 9
|
OpenIDE-Module-Implementation-Version: 10
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/testing/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/testing/Bundle.properties
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#Updated by build script
|
#Updated by build script
|
||||||
#Tue, 21 Mar 2017 17:07:16 -0400
|
#Mon, 22 May 2017 15:46:42 -0400
|
||||||
LBL_splash_window_title=Starting Autopsy
|
LBL_splash_window_title=Starting Autopsy
|
||||||
SPLASH_HEIGHT=314
|
SPLASH_HEIGHT=314
|
||||||
SPLASH_WIDTH=538
|
SPLASH_WIDTH=538
|
||||||
@ -8,4 +8,4 @@ SplashRunningTextBounds=0,289,538,18
|
|||||||
SplashRunningTextColor=0x0
|
SplashRunningTextColor=0x0
|
||||||
SplashRunningTextFontSize=19
|
SplashRunningTextFontSize=19
|
||||||
|
|
||||||
currentVersion=Autopsy 4.3.0
|
currentVersion=Autopsy 4.4.0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#Updated by build script
|
#Updated by build script
|
||||||
#Tue, 21 Mar 2017 17:07:16 -0400
|
#Mon, 22 May 2017 15:46:42 -0400
|
||||||
CTL_MainWindow_Title=Autopsy 4.3.0
|
CTL_MainWindow_Title=Autopsy 4.4.0
|
||||||
CTL_MainWindow_Title_No_Project=Autopsy 4.3.0
|
CTL_MainWindow_Title_No_Project=Autopsy 4.4.0
|
||||||
|
@ -7,7 +7,7 @@ app.name=${branding.token}
|
|||||||
app.version=4.4.0
|
app.version=4.4.0
|
||||||
### build.type must be one of: DEVELOPMENT, RELEASE
|
### build.type must be one of: DEVELOPMENT, RELEASE
|
||||||
#build.type=RELEASE
|
#build.type=RELEASE
|
||||||
build.type=DEVELOPMENT
|
build.type=RELEASE
|
||||||
|
|
||||||
project.org.sleuthkit.autopsy.experimental=Experimental
|
project.org.sleuthkit.autopsy.experimental=Experimental
|
||||||
project.org.sleuthkit.autopsy.imagegallery=ImageGallery
|
project.org.sleuthkit.autopsy.imagegallery=ImageGallery
|
||||||
|
@ -5,7 +5,7 @@ your needs.
|
|||||||
See the developer guide for more details and how to use and load
|
See the developer guide for more details and how to use and load
|
||||||
the modules.
|
the modules.
|
||||||
|
|
||||||
http://sleuthkit.org/autopsy/docs/api-docs/4.3/index.html
|
http://sleuthkit.org/autopsy/docs/api-docs/4.4/index.html
|
||||||
|
|
||||||
Each module in this folder should have a brief description about what they
|
Each module in this folder should have a brief description about what they
|
||||||
can do.
|
can do.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user