mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 08:26:15 +00:00
Merge pull request #1355 from sidheshenator/case_dir_update_embedded_file_extraction_module
module output dir change with change in current case
This commit is contained in:
commit
8844b5a044
@ -45,17 +45,12 @@ public final class EmbeddedFileExtractorIngestModule implements FileIngestModule
|
|||||||
private final IngestServices services = IngestServices.getInstance();
|
private final IngestServices services = IngestServices.getInstance();
|
||||||
static final String[] SUPPORTED_EXTENSIONS = {"zip", "rar", "arj", "7z", "7zip", "gzip", "gz", "bzip2", "tar", "tgz",}; // "iso"}; NON-NLS
|
static final String[] SUPPORTED_EXTENSIONS = {"zip", "rar", "arj", "7z", "7zip", "gzip", "gz", "bzip2", "tar", "tgz",}; // "iso"}; NON-NLS
|
||||||
|
|
||||||
//buffer for checking file headers and signatures
|
|
||||||
private static final int readHeaderSize = 4;
|
|
||||||
private static final byte[] fileHeaderBuffer = new byte[readHeaderSize];
|
|
||||||
private static final int ZIP_SIGNATURE_BE = 0x504B0304;
|
|
||||||
private IngestJobContext context;
|
private IngestJobContext context;
|
||||||
private long jobId;
|
private long jobId;
|
||||||
private final static IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter();
|
private final static IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter();
|
||||||
|
|
||||||
private static final Case currentCase = Case.getCurrentCase();
|
String moduleDirRelative;
|
||||||
protected static final String moduleDirRelative = Case.getModulesOutputDirRelPath() + File.separator + EmbeddedFileExtractorModuleFactory.getModuleName(); //relative to the case, to store in db
|
String moduleDirAbsolute;
|
||||||
protected static final String moduleDirAbsolute = currentCase.getModulesOutputDirAbsPath() + File.separator + EmbeddedFileExtractorModuleFactory.getModuleName(); //absolute, to extract to
|
|
||||||
|
|
||||||
private boolean archivextraction;
|
private boolean archivextraction;
|
||||||
private boolean imageExtraction;
|
private boolean imageExtraction;
|
||||||
@ -72,14 +67,19 @@ public final class EmbeddedFileExtractorIngestModule implements FileIngestModule
|
|||||||
this.context = context;
|
this.context = context;
|
||||||
jobId = context.getJobId();
|
jobId = context.getJobId();
|
||||||
|
|
||||||
|
final Case currentCase = Case.getCurrentCase();
|
||||||
|
|
||||||
|
moduleDirRelative = Case.getModulesOutputDirRelPath() + File.separator + EmbeddedFileExtractorModuleFactory.getModuleName(); //relative to the case, to store in db
|
||||||
|
moduleDirAbsolute = currentCase.getModulesOutputDirAbsPath() + File.separator + EmbeddedFileExtractorModuleFactory.getModuleName(); //absolute, to extract to
|
||||||
|
|
||||||
// initialize the folder where the embedded files are extracted.
|
// initialize the folder where the embedded files are extracted.
|
||||||
File extractionDirectory = new File(EmbeddedFileExtractorIngestModule.moduleDirAbsolute);
|
File extractionDirectory = new File(moduleDirAbsolute);
|
||||||
if (!extractionDirectory.exists()) {
|
if (!extractionDirectory.exists()) {
|
||||||
try {
|
try {
|
||||||
extractionDirectory.mkdirs();
|
extractionDirectory.mkdirs();
|
||||||
} catch (SecurityException ex) {
|
} catch (SecurityException ex) {
|
||||||
logger.log(Level.SEVERE, "Error initializing output dir: " + EmbeddedFileExtractorIngestModule.moduleDirAbsolute, ex); //NON-NLS
|
logger.log(Level.SEVERE, "Error initializing output dir: " + moduleDirAbsolute, ex); //NON-NLS
|
||||||
services.postMessage(IngestMessage.createErrorMessage(EmbeddedFileExtractorModuleFactory.getModuleName(), "Error initializing", "Error initializing output dir: " + EmbeddedFileExtractorIngestModule.moduleDirAbsolute)); //NON-NLS
|
services.postMessage(IngestMessage.createErrorMessage(EmbeddedFileExtractorModuleFactory.getModuleName(), "Error initializing", "Error initializing output dir: " + moduleDirAbsolute)); //NON-NLS
|
||||||
throw new IngestModuleException(ex.getMessage());
|
throw new IngestModuleException(ex.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,8 +92,8 @@ public final class EmbeddedFileExtractorIngestModule implements FileIngestModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
// initialize the extraction modules.
|
// initialize the extraction modules.
|
||||||
this.archiveExtractor = new SevenZipExtractor(context, fileTypeDetector);
|
this.archiveExtractor = new SevenZipExtractor(context, fileTypeDetector, moduleDirRelative, moduleDirAbsolute);
|
||||||
this.imageExtractor = new ImageExtractor(context, fileTypeDetector);
|
this.imageExtractor = new ImageExtractor(context, fileTypeDetector, moduleDirRelative, moduleDirAbsolute);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -167,7 +167,7 @@ public final class EmbeddedFileExtractorIngestModule implements FileIngestModule
|
|||||||
* @param localRootRelPath relative path to archive, from getUniqueName()
|
* @param localRootRelPath relative path to archive, from getUniqueName()
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected static String getLocalRootAbsPath(String localRootRelPath) {
|
String getLocalRootAbsPath(String localRootRelPath) {
|
||||||
return moduleDirAbsolute + File.separator + localRootRelPath;
|
return moduleDirAbsolute + File.separator + localRootRelPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,9 @@ class ImageExtractor {
|
|||||||
private String parentFileName;
|
private String parentFileName;
|
||||||
private final String UNKNOWN_NAME_PREFIX = "image_";
|
private final String UNKNOWN_NAME_PREFIX = "image_";
|
||||||
private final FileTypeDetector fileTypeDetector;
|
private final FileTypeDetector fileTypeDetector;
|
||||||
|
|
||||||
|
String moduleDirRelative;
|
||||||
|
String moduleDirAbsolute;
|
||||||
/**
|
/**
|
||||||
* Enum of mimetypes which support image extraction
|
* Enum of mimetypes which support image extraction
|
||||||
*/
|
*/
|
||||||
@ -84,12 +87,14 @@ class ImageExtractor {
|
|||||||
}
|
}
|
||||||
private SupportedImageExtractionFormats abstractFileExtractionFormat;
|
private SupportedImageExtractionFormats abstractFileExtractionFormat;
|
||||||
|
|
||||||
ImageExtractor(IngestJobContext context, FileTypeDetector fileTypeDetector) {
|
ImageExtractor(IngestJobContext context, FileTypeDetector fileTypeDetector, String moduleDirRelative, String moduleDirAbsolute) {
|
||||||
|
|
||||||
this.fileManager = Case.getCurrentCase().getServices().getFileManager();
|
this.fileManager = Case.getCurrentCase().getServices().getFileManager();
|
||||||
this.services = IngestServices.getInstance();
|
this.services = IngestServices.getInstance();
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.fileTypeDetector = fileTypeDetector;
|
this.fileTypeDetector = fileTypeDetector;
|
||||||
|
this.moduleDirRelative = moduleDirRelative;
|
||||||
|
this.moduleDirAbsolute = moduleDirAbsolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -481,7 +486,7 @@ class ImageExtractor {
|
|||||||
* @return path to the image extraction folder for a given abstract file.
|
* @return path to the image extraction folder for a given abstract file.
|
||||||
*/
|
*/
|
||||||
private String getOutputFolderPath(String parentFileName) {
|
private String getOutputFolderPath(String parentFileName) {
|
||||||
String outputFolderPath = EmbeddedFileExtractorIngestModule.moduleDirAbsolute + File.separator + parentFileName;
|
String outputFolderPath = moduleDirAbsolute + File.separator + parentFileName;
|
||||||
File outputFilePath = new File(outputFolderPath);
|
File outputFilePath = new File(outputFolderPath);
|
||||||
if (!outputFilePath.exists()) {
|
if (!outputFilePath.exists()) {
|
||||||
try {
|
try {
|
||||||
@ -504,7 +509,7 @@ class ImageExtractor {
|
|||||||
*/
|
*/
|
||||||
private String getFileRelativePath(String fileName) {
|
private String getFileRelativePath(String fileName) {
|
||||||
// Used explicit FWD slashes to maintain DB consistency across operating systems.
|
// Used explicit FWD slashes to maintain DB consistency across operating systems.
|
||||||
return "/" + EmbeddedFileExtractorIngestModule.moduleDirRelative + "/" + this.parentFileName + "/" + fileName; //NON-NLS
|
return "/" + moduleDirRelative + "/" + this.parentFileName + "/" + fileName; //NON-NLS
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -79,6 +79,13 @@ class SevenZipExtractor {
|
|||||||
private static final long MIN_FREE_DISK_SPACE = 1 * 1000 * 1000000L; //1GB
|
private static final long MIN_FREE_DISK_SPACE = 1 * 1000 * 1000000L; //1GB
|
||||||
//counts archive depth
|
//counts archive depth
|
||||||
private ArchiveDepthCountTree archiveDepthCountTree;
|
private ArchiveDepthCountTree archiveDepthCountTree;
|
||||||
|
|
||||||
|
String moduleDirRelative;
|
||||||
|
String moduleDirAbsolute;
|
||||||
|
|
||||||
|
private String getLocalRootAbsPath(String uniqueArchiveFileName) {
|
||||||
|
return moduleDirAbsolute + File.separator + uniqueArchiveFileName;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Enum of mimetypes which support archive extraction
|
* Enum of mimetypes which support archive extraction
|
||||||
*/
|
*/
|
||||||
@ -103,7 +110,7 @@ class SevenZipExtractor {
|
|||||||
// TODO Expand to support more formats after upgrading Tika
|
// TODO Expand to support more formats after upgrading Tika
|
||||||
}
|
}
|
||||||
|
|
||||||
SevenZipExtractor(IngestJobContext context, FileTypeDetector fileTypeDetector) throws IngestModuleException {
|
SevenZipExtractor(IngestJobContext context, FileTypeDetector fileTypeDetector, String moduleDirRelative, String moduleDirAbsolute) throws IngestModuleException {
|
||||||
if (!SevenZip.isInitializedSuccessfully() && (SevenZip.getLastInitializationException() == null)) {
|
if (!SevenZip.isInitializedSuccessfully() && (SevenZip.getLastInitializationException() == null)) {
|
||||||
try {
|
try {
|
||||||
SevenZip.initSevenZipFromPlatformJAR();
|
SevenZip.initSevenZipFromPlatformJAR();
|
||||||
@ -121,6 +128,8 @@ class SevenZipExtractor {
|
|||||||
}
|
}
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.fileTypeDetector = fileTypeDetector;
|
this.fileTypeDetector = fileTypeDetector;
|
||||||
|
this.moduleDirRelative = moduleDirRelative;
|
||||||
|
this.moduleDirAbsolute = moduleDirAbsolute;
|
||||||
this.archiveDepthCountTree = new ArchiveDepthCountTree();
|
this.archiveDepthCountTree = new ArchiveDepthCountTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,7 +317,7 @@ class SevenZipExtractor {
|
|||||||
|
|
||||||
//setup the archive local root folder
|
//setup the archive local root folder
|
||||||
final String uniqueArchiveFileName = EmbeddedFileExtractorIngestModule.getUniqueName(archiveFile);
|
final String uniqueArchiveFileName = EmbeddedFileExtractorIngestModule.getUniqueName(archiveFile);
|
||||||
final String localRootAbsPath = EmbeddedFileExtractorIngestModule.getLocalRootAbsPath(uniqueArchiveFileName);
|
final String localRootAbsPath = getLocalRootAbsPath(uniqueArchiveFileName);
|
||||||
final File localRoot = new File(localRootAbsPath);
|
final File localRoot = new File(localRootAbsPath);
|
||||||
if (!localRoot.exists()) {
|
if (!localRoot.exists()) {
|
||||||
try {
|
try {
|
||||||
@ -321,7 +330,7 @@ class SevenZipExtractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//initialize tree hierarchy to keep track of unpacked file structure
|
//initialize tree hierarchy to keep track of unpacked file structure
|
||||||
SevenZipExtractor.UnpackedTree unpackedTree = new SevenZipExtractor.UnpackedTree(EmbeddedFileExtractorIngestModule.moduleDirRelative + "/" + uniqueArchiveFileName, archiveFile);
|
SevenZipExtractor.UnpackedTree unpackedTree = new SevenZipExtractor.UnpackedTree(moduleDirRelative + "/" + uniqueArchiveFileName, archiveFile);
|
||||||
|
|
||||||
long freeDiskSpace = services.getFreeDiskSpace();
|
long freeDiskSpace = services.getFreeDiskSpace();
|
||||||
|
|
||||||
@ -420,8 +429,8 @@ class SevenZipExtractor {
|
|||||||
final String uniqueExtractedName = uniqueArchiveFileName + File.separator + (item.getItemIndex() / 1000) + File.separator + item.getItemIndex() + new File(pathInArchive).getName();
|
final String uniqueExtractedName = uniqueArchiveFileName + File.separator + (item.getItemIndex() / 1000) + File.separator + item.getItemIndex() + new File(pathInArchive).getName();
|
||||||
|
|
||||||
//final String localRelPath = unpackDir + File.separator + localFileRelPath;
|
//final String localRelPath = unpackDir + File.separator + localFileRelPath;
|
||||||
final String localRelPath = EmbeddedFileExtractorIngestModule.moduleDirRelative + File.separator + uniqueExtractedName;
|
final String localRelPath = moduleDirRelative + File.separator + uniqueExtractedName;
|
||||||
final String localAbsPath = EmbeddedFileExtractorIngestModule.moduleDirAbsolute + File.separator + uniqueExtractedName;
|
final String localAbsPath = moduleDirAbsolute + File.separator + uniqueExtractedName;
|
||||||
|
|
||||||
//create local dirs and empty files before extracted
|
//create local dirs and empty files before extracted
|
||||||
File localFile = new java.io.File(localAbsPath);
|
File localFile = new java.io.File(localAbsPath);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user