24 package org.sleuthkit.autopsy.casemodule.services;
26 import java.io.Closeable;
27 import java.io.IOException;
28 import java.nio.file.Files;
29 import java.nio.file.attribute.BasicFileAttributes;
30 import java.util.ArrayList;
31 import java.util.Collection;
32 import java.util.List;
33 import java.util.logging.Level;
34 import org.openide.util.NbBundle;
52 import org.apache.commons.lang3.StringUtils;
146 String types = StringUtils.join(mimeTypes,
"', '");
147 return "mime_type IN ('" + types +
"')";
160 return "data_source_obj_id = " + dataSourceObjectID +
" AND parent_path LIKE '" + parentPath +
"%'";
176 List<AbstractFile> result =
new ArrayList<>();
178 for (
Content dataSource : dataSources) {
179 result.addAll(
findFiles(dataSource, fileName));
201 List<AbstractFile> result =
new ArrayList<>();
203 for (
Content dataSource : dataSources) {
204 result.addAll(
findFiles(dataSource, fileName, parentSubString));
242 return caseDb.
findFiles(dataSource, fileName);
264 return caseDb.
findFiles(dataSource, fileName, parentSubString);
285 return caseDb.
openFiles(dataSource, filePath);
320 long ctime,
long crtime,
long atime,
long mtime,
323 String rederiveDetails, String toolName, String toolVersion, String otherDetails,
326 ctime, crtime, atime, mtime,
327 isFile, parentObj, rederiveDetails, toolName, toolVersion, otherDetails, encodingType);
362 long ctime,
long crtime,
long atime,
long mtime,
363 boolean isFile, String mimeType,
364 String rederiveDetails, String toolName, String toolVersion, String otherDetails,
367 ctime, crtime, atime, mtime,
368 isFile, mimeType, rederiveDetails, toolName, toolVersion, otherDetails, encodingType);
429 return addLocalFilesDataSource(deviceId, rootVirtualDirectoryName, timeZone, null, localFilePaths,
false,
false,
false, progressUpdater);
461 return addLocalFilesDataSource(deviceId, rootVirtualDirectoryName, timeZone, host, localFilePaths,
false,
false,
false, progressUpdater);
497 List<String> localFilePaths,
boolean createTimestamp,
boolean accessTimestamp,
boolean modifiedTimestamp,
FileAddProgressUpdater progressUpdater)
throws TskCoreException,
TskDataException {
501 String rootDirectoryName = rootVirtualDirectoryName;
502 if (rootDirectoryName.isEmpty()) {
512 List<AbstractFile> filesAdded =
new ArrayList<>();
513 for (java.io.File localFile : localFiles) {
515 if (null != fileAdded) {
516 filesAdded.add(fileAdded);
518 throw new TskCoreException(NbBundle.getMessage(
this.getClass(),
"FileManager.addLocalFilesDirs.exception.cantAdd.msg", localFile.getAbsolutePath()));
537 }
catch (TskCoreException ex) {
538 LOGGER.log(Level.SEVERE,
"Failed to rollback transaction after exception", ex);
558 int localFileDataSourcesCounter = 0;
563 ++localFileDataSourcesCounter;
567 }
catch (TskCoreException ex) {
568 throw new TskCoreException(
"Error querying for existing local file data sources with defualt names", ex);
585 List<java.io.File> localFiles =
new ArrayList<>();
586 for (String path : localFilePaths) {
587 java.io.File localFile =
new java.io.File(path);
588 if (!localFile.exists() || !localFile.canRead()) {
589 throw new TskDataException(String.format(
"File at %s does not exist or cannot be read", localFile.getAbsolutePath()));
591 localFiles.add(localFile);
618 if (localFile.isDirectory()) {
623 progressUpdater.fileAdded(localDirectory);
628 final java.io.File[] childFiles = localFile.
listFiles();
629 if (childFiles != null && childFiles.length > 0) {
630 for (java.io.File childFile : childFiles) {
631 addLocalFile(trans, localDirectory, childFile, createTime, accessTime, modifiedTime, encodingType, progressUpdater);
635 return localDirectory;
637 long createTimestamp = 0;
638 long modifiedTimestamp = 0;
639 long accessTimestamp = 0;
641 BasicFileAttributes attrs;
642 attrs = Files.readAttributes(localFile.toPath(), BasicFileAttributes.class);
644 createTimestamp = (attrs.creationTime().toMillis()/1000);
647 modifiedTimestamp = (attrs.lastModifiedTime().toMillis()/1000);
650 accessTimestamp = (attrs.lastAccessTime().toMillis()/1000);
652 return caseDb.
addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(),
653 0, createTimestamp, accessTimestamp, modifiedTimestamp,
654 localFile.isFile(), encodingType, parentDirectory, trans);
655 }
catch (IOException ex) {
656 return caseDb.
addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(),
658 localFile.isFile(), encodingType, parentDirectory, trans);
671 public void close() throws IOException {
701 throw new TskCoreException(ex.getLocalizedMessage(), ex);
724 public LayoutFile addCarvedFile(String fileName,
long fileSize,
long parentObjId, List<TskFileRange> layout)
throws TskCoreException {
729 return layoutFiles.get(0);
748 public List<LayoutFile>
addCarvedFiles(List<org.sleuthkit.datamodel.CarvedFileContainer> filesToAdd)
throws TskCoreException {
786 long ctime,
long crtime,
long atime,
long mtime,
789 String rederiveDetails, String toolName, String toolVersion, String otherDetails)
throws TskCoreException {
790 return addDerivedFile(fileName, localPath, size, ctime, crtime, atime, mtime, isFile, parentFile,
static String createFileTypeInCondition(Collection< String > mimeTypes)
CaseDbTransaction beginTransaction()
List< LayoutFile > addCarvedFiles(CarvingResult carvingResult)
VirtualDirectory getRootDirectory()
List< AbstractFile > openFiles(Content dataSource, String filePath)
List< AbstractFile > findFilesByMimeType(Collection< String > mimeTypes)
DerivedFile updateDerivedFile(DerivedFile derivedFile, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, String mimeType, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, Host host, List< String > localFilePaths, boolean createTimestamp, boolean accessTimestamp, boolean modifiedTimestamp, FileAddProgressUpdater progressUpdater)
List< AbstractFile > findFiles(String fileName)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
List< LayoutFile > addCarvedFiles(List< org.sleuthkit.datamodel.CarvedFileContainer > filesToAdd)
static final Logger LOGGER
List< AbstractFile > openFiles(Content dataSource, String filePath)
Content getContentById(long id)
LayoutFile addCarvedFile(String fileName, long fileSize, long parentObjId, List< TskFileRange > layout)
void fileAdded(AbstractFile newFile)
List< VirtualDirectory > getVirtualDirectoryRoots()
List< AbstractFile > findFiles(Content dataSource, String fileName, String parentSubString)
VirtualDirectory addLocalFilesDirs(List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
List< AbstractFile > findFilesByMimeType(Content dataSource, Collection< String > mimeTypes)
List< AbstractFile > findFilesExactName(long parentId, String name)
AbstractFile addLocalFile(CaseDbTransaction trans, SpecialDirectory parentDirectory, java.io.File localFile, FileAddProgressUpdater progressUpdater)
final List< LayoutFile > addCarvedFiles(CarvingResult carvingResult)
DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, Content parentObj, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
List< AbstractFile > listFiles()
List< AbstractFile > findFiles(Content dataSource, String fileName, AbstractFile parent)
List< AbstractFile > findFiles(Content dataSource, String fileName)
List< AbstractFile > findFilesInFolder(String fileName, AbstractFile parentFile)
AbstractFile addLocalFile(CaseDbTransaction trans, SpecialDirectory parentDirectory, java.io.File localFile, boolean createTime, boolean accessTime, boolean modifiedTime, TskData.EncodingType encodingType, FileAddProgressUpdater progressUpdater)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, Host host, List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
static String createParentPathCondition(long dataSourceObjectID, String parentPath)
DerivedFile updateDerivedFile(DerivedFile derivedFile, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, String mimeType, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
final SleuthkitCase caseDb
List< AbstractFile > findFiles(String fileName, String parentSubString)
DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, AbstractFile parentFile, String rederiveDetails, String toolName, String toolVersion, String otherDetails)
List< Content > getRootObjects()
static String generateFilesDataSourceName(SleuthkitCase caseDb)
LocalFile addLocalFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, TskData.EncodingType encodingType, AbstractFile parent)
void fireModuleContentEvent(ModuleContentEvent moduleContentEvent)
List< AbstractFile > findFiles(Content dataSource, String fileName)
List< AbstractFile > findFilesExactName(long parentId, String name)
List< AbstractFile > findFiles(String fileName, AbstractFile parent)
List< AbstractFile > findAllFilesWhere(String sqlWhereClause)
synchronized static Logger getLogger(String name)
FileManager(SleuthkitCase caseDb)
List< AbstractFile > findFilesByParentPath(long dataSourceObjectID, String parentPath)
static final String LOGICAL_FILE_SET_PREFIX
List< java.io.File > getFilesAndDirectories(List< String > localFilePaths)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootDirectoryName, String timeZone, CaseDbTransaction transaction)
DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, Content parentObj, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
FileManager getFileManager()
static synchronized IngestServices getInstance()
LocalDirectory addLocalDirectory(long parentId, String directoryName)