mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
adding standard interesting file loader
This commit is contained in:
parent
1a6b0a7374
commit
77c0dc7e7f
@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2020 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.modules.interestingitems;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.openide.modules.OnStart;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||
|
||||
/**
|
||||
* When the interesting items module loads, this runnable loads standard
|
||||
* interesting file set rules.
|
||||
*/
|
||||
@OnStart
|
||||
public class StandardInterestingFileSetsLoader implements Runnable {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(StandardInterestingFileSetsLoader.class.getName());
|
||||
|
||||
private static final String CONFIG_DIR = "InterestingFileSetRules";
|
||||
private static final FilenameFilter DEFAULT_XML_FILTER = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
return name.endsWith(".xml");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
File rulesConfigDir = new File(PlatformUtil.getUserConfigDirectory(), CONFIG_DIR);
|
||||
|
||||
copyRulesDirectory(rulesConfigDir);
|
||||
|
||||
Map<String, FilesSet> standardInterestingFileSets = readStandardFileXML(rulesConfigDir);
|
||||
|
||||
Map<String, FilesSet> userConfiguredSettings = null;
|
||||
try {
|
||||
userConfiguredSettings = FilesSetsManager.getInstance().getInterestingFilesSets();
|
||||
} catch (FilesSetsManager.FilesSetsManagerException ex) {
|
||||
LOGGER.log(Level.SEVERE, "Unable to properly read user-configured interesting files sets.", ex);
|
||||
}
|
||||
|
||||
if (userConfiguredSettings == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO the rest of this
|
||||
|
||||
// Call InterestingItemsFilesSetSettings.readDefinitionsXML for each file in the InterestingFileSetRules directory,
|
||||
// setting the read only flag of each (actually one) FilesSet in the returned Map<String, FilesSet> objects and adding
|
||||
// the Maps objects to a local Map<String, FilesSet> object.
|
||||
|
||||
|
||||
|
||||
//Call FilesSetManager.getInterestingFilesSets and add the Map<String, FilesSet> to the local Map<String, FilesSet> from step “b.”
|
||||
//The ordering of “b” and “c” avoids overwriting any file set rules defined by the user that incidentally have the same rule set name as the standard rule set.
|
||||
//Call FilesSetManager.setInterestingFilesSets with the Map<String, FilesSet> from step “c.”
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads xml definitions for each file found in the standard interesting file set config directory and marks the files set as readonly.
|
||||
* @param rulesConfigDir The user configuration directory for standard interesting file set rules. This is assumed to be non-null.
|
||||
* @return The mapping of files set keys to the file sets.
|
||||
*/
|
||||
private static Map<String, FilesSet> readStandardFileXML(File rulesConfigDir) {
|
||||
Map<String, FilesSet> standardInterestingFileSets = new HashMap<>();
|
||||
if (rulesConfigDir.exists()) {
|
||||
for (File standardFileSetsFile : rulesConfigDir.listFiles(DEFAULT_XML_FILTER)) {
|
||||
try {
|
||||
Map<String, FilesSet> thisFilesSet = InterestingItemsFilesSetSettings.readDefinitionsXML(standardFileSetsFile);
|
||||
thisFilesSet.values().stream().forEach(filesSet -> filesSet.setReadOnly(true));
|
||||
|
||||
standardInterestingFileSets.putAll(thisFilesSet);
|
||||
} catch (FilesSetsManager.FilesSetsManagerException ex) {
|
||||
LOGGER.log(Level.WARNING, String.format("There was a problem importing the standard interesting file set at: %s.",
|
||||
standardFileSetsFile.getAbsoluteFile()), ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
return standardInterestingFileSets;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the InterestingFileSetRules directory to the user’s app data config directory for Autopsy if not already present.
|
||||
* @param rulesConfigDir The user configuration directory for standard interesting file set rules. This is assumed to be non-null.
|
||||
*/
|
||||
private static void copyRulesDirectory(File rulesConfigDir) {
|
||||
if (rulesConfigDir.exists()) {
|
||||
LOGGER.info(String.format("%s settings directory already exists. Not going to perform copy of class resource standard interesting files to directory.",
|
||||
rulesConfigDir.getAbsolutePath()));
|
||||
}
|
||||
|
||||
rulesConfigDir.mkdirs();
|
||||
|
||||
if (!rulesConfigDir.exists()) {
|
||||
LOGGER.severe(
|
||||
String.format("Unable to create directory at %s. Failed to copy standard interesting file set rules to this directory.",
|
||||
rulesConfigDir.getAbsolutePath()));
|
||||
return;
|
||||
}
|
||||
|
||||
// taken from https://stackoverflow.com/a/19459180
|
||||
URL url = StandardInterestingFileSetsLoader.class.getClassLoader().getResource(CONFIG_DIR);
|
||||
File resourceDirectory = null;
|
||||
try {
|
||||
resourceDirectory = new File(url.toURI());
|
||||
} catch (URISyntaxException ignored) {
|
||||
resourceDirectory = new File(url.getPath());
|
||||
}
|
||||
|
||||
if (resourceDirectory == null || !resourceDirectory.exists()) {
|
||||
LOGGER.severe(
|
||||
String.format("Unable to find resource directory for standard interesting file sets, %s.",
|
||||
(rulesConfigDir != null) ? rulesConfigDir.getAbsolutePath() : "<null>"));
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
FileUtils.copyDirectory(resourceDirectory, rulesConfigDir);
|
||||
} catch (IOException ex) {
|
||||
LOGGER.log(Level.SEVERE, String.format("There was an error copying %s to %s.",
|
||||
resourceDirectory.getAbsolutePath(), rulesConfigDir.getAbsolutePath()), ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user