mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
bug fixes
This commit is contained in:
parent
c1646d7c0d
commit
942689f28f
@ -740,7 +740,7 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
|
|||||||
setMap.computeIfAbsent(Pair.of(art.getArtifactTypeID(), setName), (k) -> new HashSet<>())
|
setMap.computeIfAbsent(Pair.of(art.getArtifactTypeID(), setName), (k) -> new HashSet<>())
|
||||||
.add(art.getDataSourceObjectID());
|
.add(art.getDataSourceObjectID());
|
||||||
|
|
||||||
} else if (BlackboardArtifact.Category.DATA_ARTIFACT.equals(art.getType().getCategory())) {
|
} else if (BlackboardArtifact.Category.ANALYSIS_RESULT.equals(art.getType().getCategory())) {
|
||||||
analysisResultMap.computeIfAbsent(art.getArtifactTypeID(), (k) -> new HashSet<>())
|
analysisResultMap.computeIfAbsent(art.getArtifactTypeID(), (k) -> new HashSet<>())
|
||||||
.add(art.getDataSourceObjectID());
|
.add(art.getDataSourceObjectID());
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableList;
|
|||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.beans.PropertyChangeSupport;
|
import java.beans.PropertyChangeSupport;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -33,6 +34,7 @@ import java.util.prefs.PreferenceChangeListener;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.python.google.common.collect.ImmutableSet;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
@ -43,8 +45,18 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
|
|||||||
*/
|
*/
|
||||||
public class MainDAO extends AbstractDAO {
|
public class MainDAO extends AbstractDAO {
|
||||||
|
|
||||||
private static final Set<IngestManager.IngestModuleEvent> INGEST_MODULE_EVENTS = EnumSet.of(IngestManager.IngestModuleEvent.CONTENT_CHANGED, IngestManager.IngestModuleEvent.DATA_ADDED);
|
private static final Set<IngestManager.IngestModuleEvent> INGEST_MODULE_EVENTS = EnumSet.of(
|
||||||
private static final Set<Case.Events> CASE_EVENTS = EnumSet.of(Case.Events.CURRENT_CASE);
|
IngestManager.IngestModuleEvent.CONTENT_CHANGED,
|
||||||
|
IngestManager.IngestModuleEvent.DATA_ADDED
|
||||||
|
);
|
||||||
|
|
||||||
|
private static final Set<String> QUEUED_CASE_EVENTS = ImmutableSet.of(
|
||||||
|
Case.Events.OS_ACCOUNTS_ADDED.toString(),
|
||||||
|
Case.Events.OS_ACCOUNTS_UPDATED.toString(),
|
||||||
|
Case.Events.OS_ACCOUNTS_DELETED.toString(),
|
||||||
|
Case.Events.OS_ACCT_INSTANCES_ADDED.toString()
|
||||||
|
);
|
||||||
|
|
||||||
private static final long MILLIS_BATCH = 5000;
|
private static final long MILLIS_BATCH = 5000;
|
||||||
|
|
||||||
private static MainDAO instance = null;
|
private static MainDAO instance = null;
|
||||||
@ -64,8 +76,11 @@ public class MainDAO extends AbstractDAO {
|
|||||||
private final PropertyChangeListener caseEventListener = (evt) -> {
|
private final PropertyChangeListener caseEventListener = (evt) -> {
|
||||||
if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
|
if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
|
||||||
this.clearCaches();
|
this.clearCaches();
|
||||||
|
} else if (QUEUED_CASE_EVENTS.contains(evt.getPropertyName())) {
|
||||||
|
queueAutopsyEvent(evt);
|
||||||
} else {
|
} else {
|
||||||
handleAutopsyEvent(evt);
|
// handle case events immediately
|
||||||
|
handleAutopsyEvent(Arrays.asList(evt));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -80,7 +95,7 @@ public class MainDAO extends AbstractDAO {
|
|||||||
* The ingest module event listener.
|
* The ingest module event listener.
|
||||||
*/
|
*/
|
||||||
private final PropertyChangeListener ingestModuleEventListener = (evt) -> {
|
private final PropertyChangeListener ingestModuleEventListener = (evt) -> {
|
||||||
handleAutopsyEvent(evt);
|
queueAutopsyEvent(evt);
|
||||||
};
|
};
|
||||||
|
|
||||||
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
|
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
|
||||||
@ -166,7 +181,7 @@ public class MainDAO extends AbstractDAO {
|
|||||||
*/
|
*/
|
||||||
void register() {
|
void register() {
|
||||||
IngestManager.getInstance().addIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener);
|
IngestManager.getInstance().addIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener);
|
||||||
Case.addEventTypeSubscriber(CASE_EVENTS, caseEventListener);
|
Case.addPropertyChangeListener(caseEventListener);
|
||||||
UserPreferences.addChangeListener(userPreferenceListener);
|
UserPreferences.addChangeListener(userPreferenceListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,7 +195,7 @@ public class MainDAO extends AbstractDAO {
|
|||||||
*/
|
*/
|
||||||
void unregister() {
|
void unregister() {
|
||||||
IngestManager.getInstance().removeIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener);
|
IngestManager.getInstance().removeIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener);
|
||||||
Case.removeEventTypeSubscriber(CASE_EVENTS, caseEventListener);
|
Case.removePropertyChangeListener(caseEventListener);
|
||||||
UserPreferences.removeChangeListener(userPreferenceListener);
|
UserPreferences.removeChangeListener(userPreferenceListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +204,7 @@ public class MainDAO extends AbstractDAO {
|
|||||||
*
|
*
|
||||||
* @param autopsyEvent The autopsy event.
|
* @param autopsyEvent The autopsy event.
|
||||||
*/
|
*/
|
||||||
private void handleAutopsyEvent(PropertyChangeEvent autopsyEvent) {
|
private void queueAutopsyEvent(PropertyChangeEvent autopsyEvent) {
|
||||||
this.eventBatcher.queueEvent(autopsyEvent);
|
this.eventBatcher.queueEvent(autopsyEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,7 +327,7 @@ public class TagsDAO extends AbstractDAO {
|
|||||||
.add(Optional.ofNullable(data.getRight()));
|
.add(Optional.ofNullable(data.getRight()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't continue if no mapping entries
|
// don't continue if no mapping entries
|
||||||
if (mapping.isEmpty()) {
|
if (mapping.isEmpty()) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@ -369,44 +369,35 @@ public class TagsDAO extends AbstractDAO {
|
|||||||
* from event).
|
* from event).
|
||||||
*/
|
*/
|
||||||
private Triple<TagType, Long, Long> getTagData(PropertyChangeEvent evt) {
|
private Triple<TagType, Long, Long> getTagData(PropertyChangeEvent evt) {
|
||||||
|
if (evt instanceof BlackBoardArtifactTagAddedEvent) {
|
||||||
|
BlackBoardArtifactTagAddedEvent event = (BlackBoardArtifactTagAddedEvent) evt;
|
||||||
|
// ensure tag added event has a valid content id
|
||||||
|
if (event.getAddedTag() != null
|
||||||
|
&& event.getAddedTag().getContent() != null
|
||||||
|
&& event.getAddedTag().getArtifact() != null) {
|
||||||
|
return Triple.of(TagType.RESULT, event.getAddedTag().getName().getId(), event.getAddedTag().getArtifact().getDataSourceObjectID());
|
||||||
|
}
|
||||||
|
|
||||||
String eventType = evt.getPropertyName();
|
} else if (evt instanceof BlackBoardArtifactTagDeletedEvent) {
|
||||||
|
BlackBoardArtifactTagDeletedEvent event = (BlackBoardArtifactTagDeletedEvent) evt;
|
||||||
if (eventType.equals(Case.Events.BLACKBOARD_ARTIFACT_TAG_ADDED.toString())
|
BlackBoardArtifactTagDeletedEvent.DeletedBlackboardArtifactTagInfo deletedTagInfo = event.getDeletedTagInfo();
|
||||||
|| eventType.equals(Case.Events.BLACKBOARD_ARTIFACT_TAG_DELETED.toString())
|
if (deletedTagInfo != null) {
|
||||||
|| eventType.equals(Case.Events.CONTENT_TAG_ADDED.toString())
|
return Triple.of(TagType.RESULT, deletedTagInfo.getName().getId(), null);
|
||||||
|| eventType.equals(Case.Events.CONTENT_TAG_DELETED.toString())) {
|
}
|
||||||
|
} else if (evt instanceof ContentTagAddedEvent) {
|
||||||
if (evt instanceof BlackBoardArtifactTagAddedEvent) {
|
ContentTagAddedEvent event = (ContentTagAddedEvent) evt;
|
||||||
BlackBoardArtifactTagAddedEvent event = (BlackBoardArtifactTagAddedEvent) evt;
|
// ensure tag added event has a valid content id
|
||||||
// ensure tag added event has a valid content id
|
if (event.getAddedTag() != null && event.getAddedTag().getContent() != null) {
|
||||||
if (event.getAddedTag() != null
|
Content content = event.getAddedTag().getContent();
|
||||||
&& event.getAddedTag().getContent() != null
|
Long dsId = content instanceof AbstractFile ? ((AbstractFile) content).getDataSourceObjectId() : null;
|
||||||
&& event.getAddedTag().getArtifact() != null) {
|
return Triple.of(TagType.FILE, event.getAddedTag().getName().getId(), dsId);
|
||||||
return Triple.of(TagType.RESULT, event.getAddedTag().getName().getId(), event.getAddedTag().getArtifact().getDataSourceObjectID());
|
}
|
||||||
}
|
} else if (evt instanceof ContentTagDeletedEvent) {
|
||||||
|
ContentTagDeletedEvent event = (ContentTagDeletedEvent) evt;
|
||||||
} else if (evt instanceof BlackBoardArtifactTagDeletedEvent) {
|
// ensure tag deleted event has a valid content id
|
||||||
BlackBoardArtifactTagDeletedEvent event = (BlackBoardArtifactTagDeletedEvent) evt;
|
ContentTagDeletedEvent.DeletedContentTagInfo deletedTagInfo = event.getDeletedTagInfo();
|
||||||
BlackBoardArtifactTagDeletedEvent.DeletedBlackboardArtifactTagInfo deletedTagInfo = event.getDeletedTagInfo();
|
if (deletedTagInfo != null) {
|
||||||
if (deletedTagInfo != null) {
|
return Triple.of(TagType.FILE, deletedTagInfo.getName().getId(), null);
|
||||||
return Triple.of(TagType.RESULT, deletedTagInfo.getName().getId(), null);
|
|
||||||
}
|
|
||||||
} else if (evt instanceof ContentTagAddedEvent) {
|
|
||||||
ContentTagAddedEvent event = (ContentTagAddedEvent) evt;
|
|
||||||
// ensure tag added event has a valid content id
|
|
||||||
if (event.getAddedTag() != null && event.getAddedTag().getContent() != null) {
|
|
||||||
Content content = event.getAddedTag().getContent();
|
|
||||||
Long dsId = content instanceof AbstractFile ? ((AbstractFile) content).getDataSourceObjectId() : null;
|
|
||||||
return Triple.of(TagType.FILE, event.getAddedTag().getName().getId(), dsId);
|
|
||||||
}
|
|
||||||
} else if (evt instanceof ContentTagDeletedEvent) {
|
|
||||||
ContentTagDeletedEvent event = (ContentTagDeletedEvent) evt;
|
|
||||||
// ensure tag deleted event has a valid content id
|
|
||||||
ContentTagDeletedEvent.DeletedContentTagInfo deletedTagInfo = event.getDeletedTagInfo();
|
|
||||||
if (deletedTagInfo != null) {
|
|
||||||
return Triple.of(TagType.FILE, deletedTagInfo.getName().getId(), null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -418,7 +409,7 @@ public class TagsDAO extends AbstractDAO {
|
|||||||
public static class TagFetcher extends DAOFetcher<TagsSearchParams> {
|
public static class TagFetcher extends DAOFetcher<TagsSearchParams> {
|
||||||
|
|
||||||
private final TagsDAO dao;
|
private final TagsDAO dao;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main constructor.
|
* Main constructor.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user