mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
updates for case callback
This commit is contained in:
parent
1ea7b215d2
commit
ea05b19d71
@ -18,7 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.casemodule;
|
package org.sleuthkit.autopsy.casemodule;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import org.sleuthkit.datamodel.ContentStreamProvider;
|
import org.sleuthkit.datamodel.ContentStreamProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,7 +34,7 @@ public interface AutopsyContentProvider {
|
|||||||
* file.
|
* file.
|
||||||
* @return The created content provider or null if arguments are invalid.
|
* @return The created content provider or null if arguments are invalid.
|
||||||
*/
|
*/
|
||||||
ContentStreamProvider load(Map<String, Object> args);
|
ContentStreamProvider load();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the uniquely identifying name of this FileContentProvider. This
|
* Returns the uniquely identifying name of this FileContentProvider. This
|
||||||
|
@ -2736,9 +2736,7 @@ public class Case {
|
|||||||
try {
|
try {
|
||||||
String databaseName = metadata.getCaseDatabaseName();
|
String databaseName = metadata.getCaseDatabaseName();
|
||||||
|
|
||||||
ContentStreamProvider contentProvider = loadContentProvider(
|
ContentStreamProvider contentProvider = loadContentProvider(metadata.getContentProviderName());
|
||||||
metadata.getContentProviderName(),
|
|
||||||
metadata.getContentProviderArgs());
|
|
||||||
|
|
||||||
if (CaseType.SINGLE_USER_CASE == metadata.getCaseType()) {
|
if (CaseType.SINGLE_USER_CASE == metadata.getCaseType()) {
|
||||||
// only prefix with metadata directory if databaseName is a relative path
|
// only prefix with metadata directory if databaseName is a relative path
|
||||||
@ -2772,7 +2770,7 @@ public class Case {
|
|||||||
* @return The content provider or null if no content provider can be
|
* @return The content provider or null if no content provider can be
|
||||||
* provisioned for the arguments
|
* provisioned for the arguments
|
||||||
*/
|
*/
|
||||||
private static ContentStreamProvider loadContentProvider(String providerName, Map<String, Object> args) {
|
private static ContentStreamProvider loadContentProvider(String providerName) {
|
||||||
Collection<? extends AutopsyContentProvider> customContentProviders = Lookup.getDefault().lookupAll(AutopsyContentProvider.class);
|
Collection<? extends AutopsyContentProvider> customContentProviders = Lookup.getDefault().lookupAll(AutopsyContentProvider.class);
|
||||||
if (customContentProviders != null) {
|
if (customContentProviders != null) {
|
||||||
for (AutopsyContentProvider customProvider : customContentProviders) {
|
for (AutopsyContentProvider customProvider : customContentProviders) {
|
||||||
@ -2781,7 +2779,7 @@ public class Case {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentStreamProvider contentProvider = customProvider.load(args);
|
ContentStreamProvider contentProvider = customProvider.load();
|
||||||
if (contentProvider != null) {
|
if (contentProvider != null) {
|
||||||
return contentProvider;
|
return contentProvider;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,6 @@ public final class CaseMetadata {
|
|||||||
*/
|
*/
|
||||||
private static final String SCHEMA_VERSION_SIX = "6.0";
|
private static final String SCHEMA_VERSION_SIX = "6.0";
|
||||||
private final static String CONTENT_PROVIDER_ELEMENT_NAME = "ContentProvider";
|
private final static String CONTENT_PROVIDER_ELEMENT_NAME = "ContentProvider";
|
||||||
private final static String CONTENT_PROVIDER_ARGS_ELEMENT_NAME = "Args";
|
|
||||||
private final static String CONTENT_PROVIDER_NAME_ELEMENT_NAME = "Name";
|
private final static String CONTENT_PROVIDER_NAME_ELEMENT_NAME = "Name";
|
||||||
private final static String CONTENT_PROVIDER_ARG_DEFAULT_KEY = "DEFAULT";
|
private final static String CONTENT_PROVIDER_ARG_DEFAULT_KEY = "DEFAULT";
|
||||||
|
|
||||||
@ -143,7 +142,6 @@ public final class CaseMetadata {
|
|||||||
private String createdByVersion;
|
private String createdByVersion;
|
||||||
private CaseMetadata originalMetadata = null; // For portable cases
|
private CaseMetadata originalMetadata = null; // For portable cases
|
||||||
private String contentProviderName;
|
private String contentProviderName;
|
||||||
private Map<String, Object> contentProviderArgs;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the file extension used for case metadata files.
|
* Gets the file extension used for case metadata files.
|
||||||
@ -200,7 +198,6 @@ public final class CaseMetadata {
|
|||||||
createdDate = CaseMetadata.DATE_FORMAT.format(new Date());
|
createdDate = CaseMetadata.DATE_FORMAT.format(new Date());
|
||||||
this.originalMetadata = originalMetadata;
|
this.originalMetadata = originalMetadata;
|
||||||
this.contentProviderName = originalMetadata == null ? null : originalMetadata.contentProviderName;
|
this.contentProviderName = originalMetadata == null ? null : originalMetadata.contentProviderName;
|
||||||
this.contentProviderArgs = originalMetadata == null ? null : originalMetadata.contentProviderArgs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -246,14 +243,6 @@ public final class CaseMetadata {
|
|||||||
return this.contentProviderName;
|
return this.contentProviderName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The arguments for the custom provider for content byte data or
|
|
||||||
* null if no custom provider.
|
|
||||||
*/
|
|
||||||
public Map<String, Object> getContentProviderArgs() {
|
|
||||||
return contentProviderArgs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the full path to the case metadata file.
|
* Gets the full path to the case metadata file.
|
||||||
*
|
*
|
||||||
@ -499,7 +488,6 @@ public final class CaseMetadata {
|
|||||||
Element caseElement = doc.createElement(CASE_ELEMENT_NAME);
|
Element caseElement = doc.createElement(CASE_ELEMENT_NAME);
|
||||||
rootElement.appendChild(caseElement);
|
rootElement.appendChild(caseElement);
|
||||||
|
|
||||||
// serialize content provider args if they exist
|
|
||||||
Element contentProviderEl = doc.createElement(CONTENT_PROVIDER_ELEMENT_NAME);
|
Element contentProviderEl = doc.createElement(CONTENT_PROVIDER_ELEMENT_NAME);
|
||||||
rootElement.appendChild(contentProviderEl);
|
rootElement.appendChild(contentProviderEl);
|
||||||
|
|
||||||
@ -508,11 +496,6 @@ public final class CaseMetadata {
|
|||||||
contentProviderNameEl.setTextContent(this.contentProviderName);
|
contentProviderNameEl.setTextContent(this.contentProviderName);
|
||||||
}
|
}
|
||||||
contentProviderEl.appendChild(contentProviderNameEl);
|
contentProviderEl.appendChild(contentProviderNameEl);
|
||||||
|
|
||||||
Element contentProviderArgsEl = doc.createElement(CONTENT_PROVIDER_ARGS_ELEMENT_NAME);
|
|
||||||
contentProviderEl.appendChild(contentProviderArgsEl);
|
|
||||||
|
|
||||||
serializeContentProviderArgs(doc, this.contentProviderArgs, contentProviderArgsEl);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the children of the case element.
|
* Create the children of the case element.
|
||||||
@ -600,18 +583,11 @@ public final class CaseMetadata {
|
|||||||
this.createdByVersion = getElementTextContent(rootElement, AUTOPSY_CREATED_BY_ELEMENT_NAME, true);
|
this.createdByVersion = getElementTextContent(rootElement, AUTOPSY_CREATED_BY_ELEMENT_NAME, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// load content provider args
|
|
||||||
Element contentProviderEl = getChildElOrNull(rootElement, CONTENT_PROVIDER_ELEMENT_NAME);
|
Element contentProviderEl = getChildElOrNull(rootElement, CONTENT_PROVIDER_ELEMENT_NAME);
|
||||||
if (contentProviderEl != null) {
|
if (contentProviderEl != null) {
|
||||||
Element contentProviderNameEl = getChildElOrNull(contentProviderEl, CONTENT_PROVIDER_NAME_ELEMENT_NAME);
|
Element contentProviderNameEl = getChildElOrNull(contentProviderEl, CONTENT_PROVIDER_NAME_ELEMENT_NAME);
|
||||||
this.contentProviderName = contentProviderNameEl != null ? contentProviderNameEl.getTextContent() : null;
|
this.contentProviderName = contentProviderNameEl != null ? contentProviderNameEl.getTextContent() : null;
|
||||||
Element contentProviderArgsEl = getChildElOrNull(contentProviderEl, CONTENT_PROVIDER_ARGS_ELEMENT_NAME);
|
|
||||||
Object contentProviderArgs = loadContentProviderArgs(contentProviderArgsEl);
|
|
||||||
this.contentProviderArgs = (contentProviderArgs instanceof Map) ?
|
|
||||||
(Map<String, Object>) contentProviderArgs :
|
|
||||||
Collections.singletonMap(CONTENT_PROVIDER_ARG_DEFAULT_KEY, contentProviderArgs);
|
|
||||||
} else {
|
} else {
|
||||||
this.contentProviderArgs = null;
|
|
||||||
this.contentProviderName = null;
|
this.contentProviderName = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -695,90 +671,6 @@ public final class CaseMetadata {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Loads custom content provider arguments from an xml element.
|
|
||||||
* @param element The xml element.
|
|
||||||
* @return The custom content provider arguments.
|
|
||||||
*/
|
|
||||||
private Object loadContentProviderArgs(Element element) {
|
|
||||||
if (element == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
NodeList nodeList = element.getChildNodes();
|
|
||||||
List<Element> elements = new ArrayList<>();
|
|
||||||
for (int i = 0; i < nodeList.getLength(); i++) {
|
|
||||||
if (nodeList.item(i) instanceof Element) {
|
|
||||||
elements.add((Element) nodeList.item(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (elements.size() > 0) {
|
|
||||||
String nodeTag = element.getTagName();
|
|
||||||
boolean childrenHaveSameTag = true;
|
|
||||||
List<Pair<String, Object>> children = new ArrayList<>();
|
|
||||||
for (int i = 0; i < nodeList.getLength(); i++) {
|
|
||||||
Node child = nodeList.item(i);
|
|
||||||
if (child instanceof Element) {
|
|
||||||
Element childElement = (Element) child;
|
|
||||||
String childTagName = childElement.getTagName();
|
|
||||||
Object childArg = loadContentProviderArgs(childElement);
|
|
||||||
children.add(Pair.of(childTagName, childArg));
|
|
||||||
|
|
||||||
if (childrenHaveSameTag && !childTagName.equalsIgnoreCase(nodeTag)) {
|
|
||||||
childrenHaveSameTag = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (childrenHaveSameTag) {
|
|
||||||
return children.stream().map(Pair::getValue).collect(Collectors.toList());
|
|
||||||
} else {
|
|
||||||
Map<String, Object> toRet = new HashMap<>();
|
|
||||||
for (Pair<String, Object> child: children) {
|
|
||||||
toRet.put(child.getKey(), child.getValue());
|
|
||||||
}
|
|
||||||
return toRet;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return element.getTextContent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Serializes custom content provider arguments to an xml element.
|
|
||||||
* @param doc The root xml document.
|
|
||||||
* @param arg The argument to serialize.
|
|
||||||
* @param el The xml element for the argument.
|
|
||||||
*/
|
|
||||||
private void serializeContentProviderArgs(Document doc, Object arg, Element el) {
|
|
||||||
if (arg == null) {
|
|
||||||
return;
|
|
||||||
} else if (arg instanceof List) {
|
|
||||||
String parentTagName = el.getTagName();
|
|
||||||
List<? extends Object> argList = (List<? extends Object>) arg;
|
|
||||||
for (Object childArg: argList) {
|
|
||||||
Element childEl = doc.createElement(parentTagName);
|
|
||||||
el.appendChild(childEl);
|
|
||||||
serializeContentProviderArgs(doc, childArg, childEl);
|
|
||||||
}
|
|
||||||
} else if (arg instanceof Map) {
|
|
||||||
Map<? extends Object, ? extends Object> argMap = (Map<? extends Object, ? extends Object>) arg;
|
|
||||||
for (Entry<? extends Object, ? extends Object> childEntry: argMap.entrySet()) {
|
|
||||||
String childTag = childEntry.getKey() == null ? null : childEntry.getKey().toString();
|
|
||||||
if (StringUtils.isBlank(childTag)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Element childEl = doc.createElement(childTag);
|
|
||||||
el.appendChild(childEl);
|
|
||||||
serializeContentProviderArgs(doc, childEntry.getValue(), childEl);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
el.setTextContent(arg.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the text content of an XML element.
|
* Gets the text content of an XML element.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user