/* * Autopsy Forensic Browser * * Copyright 2011-2016 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.fileextmismatch; import java.io.IOException; import java.io.ObjectInputStream; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; /** * Ingest options for the file extension mismatch detection ingest module. */ final class FileExtMismatchDetectorModuleSettings implements IngestModuleIngestJobSettings { private static final long serialVersionUID = 1L; private long versionNumber; private boolean skipFilesWithNoExtension; @Deprecated private boolean skipFilesWithTextPlainMimeType; // No longer used, retained to maintain serialization compatibility. private boolean skipKnownFiles; private CHECK_TYPE checkType; /* * Extension mismatches can be checked for all files, for all files except * text files, or for media and executable files only. */ enum CHECK_TYPE { ALL, NO_TEXT_FILES, ONLY_MEDIA_AND_EXE } /* * The set of the MIME types that will be checked for extension mismatches * when checkType is ONLY_MEDIA_AND_EXE. */ static final Set<String> MEDIA_AND_EXE_MIME_TYPES = Stream.of( "image/bmp", "image/gif", "image/jpeg", "image/png", "image/tiff", "image/x-ms-bmp", "application/dos-exe", "application/exe", "application/x-dosexec", "application/x-exe", "application/x-msdownload").collect(Collectors.toSet()); /** * Constructs an object with the ingest options for the file extension * mismatch detection ingest module. */ FileExtMismatchDetectorModuleSettings() { this.versionNumber = 2; this.skipFilesWithNoExtension = true; this.skipKnownFiles = true; this.checkType = CHECK_TYPE.ONLY_MEDIA_AND_EXE; } /** * Gets the serialization version number. * * @return A serialization version number. */ @Override public long getVersionNumber() { return serialVersionUID; } /** * Sets the flag indicating whether or not files without extensions should * be skipped during file extension mismatch checking. * * @param skipFilesWithNoExtension The desired value of the flag. */ void setSkipFilesWithNoExtension(boolean skipFilesWithNoExtension) { this.skipFilesWithNoExtension = skipFilesWithNoExtension; } /** * Gets the flag indicating whether or not files without extensions should * be skipped during file extension mismatch checking. * * @return The flag value. */ boolean skipFilesWithNoExtension() { return skipFilesWithNoExtension; } /** * Sets the flag indicating whether or not known files should be skipped * during file extension mismatch checking. * * @param skipKnownFiles The desired value of the flag. */ void setSkipKnownFiles(boolean skipKnownFiles) { this.skipKnownFiles = skipKnownFiles; } /** * Gets the flag indicating whether or not known files should be skipped * during file extension mismatch checking. * * @return The flag value. */ boolean skipKnownFiles() { return skipKnownFiles; } /** * Sets whether extension mismatches should be checked for all files, for * all files except text files, or for media and executable files only. * * @param checkType The check type. */ void setCheckType(CHECK_TYPE checkType) { this.checkType = checkType; } /** * Gets whether extension mismatches should be checked for all files, for * all files except text files, or for media and executable files only. * * @return checkType The check type. */ CHECK_TYPE getCheckType() { return checkType; } /** * Called by convention by the serialization infrastructure when * deserializing a FileExtMismatchDetectorModuleSettings object. * * @param in The object input stream provided by the serialization * infrastructure. * * @throws IOException If there is a problem reading the * serialized data. * @throws ClassNotFoundException If the class definition for the serialized * data cannot be found. */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); if (0L == versionNumber) { /* * If the version number is set to the Java field default value of * zero, then versionNumber and skipKnownFiles are new fields. * Change this to the desired default value of true. */ skipKnownFiles = true; versionNumber = 1; } if (1 == versionNumber) { /* * Set the default value of the new checkType field, it is currently * null. */ checkType = CHECK_TYPE.ONLY_MEDIA_AND_EXE; versionNumber = 2; } } }