mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 16:06:15 +00:00
Merge branch 'develop' into 6184-InconsistentCR
This commit is contained in:
commit
b1efdbae15
@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.commonpropertiessearch;
|
|||||||
|
|
||||||
import org.sleuthkit.autopsy.guiutils.DataSourceComboBoxModel;
|
import org.sleuthkit.autopsy.guiutils.DataSourceComboBoxModel;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -119,6 +120,13 @@ public final class InterCasePanel extends javax.swing.JPanel {
|
|||||||
this.correlationTypeFilters = new HashMap<>();
|
this.correlationTypeFilters = new HashMap<>();
|
||||||
try {
|
try {
|
||||||
List<CorrelationAttributeInstance.Type> types = CentralRepository.getInstance().getDefinedCorrelationTypes();
|
List<CorrelationAttributeInstance.Type> types = CentralRepository.getInstance().getDefinedCorrelationTypes();
|
||||||
|
Collections.sort(types, new Comparator<CorrelationAttributeInstance.Type>() {
|
||||||
|
//The types should be sorted so that the File type is the first item in the combo box.
|
||||||
|
@Override
|
||||||
|
public int compare(CorrelationAttributeInstance.Type type1, CorrelationAttributeInstance.Type type2) {
|
||||||
|
return Integer.compare(type1.getId(), type2.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
for (CorrelationAttributeInstance.Type type : types) {
|
for (CorrelationAttributeInstance.Type type : types) {
|
||||||
correlationTypeFilters.put(type.getDisplayName(), type);
|
correlationTypeFilters.put(type.getDisplayName(), type);
|
||||||
this.correlationTypeComboBox.addItem(type.getDisplayName());
|
this.correlationTypeComboBox.addItem(type.getDisplayName());
|
||||||
@ -329,8 +337,8 @@ public final class InterCasePanel extends javax.swing.JPanel {
|
|||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the map of cases which was used to populate the combo box on
|
* Get the map of cases which was used to populate the combo box on this
|
||||||
* this panel.
|
* panel.
|
||||||
*
|
*
|
||||||
* @return an unmodifiable copy of the map of cases
|
* @return an unmodifiable copy of the map of cases
|
||||||
*/
|
*/
|
||||||
@ -339,8 +347,8 @@ public final class InterCasePanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the datamodel for the combo box which displays the cases in
|
* Set the datamodel for the combo box which displays the cases in the
|
||||||
* the central repository
|
* central repository
|
||||||
*
|
*
|
||||||
* @param dataSourceComboBoxModel the DataSourceComboBoxModel to use
|
* @param dataSourceComboBoxModel the DataSourceComboBoxModel to use
|
||||||
*/
|
*/
|
||||||
|
@ -23,6 +23,10 @@ import com.google.common.cache.CacheBuilder;
|
|||||||
import com.google.common.io.Files;
|
import com.google.common.io.Files;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
@ -79,6 +83,9 @@ import org.sleuthkit.autopsy.textextractors.TextExtractor;
|
|||||||
import org.sleuthkit.autopsy.textextractors.TextExtractorFactory;
|
import org.sleuthkit.autopsy.textextractors.TextExtractorFactory;
|
||||||
import org.sleuthkit.autopsy.textsummarizer.TextSummarizer;
|
import org.sleuthkit.autopsy.textsummarizer.TextSummarizer;
|
||||||
import org.sleuthkit.autopsy.textsummarizer.TextSummary;
|
import org.sleuthkit.autopsy.textsummarizer.TextSummary;
|
||||||
|
import org.sleuthkit.autopsy.texttranslation.NoServiceProviderException;
|
||||||
|
import org.sleuthkit.autopsy.texttranslation.TextTranslationService;
|
||||||
|
import org.sleuthkit.autopsy.texttranslation.TranslationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main class to perform the file search.
|
* Main class to perform the file search.
|
||||||
@ -304,9 +311,113 @@ class FileSearch {
|
|||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
logger.log(Level.WARNING, "Error getting children for file: " + file.getId(), ex);
|
logger.log(Level.WARNING, "Error getting children for file: " + file.getId(), ex);
|
||||||
}
|
}
|
||||||
image = image == null ? image : image.getScaledInstance(ImageUtils.ICON_SIZE_MEDIUM, ImageUtils.ICON_SIZE_MEDIUM,
|
image = image == null ? image : image.getScaledInstance(ImageUtils.ICON_SIZE_MEDIUM, ImageUtils.ICON_SIZE_MEDIUM,
|
||||||
Image.SCALE_SMOOTH);
|
Image.SCALE_SMOOTH);
|
||||||
return new TextSummary(getFirstLines(file), image, countOfImages);
|
String summaryText = null;
|
||||||
|
if (file.getMd5Hash() != null) {
|
||||||
|
try {
|
||||||
|
summaryText = getSavedSummary(Paths.get(Case.getCurrentCaseThrows().getCacheDirectory(), "summaries", file.getMd5Hash() + "-default-" + PREVIEW_SIZE + "-translated.txt").toString());
|
||||||
|
} catch (NoCurrentCaseException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to retrieve saved summary. No case is open.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(summaryText)) {
|
||||||
|
String firstLines = getFirstLines(file);
|
||||||
|
String translatedFirstLines = getTranslatedVersion(firstLines);
|
||||||
|
if (!StringUtils.isBlank(translatedFirstLines)) {
|
||||||
|
summaryText = translatedFirstLines;
|
||||||
|
if (file.getMd5Hash() != null) {
|
||||||
|
try {
|
||||||
|
saveSummary(summaryText, Paths.get(Case.getCurrentCaseThrows().getCacheDirectory(), "summaries", file.getMd5Hash() + "-default-" + PREVIEW_SIZE + "-translated.txt").toString());
|
||||||
|
} catch (NoCurrentCaseException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to save translated summary. No case is open.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
summaryText = firstLines;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new TextSummary(summaryText, image, countOfImages);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide an English version of the specified String if it is not English,
|
||||||
|
* translation is enabled, and it can be translated.
|
||||||
|
*
|
||||||
|
* @param documentString The String to provide an English version of.
|
||||||
|
*
|
||||||
|
* @return The English version of the provided String, or null if no
|
||||||
|
* translation occurred.
|
||||||
|
*/
|
||||||
|
private static String getTranslatedVersion(String documentString) {
|
||||||
|
try {
|
||||||
|
TextTranslationService translatorInstance = TextTranslationService.getInstance();
|
||||||
|
if (translatorInstance.hasProvider()) {
|
||||||
|
String translatedResult = translatorInstance.translate(documentString);
|
||||||
|
if (translatedResult.isEmpty() == false) {
|
||||||
|
return translatedResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (NoServiceProviderException | TranslationException ex) {
|
||||||
|
logger.log(Level.INFO, "Error translating string for summary", ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find and load a saved summary from the case folder for the specified
|
||||||
|
* file.
|
||||||
|
*
|
||||||
|
* @param summarySavePath The full path for the saved summary file.
|
||||||
|
*
|
||||||
|
* @return The summary found given the specified path, null if no summary
|
||||||
|
* was found.
|
||||||
|
*/
|
||||||
|
private static String getSavedSummary(String summarySavePath) {
|
||||||
|
if (summarySavePath == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
File savedFile = new File(summarySavePath);
|
||||||
|
if (savedFile.exists()) {
|
||||||
|
try (BufferedReader bReader = new BufferedReader(new FileReader(savedFile))) {
|
||||||
|
// pass the path to the file as a parameter
|
||||||
|
StringBuilder sBuilder = new StringBuilder();
|
||||||
|
String sCurrentLine = bReader.readLine();
|
||||||
|
while (sCurrentLine != null) {
|
||||||
|
sBuilder.append(sCurrentLine).append('\n');
|
||||||
|
sCurrentLine = bReader.readLine();
|
||||||
|
}
|
||||||
|
return sBuilder.toString();
|
||||||
|
} catch (IOException ingored) {
|
||||||
|
//summary file may not exist or may be incomplete in which case return null so a summary can be generated
|
||||||
|
return null; //no saved summary was able to be found
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try { //if the file didn't exist make sure the parent directories exist before we move on to creating a summary
|
||||||
|
Files.createParentDirs(savedFile);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to create summaries directory in case folder for file at: " + summarySavePath, ex);
|
||||||
|
}
|
||||||
|
return null; //no saved summary was able to be found
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a summary at the specified location.
|
||||||
|
*
|
||||||
|
* @param summary The text of the summary being saved.
|
||||||
|
* @param summarySavePath The full path for the saved summary file.
|
||||||
|
*/
|
||||||
|
private static void saveSummary(String summary, String summarySavePath) {
|
||||||
|
if (summarySavePath == null) {
|
||||||
|
return; //can't save a summary if we don't have a path
|
||||||
|
}
|
||||||
|
try (FileWriter myWriter = new FileWriter(summarySavePath)) {
|
||||||
|
myWriter.write(summary);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to save summary at: " + summarySavePath, ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2019 Basis Technology Corp.
|
* Copyright 2019-2020 Basis Technology Corp.
|
||||||
* contact: carrier <at> sleuthkit <dot> org
|
* contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -25,9 +25,9 @@ import java.util.Map;
|
|||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoWaypointsUtil;
|
import org.sleuthkit.datamodel.blackboardutils.attributes.BlackboardJsonAttrUtil;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoWaypointsUtil.GeoWaypointList.GeoWaypoint;
|
import org.sleuthkit.datamodel.blackboardutils.attributes.BlackboardJsonAttrUtil.InvalidJsonException;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoWaypointsUtil.GeoWaypointList;
|
import org.sleuthkit.datamodel.blackboardutils.attributes.GeoWaypoints;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Route represents a TSK_GPS_ROUTE artifact which has a start and end point
|
* A Route represents a TSK_GPS_ROUTE artifact which has a start and end point
|
||||||
@ -43,8 +43,6 @@ public class Route extends GeoPath {
|
|||||||
// constructor will take care of creating an unmodifiable List
|
// constructor will take care of creating an unmodifiable List
|
||||||
private final List<Waypoint.Property> propertiesList;
|
private final List<Waypoint.Property> propertiesList;
|
||||||
|
|
||||||
private static final TskGeoWaypointsUtil attributeUtil = new TskGeoWaypointsUtil();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a route for the given artifact.
|
* Construct a route for the given artifact.
|
||||||
*
|
*
|
||||||
@ -119,9 +117,13 @@ public class Route extends GeoPath {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (attribute != null) {
|
if (attribute != null) {
|
||||||
GeoWaypointList waypoints = attributeUtil.fromAttribute(attribute);
|
GeoWaypoints waypoints;
|
||||||
|
try {
|
||||||
for(GeoWaypoint waypoint: waypoints) {
|
waypoints = BlackboardJsonAttrUtil.fromAttribute(attribute, GeoWaypoints.class);
|
||||||
|
} catch (InvalidJsonException ex) {
|
||||||
|
throw new GeoLocationDataException(String.format("Unable to parse waypoints in TSK_GEO_WAYPOINTS attribute (artifact object ID =%d)", artifact.getId()), ex);
|
||||||
|
}
|
||||||
|
for (GeoWaypoints.Waypoint waypoint : waypoints) {
|
||||||
addToPath(new Waypoint(artifact, label, null, waypoint.getLatitude(), waypoint.getLongitude(), waypoint.getAltitude(), null, attributeMap, this));
|
addToPath(new Waypoint(artifact, label, null, waypoint.getLatitude(), waypoint.getLongitude(), waypoint.getAltitude(), null, attributeMap, this));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
*
|
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2020 Basis Technology Corp.
|
* Copyright 2020 Basis Technology Corp.
|
||||||
@ -26,20 +25,18 @@ import java.util.Map;
|
|||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoTrackpointsUtil;
|
import org.sleuthkit.datamodel.blackboardutils.attributes.BlackboardJsonAttrUtil;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoTrackpointsUtil.GeoTrackPointList;
|
import org.sleuthkit.datamodel.blackboardutils.attributes.BlackboardJsonAttrUtil.InvalidJsonException;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoTrackpointsUtil.GeoTrackPointList.GeoTrackPoint;
|
import org.sleuthkit.datamodel.blackboardutils.attributes.GeoTrackPoints;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A GPS track with which wraps the TSK_GPS_TRACK artifact.
|
* A GPS track with which wraps the TSK_GPS_TRACK artifact.
|
||||||
*/
|
*/
|
||||||
public final class Track extends GeoPath{
|
public final class Track extends GeoPath {
|
||||||
|
|
||||||
private final Long startTimestamp;
|
private final Long startTimestamp;
|
||||||
private final Long endTimeStamp;
|
private final Long endTimeStamp;
|
||||||
|
|
||||||
private static final TskGeoTrackpointsUtil attributeUtil = new TskGeoTrackpointsUtil();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new Track for the given artifact.
|
* Construct a new Track for the given artifact.
|
||||||
*
|
*
|
||||||
@ -54,15 +51,15 @@ public final class Track extends GeoPath{
|
|||||||
/**
|
/**
|
||||||
* Construct a Track for the given artifact and attributeMap.
|
* Construct a Track for the given artifact and attributeMap.
|
||||||
*
|
*
|
||||||
* @param artifact TSK_GPD_TRACK artifact
|
* @param artifact TSK_GPD_TRACK artifact
|
||||||
* @param attributeMap Map of the artifact attributes
|
* @param attributeMap Map of the artifact attributes
|
||||||
*
|
*
|
||||||
* @throws GeoLocationDataException
|
* @throws GeoLocationDataException
|
||||||
*/
|
*/
|
||||||
private Track(BlackboardArtifact artifact, Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) throws GeoLocationDataException {
|
private Track(BlackboardArtifact artifact, Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) throws GeoLocationDataException {
|
||||||
super(artifact, getTrackName(attributeMap));
|
super(artifact, getTrackName(attributeMap));
|
||||||
|
|
||||||
GeoTrackPointList points = getPointsList(attributeMap);
|
GeoTrackPoints points = getPointsList(attributeMap);
|
||||||
buildPath(points, artifact);
|
buildPath(points, artifact);
|
||||||
|
|
||||||
startTimestamp = points.getStartTime();
|
startTimestamp = points.getStartTime();
|
||||||
@ -72,8 +69,8 @@ public final class Track extends GeoPath{
|
|||||||
/**
|
/**
|
||||||
* Returns the start time of this track.
|
* Returns the start time of this track.
|
||||||
*
|
*
|
||||||
* @return Earliest time, or null if none was available.
|
* @return Earliest time, or null if none was available. (seconds from java
|
||||||
* (seconds from java epoch)
|
* epoch)
|
||||||
*/
|
*/
|
||||||
public Long getStartTime() {
|
public Long getStartTime() {
|
||||||
return startTimestamp;
|
return startTimestamp;
|
||||||
@ -82,19 +79,19 @@ public final class Track extends GeoPath{
|
|||||||
/**
|
/**
|
||||||
* Returns the end time of this track.
|
* Returns the end time of this track.
|
||||||
*
|
*
|
||||||
* @return Earliest timestamp, or null if none was available.
|
* @return Earliest timestamp, or null if none was available. (seconds from
|
||||||
* (seconds from java epoch)
|
* java epoch)
|
||||||
*/
|
*/
|
||||||
public Long getEndTime() {
|
public Long getEndTime() {
|
||||||
return endTimeStamp;
|
return endTimeStamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the name of the track from the attributeMap.
|
* Return the name of the track from the attributeMap. Track name is stored
|
||||||
* Track name is stored in the attribute TSK_NAME
|
* in the attribute TSK_NAME
|
||||||
*
|
*
|
||||||
* @param attributeMap
|
* @param attributeMap
|
||||||
|
*
|
||||||
* @return Track name or empty string if none was available.
|
* @return Track name or empty string if none was available.
|
||||||
*/
|
*/
|
||||||
private static String getTrackName(Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) {
|
private static String getTrackName(Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) {
|
||||||
@ -106,8 +103,7 @@ public final class Track extends GeoPath{
|
|||||||
/**
|
/**
|
||||||
* Create the list of TrackWaypoints from the GeoTrackPoint list.
|
* Create the list of TrackWaypoints from the GeoTrackPoint list.
|
||||||
*
|
*
|
||||||
* @param points List of GeoTrackPoints
|
* @param points GeoTrackPoints object.
|
||||||
*
|
|
||||||
* @param artifact The artifact to which these points belong
|
* @param artifact The artifact to which these points belong
|
||||||
*
|
*
|
||||||
* @throws GeoLocationDataException
|
* @throws GeoLocationDataException
|
||||||
@ -116,27 +112,31 @@ public final class Track extends GeoPath{
|
|||||||
"# {0} - track name",
|
"# {0} - track name",
|
||||||
"GEOTrack_point_label_header=Trackpoint for track: {0}"
|
"GEOTrack_point_label_header=Trackpoint for track: {0}"
|
||||||
})
|
})
|
||||||
private void buildPath(GeoTrackPointList points, BlackboardArtifact artifact)
|
private void buildPath(GeoTrackPoints points, BlackboardArtifact artifact) throws GeoLocationDataException {
|
||||||
throws GeoLocationDataException {
|
for (GeoTrackPoints.TrackPoint point : points) {
|
||||||
for(GeoTrackPoint point: points) {
|
|
||||||
addToPath(new TrackWaypoint(artifact, Bundle.GEOTrack_point_label_header(getLabel()), point));
|
addToPath(new TrackWaypoint(artifact, Bundle.GEOTrack_point_label_header(getLabel()), point));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of GeoTrackPoints from the attributeMap. Creates the
|
* Returns the list of GeoTrackPoints from the attributeMap. Creates the
|
||||||
* GeoTrackPoint list from the TSK_GEO_TRACKPOINTS attribute.
|
* GeoTrackPoint list from the TSK_GEO_TRACKPOINTS attribute.
|
||||||
*
|
*
|
||||||
* @param attributeMap Map of artifact attributes.
|
* @param attributeMap Map of artifact attributes.
|
||||||
*
|
*
|
||||||
* @return GeoTrackPoint list empty list if the attribute was not found.
|
* @return GeoTrackPoint list empty list if the attribute was not found.
|
||||||
|
*
|
||||||
|
* @throws GeoLocationDataException
|
||||||
*/
|
*/
|
||||||
private GeoTrackPointList getPointsList(Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) {
|
private GeoTrackPoints getPointsList(Map<BlackboardAttribute.ATTRIBUTE_TYPE, BlackboardAttribute> attributeMap) throws GeoLocationDataException {
|
||||||
BlackboardAttribute attribute = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_TRACKPOINTS);
|
BlackboardAttribute attribute = attributeMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_GEO_TRACKPOINTS);
|
||||||
if (attribute != null) {
|
if (attribute != null) {
|
||||||
return attributeUtil.fromAttribute(attribute);
|
try {
|
||||||
|
return BlackboardJsonAttrUtil.fromAttribute(attribute, GeoTrackPoints.class);
|
||||||
|
} catch (InvalidJsonException ex) {
|
||||||
|
throw new GeoLocationDataException("Unable to parse track points in TSK_GEO_TRACKPOINTS attribute", ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,15 +150,15 @@ public final class Track extends GeoPath{
|
|||||||
/**
|
/**
|
||||||
* Construct a TrackWaypoint.
|
* Construct a TrackWaypoint.
|
||||||
*
|
*
|
||||||
* @param artifact the artifact to which this waypoint belongs
|
* @param artifact the artifact to which this waypoint belongs
|
||||||
*
|
*
|
||||||
* @param pointLabel the label for the waypoint
|
* @param pointLabel the label for the waypoint
|
||||||
*
|
*
|
||||||
* @param point GeoTrackPoint
|
* @param point GeoTrackPoint
|
||||||
*
|
*
|
||||||
* @throws GeoLocationDataException
|
* @throws GeoLocationDataException
|
||||||
*/
|
*/
|
||||||
TrackWaypoint(BlackboardArtifact artifact, String pointLabel, GeoTrackPoint point) throws GeoLocationDataException {
|
TrackWaypoint(BlackboardArtifact artifact, String pointLabel, GeoTrackPoints.TrackPoint point) throws GeoLocationDataException {
|
||||||
super(artifact, pointLabel,
|
super(artifact, pointLabel,
|
||||||
point.getTimeStamp(),
|
point.getTimeStamp(),
|
||||||
point.getLatitude(),
|
point.getLatitude(),
|
||||||
@ -172,8 +172,8 @@ public final class Track extends GeoPath{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overloaded to return a property list that is generated from
|
* Overloaded to return a property list that is generated from the
|
||||||
* the GeoTrackPoint instead of an artifact.
|
* GeoTrackPoint instead of an artifact.
|
||||||
*
|
*
|
||||||
* @return unmodifiable list of Waypoint.Property
|
* @return unmodifiable list of Waypoint.Property
|
||||||
*/
|
*/
|
||||||
@ -193,7 +193,7 @@ public final class Track extends GeoPath{
|
|||||||
"Track_distanceTraveled_displayName=Distance traveled",
|
"Track_distanceTraveled_displayName=Distance traveled",
|
||||||
"Track_distanceFromHome_displayName=Distance from home point"
|
"Track_distanceFromHome_displayName=Distance from home point"
|
||||||
})
|
})
|
||||||
private List<Waypoint.Property> createPropertyList(GeoTrackPoint point) {
|
private List<Waypoint.Property> createPropertyList(GeoTrackPoints.TrackPoint point) {
|
||||||
List<Waypoint.Property> list = new ArrayList<>();
|
List<Waypoint.Property> list = new ArrayList<>();
|
||||||
|
|
||||||
Long timestamp = point.getTimeStamp();
|
Long timestamp = point.getTimeStamp();
|
||||||
|
@ -41,11 +41,11 @@ import org.sleuthkit.autopsy.ingest.DataSourceIngestModuleProgress;
|
|||||||
import org.sleuthkit.autopsy.ingest.IngestJobContext;
|
import org.sleuthkit.autopsy.ingest.IngestJobContext;
|
||||||
import org.sleuthkit.datamodel.AbstractFile;
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.Content;
|
import org.sleuthkit.datamodel.Content;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoTrackpointsUtil.GeoTrackPointList.GeoTrackPoint;
|
|
||||||
import org.sleuthkit.datamodel.blackboardutils.GeoArtifactsHelper;
|
import org.sleuthkit.datamodel.blackboardutils.GeoArtifactsHelper;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
import org.sleuthkit.datamodel.Blackboard.BlackboardException;
|
import org.sleuthkit.datamodel.Blackboard.BlackboardException;
|
||||||
import org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoTrackpointsUtil.GeoTrackPointList;
|
import org.sleuthkit.datamodel.blackboardutils.attributes.GeoTrackPoints;
|
||||||
|
import org.sleuthkit.datamodel.blackboardutils.attributes.GeoTrackPoints.TrackPoint;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract drone position data from DJI Phantom drones.
|
* Extract drone position data from DJI Phantom drones.
|
||||||
@ -111,7 +111,7 @@ final class DATExtractor extends DroneExtractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Process the csv file
|
// Process the csv file
|
||||||
GeoTrackPointList trackPoints = processCSVFile(context, DATFile, csvFilePath);
|
GeoTrackPoints trackPoints = processCSVFile(context, DATFile, csvFilePath);
|
||||||
|
|
||||||
if (trackPoints != null && !trackPoints.isEmpty()) {
|
if (trackPoints != null && !trackPoints.isEmpty()) {
|
||||||
(new GeoArtifactsHelper(getSleuthkitCase(), getName(), "DatCon", DATFile)).addTrack(DATFile.getName(), trackPoints, null);
|
(new GeoArtifactsHelper(getSleuthkitCase(), getName(), "DatCon", DATFile)).addTrack(DATFile.getName(), trackPoints, null);
|
||||||
@ -188,8 +188,8 @@ final class DATExtractor extends DroneExtractor {
|
|||||||
*
|
*
|
||||||
* @throws DroneIngestException
|
* @throws DroneIngestException
|
||||||
*/
|
*/
|
||||||
private GeoTrackPointList processCSVFile(IngestJobContext context, AbstractFile DATFile, String csvFilePath) throws DroneIngestException {
|
private GeoTrackPoints processCSVFile(IngestJobContext context, AbstractFile DATFile, String csvFilePath) throws DroneIngestException {
|
||||||
GeoTrackPointList trackPoints = new GeoTrackPointList();
|
GeoTrackPoints trackPoints = new GeoTrackPoints();
|
||||||
try (BufferedReader reader = new BufferedReader(new FileReader(new File(csvFilePath)))) {
|
try (BufferedReader reader = new BufferedReader(new FileReader(new File(csvFilePath)))) {
|
||||||
// First read in the header line and process
|
// First read in the header line and process
|
||||||
String line = reader.readLine();
|
String line = reader.readLine();
|
||||||
@ -201,7 +201,7 @@ final class DATExtractor extends DroneExtractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String[] values = line.split(","); //NON-NLS
|
String[] values = line.split(","); //NON-NLS
|
||||||
GeoTrackPoint point = createTrackPoint(headerMap, values);
|
TrackPoint point = createTrackPoint(headerMap, values);
|
||||||
if (point != null) {
|
if (point != null) {
|
||||||
trackPoints.addPoint(point);
|
trackPoints.addPoint(point);
|
||||||
}
|
}
|
||||||
@ -246,7 +246,7 @@ final class DATExtractor extends DroneExtractor {
|
|||||||
*
|
*
|
||||||
* @throws DroneIngestException
|
* @throws DroneIngestException
|
||||||
*/
|
*/
|
||||||
private GeoTrackPoint createTrackPoint(Map<String, Integer> columnLookup, String[] values) throws DroneIngestException {
|
private TrackPoint createTrackPoint(Map<String, Integer> columnLookup, String[] values) throws DroneIngestException {
|
||||||
|
|
||||||
Double latitude = getDoubleValue(columnLookup.get(HEADER_LAT), values);
|
Double latitude = getDoubleValue(columnLookup.get(HEADER_LAT), values);
|
||||||
Double longitude = getDoubleValue(columnLookup.get(HEADER_LONG), values);
|
Double longitude = getDoubleValue(columnLookup.get(HEADER_LONG), values);
|
||||||
@ -256,7 +256,7 @@ final class DATExtractor extends DroneExtractor {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new GeoTrackPoint(latitude,
|
return new TrackPoint(latitude,
|
||||||
longitude,
|
longitude,
|
||||||
getDoubleValue(columnLookup.get(HEADER_ALTITUDE), values),
|
getDoubleValue(columnLookup.get(HEADER_ALTITUDE), values),
|
||||||
null,
|
null,
|
||||||
|
@ -52,6 +52,7 @@ import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.CentralRepoHashS
|
|||||||
import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.HashDb.KnownFilesType;
|
import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.HashDb.KnownFilesType;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.HashDb;
|
import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.HashDb;
|
||||||
|
import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.SetEvt;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -94,6 +95,17 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
HashDbManager.getInstance().addPropertyChangeListener(new PropertyChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
|
String propName = evt.getPropertyName();
|
||||||
|
if(propName.equals(SetEvt.DB_ADDED.toString()) ||
|
||||||
|
propName.equals(SetEvt.DB_DELETED.toString())) {
|
||||||
|
hashSetTableModel.refreshModel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@NbBundle.Messages({"HashLookupSettingsPanel.Title=Global Hash Lookup Settings"})
|
@NbBundle.Messages({"HashLookupSettingsPanel.Title=Global Hash Lookup Settings"})
|
||||||
|
@ -37,12 +37,10 @@ from org.sleuthkit.datamodel import BlackboardArtifact
|
|||||||
from org.sleuthkit.datamodel import BlackboardAttribute
|
from org.sleuthkit.datamodel import BlackboardAttribute
|
||||||
from org.sleuthkit.datamodel import TskCoreException
|
from org.sleuthkit.datamodel import TskCoreException
|
||||||
from org.sleuthkit.datamodel.blackboardutils import GeoArtifactsHelper
|
from org.sleuthkit.datamodel.blackboardutils import GeoArtifactsHelper
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes import TskGeoWaypointsUtil
|
from org.sleuthkit.datamodel.blackboardutils.attributes import GeoWaypoints
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoWaypointsUtil import GeoWaypointList
|
from org.sleuthkit.datamodel.blackboardutils.attributes.GeoWaypoints import Waypoint
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoWaypointsUtil.GeoWaypointList import GeoWaypoint
|
from org.sleuthkit.datamodel.blackboardutils.attributes import GeoTrackPoints
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes import TskGeoTrackpointsUtil
|
from org.sleuthkit.datamodel.blackboardutils.attributes.GeoTrackPoints import TrackPoint
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoTrackpointsUtil import GeoTrackPointList
|
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoTrackpointsUtil.GeoTrackPointList import GeoTrackPoint
|
|
||||||
from org.sleuthkit.autopsy.datamodel import ContentUtils
|
from org.sleuthkit.autopsy.datamodel import ContentUtils
|
||||||
from org.sleuthkit.autopsy.ingest import IngestModule
|
from org.sleuthkit.autopsy.ingest import IngestModule
|
||||||
from org.sleuthkit.autopsy.ingest.IngestModule import IngestModuleException
|
from org.sleuthkit.autopsy.ingest.IngestModule import IngestModuleException
|
||||||
@ -166,7 +164,7 @@ class GPXParserDataSourceIngestModule(DataSourceIngestModule):
|
|||||||
if self.writeDebugMsgs: self.log(Level.INFO, "Processing tracks from " + file.getUniquePath() + " (objID = " + str(file.getId()) + ")")
|
if self.writeDebugMsgs: self.log(Level.INFO, "Processing tracks from " + file.getUniquePath() + " (objID = " + str(file.getId()) + ")")
|
||||||
for track in gpx.tracks:
|
for track in gpx.tracks:
|
||||||
for segment in track.segments:
|
for segment in track.segments:
|
||||||
geoPointList = TskGeoTrackpointsUtil.GeoTrackPointList()
|
geoPointList = GeoTrackPoints()
|
||||||
for point in segment.points:
|
for point in segment.points:
|
||||||
|
|
||||||
elevation = 0
|
elevation = 0
|
||||||
@ -180,7 +178,7 @@ class GPXParserDataSourceIngestModule(DataSourceIngestModule):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.log(Level.WARNING, "Error getting track timestamp from " + file.getUniquePath() + " (objID = " + str(file.getId()) + "):" + str(e))
|
self.log(Level.WARNING, "Error getting track timestamp from " + file.getUniquePath() + " (objID = " + str(file.getId()) + "):" + str(e))
|
||||||
|
|
||||||
geoPointList.addPoint(GeoTrackPoint(point.latitude, point.longitude, elevation, None, 0, 0, 0, timeStamp))
|
geoPointList.addPoint(TrackPoint(point.latitude, point.longitude, elevation, None, 0, 0, 0, timeStamp))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
geoArtifactHelper.addTrack("Track", geoPointList, None)
|
geoArtifactHelper.addTrack("Track", geoPointList, None)
|
||||||
@ -213,10 +211,10 @@ class GPXParserDataSourceIngestModule(DataSourceIngestModule):
|
|||||||
if self.writeDebugMsgs: self.log(Level.INFO, "Processing routes from " + file.getUniquePath() + " (objID = " + str(file.getId()) + ")")
|
if self.writeDebugMsgs: self.log(Level.INFO, "Processing routes from " + file.getUniquePath() + " (objID = " + str(file.getId()) + ")")
|
||||||
for route in gpx.routes:
|
for route in gpx.routes:
|
||||||
|
|
||||||
geoWaypointList = TskGeoWaypointsUtil.GeoWaypointList()
|
geoWaypoints = GeoWaypoints()
|
||||||
|
|
||||||
for point in route.points:
|
for point in route.points:
|
||||||
geoWaypointList.addPoint(GeoWaypoint(point.latitude, point.longitude, point.elevation, point.name))
|
geoWaypointList.addPoint(Waypoint(point.latitude, point.longitude, point.elevation, point.name))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
geoArtifactHelper.addRoute(None, None, geoWaypointList, None)
|
geoArtifactHelper.addRoute(None, None, geoWaypointList, None)
|
||||||
|
@ -43,8 +43,8 @@ from org.sleuthkit.datamodel import Content
|
|||||||
from org.sleuthkit.datamodel import TskCoreException
|
from org.sleuthkit.datamodel import TskCoreException
|
||||||
from org.sleuthkit.datamodel.Blackboard import BlackboardException
|
from org.sleuthkit.datamodel.Blackboard import BlackboardException
|
||||||
from org.sleuthkit.datamodel.blackboardutils import GeoArtifactsHelper
|
from org.sleuthkit.datamodel.blackboardutils import GeoArtifactsHelper
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoWaypointsUtil import GeoWaypointList
|
from org.sleuthkit.datamodel.blackboardutils.attributes import GeoWaypoints
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes.TskGeoWaypointsUtil.GeoWaypointList import GeoWaypoint
|
from org.sleuthkit.datamodel.blackboardutils.attributes.GeoWaypoints import Waypoint
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
import general
|
import general
|
||||||
@ -117,9 +117,9 @@ class GoogleMapLocationAnalyzer(general.AndroidComponentAnalyzer):
|
|||||||
source_lat = GoogleMapLocationAnalyzer.convertGeo(resultSet.getString("source_lat"))
|
source_lat = GoogleMapLocationAnalyzer.convertGeo(resultSet.getString("source_lat"))
|
||||||
source_lng = GoogleMapLocationAnalyzer.convertGeo(resultSet.getString("source_lng"))
|
source_lng = GoogleMapLocationAnalyzer.convertGeo(resultSet.getString("source_lng"))
|
||||||
|
|
||||||
waypointlist = GeoWaypointList()
|
waypointlist = GeoWaypoints()
|
||||||
waypointlist.addPoint(GeoWaypoint(source_lat, source_lng, None, None))
|
waypointlist.addPoint(Waypoint(source_lat, source_lng, None, None))
|
||||||
waypointlist.addPoint(GeoWaypoint(dest_lat, dest_lng, None, dest_address))
|
waypointlist.addPoint(Waypoint(dest_lat, dest_lng, None, dest_address))
|
||||||
|
|
||||||
artifactHelper.addRoute(dest_title, time, waypointlist, None)
|
artifactHelper.addRoute(dest_title, time, waypointlist, None)
|
||||||
|
|
||||||
|
@ -45,7 +45,8 @@ from org.sleuthkit.datamodel import Content
|
|||||||
from org.sleuthkit.datamodel import TskCoreException
|
from org.sleuthkit.datamodel import TskCoreException
|
||||||
from org.sleuthkit.datamodel.Blackboard import BlackboardException
|
from org.sleuthkit.datamodel.Blackboard import BlackboardException
|
||||||
from org.sleuthkit.datamodel.blackboardutils import GeoArtifactsHelper
|
from org.sleuthkit.datamodel.blackboardutils import GeoArtifactsHelper
|
||||||
from org.sleuthkit.datamodel.blackboardutils.attributes import TskGeoTrackpointsUtil
|
from org.sleuthkit.datamodel.blackboardutils.attributes import GeoTrackPoints
|
||||||
|
from org.sleuthkit.datamodel.blackboardutils.attributes.GeoTrackPoints import TrackPoint
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
import general
|
import general
|
||||||
@ -139,14 +140,14 @@ class OruxMapsAnalyzer(general.AndroidComponentAnalyzer):
|
|||||||
trackpointsQueryString = "SELECT trkptlat, trkptlon, trkptalt, trkpttime FROM trackpoints WHERE trkptseg = " + segmentId
|
trackpointsQueryString = "SELECT trkptlat, trkptlon, trkptalt, trkpttime FROM trackpoints WHERE trkptseg = " + segmentId
|
||||||
trackpointsResultSet = oruxMapsTrackpointsDb.runQuery(trackpointsQueryString)
|
trackpointsResultSet = oruxMapsTrackpointsDb.runQuery(trackpointsQueryString)
|
||||||
if trackpointsResultSet is not None:
|
if trackpointsResultSet is not None:
|
||||||
geoPointList = TskGeoTrackpointsUtil.GeoTrackPointList()
|
geoPointList = GeoTrackPoints()
|
||||||
while trackpointsResultSet.next():
|
while trackpointsResultSet.next():
|
||||||
latitude = trackpointsResultSet.getDouble("trkptlat")
|
latitude = trackpointsResultSet.getDouble("trkptlat")
|
||||||
longitude = trackpointsResultSet.getDouble("trkptlon")
|
longitude = trackpointsResultSet.getDouble("trkptlon")
|
||||||
altitude = trackpointsResultSet.getDouble("trkptalt")
|
altitude = trackpointsResultSet.getDouble("trkptalt")
|
||||||
time = trackpointsResultSet.getLong("trkpttime") / 1000 # milliseconds since unix epoch
|
time = trackpointsResultSet.getLong("trkpttime") / 1000 # milliseconds since unix epoch
|
||||||
|
|
||||||
geoPointList.addPoint(TskGeoTrackpointsUtil.GeoTrackPointList.GeoTrackPoint(latitude, longitude, altitude, segmentName, 0, 0, 0, time))
|
geoPointList.addPoint(TrackPoint(latitude, longitude, altitude, segmentName, 0, 0, 0, time))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
geoartifact = geoArtifactHelper.addTrack(segmentName, geoPointList, None)
|
geoartifact = geoArtifactHelper.addTrack(segmentName, geoPointList, None)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user