bug fixes

This commit is contained in:
Greg DiCristofaro 2021-11-12 15:47:20 -05:00
parent c1646d7c0d
commit 942689f28f
3 changed files with 53 additions and 47 deletions

View File

@ -740,7 +740,7 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
setMap.computeIfAbsent(Pair.of(art.getArtifactTypeID(), setName), (k) -> new HashSet<>())
.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<>())
.add(art.getDataSourceObjectID());
}

View File

@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableList;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
@ -33,6 +34,7 @@ import java.util.prefs.PreferenceChangeListener;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.collections.CollectionUtils;
import org.python.google.common.collect.ImmutableSet;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.ingest.IngestManager;
@ -43,8 +45,18 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
*/
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<Case.Events> CASE_EVENTS = EnumSet.of(Case.Events.CURRENT_CASE);
private static final Set<IngestManager.IngestModuleEvent> INGEST_MODULE_EVENTS = EnumSet.of(
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 MainDAO instance = null;
@ -64,8 +76,11 @@ public class MainDAO extends AbstractDAO {
private final PropertyChangeListener caseEventListener = (evt) -> {
if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
this.clearCaches();
} else if (QUEUED_CASE_EVENTS.contains(evt.getPropertyName())) {
queueAutopsyEvent(evt);
} 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.
*/
private final PropertyChangeListener ingestModuleEventListener = (evt) -> {
handleAutopsyEvent(evt);
queueAutopsyEvent(evt);
};
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
@ -166,7 +181,7 @@ public class MainDAO extends AbstractDAO {
*/
void register() {
IngestManager.getInstance().addIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener);
Case.addEventTypeSubscriber(CASE_EVENTS, caseEventListener);
Case.addPropertyChangeListener(caseEventListener);
UserPreferences.addChangeListener(userPreferenceListener);
}
@ -180,7 +195,7 @@ public class MainDAO extends AbstractDAO {
*/
void unregister() {
IngestManager.getInstance().removeIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener);
Case.removeEventTypeSubscriber(CASE_EVENTS, caseEventListener);
Case.removePropertyChangeListener(caseEventListener);
UserPreferences.removeChangeListener(userPreferenceListener);
}
@ -189,7 +204,7 @@ public class MainDAO extends AbstractDAO {
*
* @param autopsyEvent The autopsy event.
*/
private void handleAutopsyEvent(PropertyChangeEvent autopsyEvent) {
private void queueAutopsyEvent(PropertyChangeEvent autopsyEvent) {
this.eventBatcher.queueEvent(autopsyEvent);
}
}

View File

@ -327,7 +327,7 @@ public class TagsDAO extends AbstractDAO {
.add(Optional.ofNullable(data.getRight()));
}
}
// don't continue if no mapping entries
if (mapping.isEmpty()) {
return Collections.emptyList();
@ -369,44 +369,35 @@ public class TagsDAO extends AbstractDAO {
* from event).
*/
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();
if (eventType.equals(Case.Events.BLACKBOARD_ARTIFACT_TAG_ADDED.toString())
|| eventType.equals(Case.Events.BLACKBOARD_ARTIFACT_TAG_DELETED.toString())
|| eventType.equals(Case.Events.CONTENT_TAG_ADDED.toString())
|| eventType.equals(Case.Events.CONTENT_TAG_DELETED.toString())) {
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());
}
} else if (evt instanceof BlackBoardArtifactTagDeletedEvent) {
BlackBoardArtifactTagDeletedEvent event = (BlackBoardArtifactTagDeletedEvent) evt;
BlackBoardArtifactTagDeletedEvent.DeletedBlackboardArtifactTagInfo deletedTagInfo = event.getDeletedTagInfo();
if (deletedTagInfo != 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);
}
} else if (evt instanceof BlackBoardArtifactTagDeletedEvent) {
BlackBoardArtifactTagDeletedEvent event = (BlackBoardArtifactTagDeletedEvent) evt;
BlackBoardArtifactTagDeletedEvent.DeletedBlackboardArtifactTagInfo deletedTagInfo = event.getDeletedTagInfo();
if (deletedTagInfo != 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;
@ -418,7 +409,7 @@ public class TagsDAO extends AbstractDAO {
public static class TagFetcher extends DAOFetcher<TagsSearchParams> {
private final TagsDAO dao;
/**
* Main constructor.
*