mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-11 23:46:15 +00:00
Add File Extension Mismatch ingest module.
This commit is contained in:
parent
aacefa5f49
commit
7293c5fd89
8
FileExtMismatch/build.xml
Normal file
8
FileExtMismatch/build.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
|
||||||
|
<!-- for some information on what you could do (e.g. targets to override). -->
|
||||||
|
<!-- If you delete this file and reopen the project it will be recreated. -->
|
||||||
|
<project name="org.sleuthkit.autopsy.fileextmismatch" default="netbeans" basedir=".">
|
||||||
|
<description>Builds, tests, and runs the project org.sleuthkit.autopsy.fileextmismatch.</description>
|
||||||
|
<import file="nbproject/build-impl.xml"/>
|
||||||
|
</project>
|
5
FileExtMismatch/manifest.mf
Normal file
5
FileExtMismatch/manifest.mf
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
OpenIDE-Module: org.sleuthkit.autopsy.fileextmismatch/3
|
||||||
|
OpenIDE-Module-Implementation-Version: 1
|
||||||
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/fileextmismatch/Bundle.properties
|
||||||
|
|
45
FileExtMismatch/nbproject/build-impl.xml
Normal file
45
FileExtMismatch/nbproject/build-impl.xml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
*** GENERATED FROM project.xml - DO NOT EDIT ***
|
||||||
|
*** EDIT ../build.xml INSTEAD ***
|
||||||
|
-->
|
||||||
|
<project name="org.sleuthkit.autopsy.fileextmismatch-impl" basedir="..">
|
||||||
|
<fail message="Please build using Ant 1.7.1 or higher.">
|
||||||
|
<condition>
|
||||||
|
<not>
|
||||||
|
<antversion atleast="1.7.1"/>
|
||||||
|
</not>
|
||||||
|
</condition>
|
||||||
|
</fail>
|
||||||
|
<property file="nbproject/private/suite-private.properties"/>
|
||||||
|
<property file="nbproject/suite.properties"/>
|
||||||
|
<fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
|
||||||
|
<property file="${suite.dir}/nbproject/private/platform-private.properties"/>
|
||||||
|
<property file="${suite.dir}/nbproject/platform.properties"/>
|
||||||
|
<macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
|
||||||
|
<attribute name="name"/>
|
||||||
|
<attribute name="value"/>
|
||||||
|
<sequential>
|
||||||
|
<property name="@{name}" value="${@{value}}"/>
|
||||||
|
</sequential>
|
||||||
|
</macrodef>
|
||||||
|
<macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
|
||||||
|
<attribute name="property"/>
|
||||||
|
<attribute name="value"/>
|
||||||
|
<sequential>
|
||||||
|
<property name="@{property}" value="@{value}"/>
|
||||||
|
</sequential>
|
||||||
|
</macrodef>
|
||||||
|
<property file="${user.properties.file}"/>
|
||||||
|
<nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
|
||||||
|
<nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
|
||||||
|
<nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
|
||||||
|
<fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
|
||||||
|
<condition>
|
||||||
|
<not>
|
||||||
|
<contains string="${cluster.path.evaluated}" substring="platform"/>
|
||||||
|
</not>
|
||||||
|
</condition>
|
||||||
|
</fail>
|
||||||
|
<import file="${harness.dir}/build.xml"/>
|
||||||
|
</project>
|
120
FileExtMismatch/nbproject/platform.properties
Normal file
120
FileExtMismatch/nbproject/platform.properties
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
branding.token=autopsy
|
||||||
|
netbeans-plat-version=7.3.1
|
||||||
|
suite.dir=${basedir}
|
||||||
|
nbplatform.active.dir=${suite.dir}/netbeans-plat/${netbeans-plat-version}
|
||||||
|
harness.dir=${nbplatform.active.dir}/harness
|
||||||
|
bootstrap.url=http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/netbeans/harness/tasks.jar
|
||||||
|
autoupdate.catalog.url=http://dlc.sun.com.edgesuite.net/netbeans/updates/${netbeans-plat-version}/uc/final/distribution/catalog.xml.gz
|
||||||
|
cluster.path=\
|
||||||
|
${nbplatform.active.dir}/harness:\
|
||||||
|
${nbplatform.active.dir}/java:\
|
||||||
|
${nbplatform.active.dir}/platform
|
||||||
|
disabled.modules=\
|
||||||
|
org.apache.tools.ant.module,\
|
||||||
|
org.netbeans.api.debugger.jpda,\
|
||||||
|
org.netbeans.api.java,\
|
||||||
|
org.netbeans.lib.nbjavac,\
|
||||||
|
org.netbeans.libs.cglib,\
|
||||||
|
org.netbeans.libs.javacapi,\
|
||||||
|
org.netbeans.libs.javacimpl,\
|
||||||
|
org.netbeans.libs.springframework,\
|
||||||
|
org.netbeans.modules.ant.browsetask,\
|
||||||
|
org.netbeans.modules.ant.debugger,\
|
||||||
|
org.netbeans.modules.ant.freeform,\
|
||||||
|
org.netbeans.modules.ant.grammar,\
|
||||||
|
org.netbeans.modules.ant.kit,\
|
||||||
|
org.netbeans.modules.beans,\
|
||||||
|
org.netbeans.modules.classfile,\
|
||||||
|
org.netbeans.modules.dbschema,\
|
||||||
|
org.netbeans.modules.debugger.jpda,\
|
||||||
|
org.netbeans.modules.debugger.jpda.ant,\
|
||||||
|
org.netbeans.modules.debugger.jpda.kit,\
|
||||||
|
org.netbeans.modules.debugger.jpda.projects,\
|
||||||
|
org.netbeans.modules.debugger.jpda.ui,\
|
||||||
|
org.netbeans.modules.debugger.jpda.visual,\
|
||||||
|
org.netbeans.modules.findbugs.installer,\
|
||||||
|
org.netbeans.modules.form,\
|
||||||
|
org.netbeans.modules.form.binding,\
|
||||||
|
org.netbeans.modules.form.j2ee,\
|
||||||
|
org.netbeans.modules.form.kit,\
|
||||||
|
org.netbeans.modules.form.nb,\
|
||||||
|
org.netbeans.modules.form.refactoring,\
|
||||||
|
org.netbeans.modules.hibernate,\
|
||||||
|
org.netbeans.modules.hibernatelib,\
|
||||||
|
org.netbeans.modules.hudson.ant,\
|
||||||
|
org.netbeans.modules.hudson.maven,\
|
||||||
|
org.netbeans.modules.i18n,\
|
||||||
|
org.netbeans.modules.i18n.form,\
|
||||||
|
org.netbeans.modules.j2ee.core.utilities,\
|
||||||
|
org.netbeans.modules.j2ee.eclipselink,\
|
||||||
|
org.netbeans.modules.j2ee.eclipselinkmodelgen,\
|
||||||
|
org.netbeans.modules.j2ee.jpa.refactoring,\
|
||||||
|
org.netbeans.modules.j2ee.jpa.verification,\
|
||||||
|
org.netbeans.modules.j2ee.metadata,\
|
||||||
|
org.netbeans.modules.j2ee.metadata.model.support,\
|
||||||
|
org.netbeans.modules.j2ee.persistence,\
|
||||||
|
org.netbeans.modules.j2ee.persistence.kit,\
|
||||||
|
org.netbeans.modules.j2ee.persistenceapi,\
|
||||||
|
org.netbeans.modules.java.api.common,\
|
||||||
|
org.netbeans.modules.java.debug,\
|
||||||
|
org.netbeans.modules.java.editor,\
|
||||||
|
org.netbeans.modules.java.editor.lib,\
|
||||||
|
org.netbeans.modules.java.examples,\
|
||||||
|
org.netbeans.modules.java.freeform,\
|
||||||
|
org.netbeans.modules.java.guards,\
|
||||||
|
org.netbeans.modules.java.helpset,\
|
||||||
|
org.netbeans.modules.java.hints,\
|
||||||
|
org.netbeans.modules.java.hints.declarative,\
|
||||||
|
org.netbeans.modules.java.hints.declarative.test,\
|
||||||
|
org.netbeans.modules.java.hints.legacy.spi,\
|
||||||
|
org.netbeans.modules.java.hints.test,\
|
||||||
|
org.netbeans.modules.java.hints.ui,\
|
||||||
|
org.netbeans.modules.java.j2seplatform,\
|
||||||
|
org.netbeans.modules.java.j2seproject,\
|
||||||
|
org.netbeans.modules.java.kit,\
|
||||||
|
org.netbeans.modules.java.lexer,\
|
||||||
|
org.netbeans.modules.java.navigation,\
|
||||||
|
org.netbeans.modules.java.platform,\
|
||||||
|
org.netbeans.modules.java.preprocessorbridge,\
|
||||||
|
org.netbeans.modules.java.project,\
|
||||||
|
org.netbeans.modules.java.source,\
|
||||||
|
org.netbeans.modules.java.source.ant,\
|
||||||
|
org.netbeans.modules.java.source.queries,\
|
||||||
|
org.netbeans.modules.java.source.queriesimpl,\
|
||||||
|
org.netbeans.modules.java.sourceui,\
|
||||||
|
org.netbeans.modules.java.testrunner,\
|
||||||
|
org.netbeans.modules.javadoc,\
|
||||||
|
org.netbeans.modules.javawebstart,\
|
||||||
|
org.netbeans.modules.junit,\
|
||||||
|
org.netbeans.modules.maven,\
|
||||||
|
org.netbeans.modules.maven.checkstyle,\
|
||||||
|
org.netbeans.modules.maven.coverage,\
|
||||||
|
org.netbeans.modules.maven.embedder,\
|
||||||
|
org.netbeans.modules.maven.grammar,\
|
||||||
|
org.netbeans.modules.maven.graph,\
|
||||||
|
org.netbeans.modules.maven.hints,\
|
||||||
|
org.netbeans.modules.maven.indexer,\
|
||||||
|
org.netbeans.modules.maven.junit,\
|
||||||
|
org.netbeans.modules.maven.kit,\
|
||||||
|
org.netbeans.modules.maven.model,\
|
||||||
|
org.netbeans.modules.maven.osgi,\
|
||||||
|
org.netbeans.modules.maven.persistence,\
|
||||||
|
org.netbeans.modules.maven.refactoring,\
|
||||||
|
org.netbeans.modules.maven.repository,\
|
||||||
|
org.netbeans.modules.maven.search,\
|
||||||
|
org.netbeans.modules.maven.spring,\
|
||||||
|
org.netbeans.modules.projectimport.eclipse.core,\
|
||||||
|
org.netbeans.modules.projectimport.eclipse.j2se,\
|
||||||
|
org.netbeans.modules.refactoring.java,\
|
||||||
|
org.netbeans.modules.spellchecker.bindings.java,\
|
||||||
|
org.netbeans.modules.spring.beans,\
|
||||||
|
org.netbeans.modules.testng,\
|
||||||
|
org.netbeans.modules.testng.ant,\
|
||||||
|
org.netbeans.modules.testng.maven,\
|
||||||
|
org.netbeans.modules.websvc.jaxws21,\
|
||||||
|
org.netbeans.modules.websvc.jaxws21api,\
|
||||||
|
org.netbeans.modules.websvc.saas.codegen.java,\
|
||||||
|
org.netbeans.modules.xml.jaxb,\
|
||||||
|
org.netbeans.modules.xml.tools.java,\
|
||||||
|
org.netbeans.spi.java.hints
|
||||||
|
|
3
FileExtMismatch/nbproject/project.properties
Normal file
3
FileExtMismatch/nbproject/project.properties
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
javac.source=1.7
|
||||||
|
javac.compilerargs=-Xlint -Xlint:-serial
|
||||||
|
spec.version.base=1.3
|
115
FileExtMismatch/nbproject/project.xml
Normal file
115
FileExtMismatch/nbproject/project.xml
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||||
|
<type>org.netbeans.modules.apisupport.project</type>
|
||||||
|
<configuration>
|
||||||
|
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
|
||||||
|
<code-name-base>org.sleuthkit.autopsy.fileextmismatch</code-name-base>
|
||||||
|
<suite-component/>
|
||||||
|
<module-dependencies>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.netbeans.api.progress</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<release-version>1</release-version>
|
||||||
|
<specification-version>1.32.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.netbeans.modules.options.api</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<release-version>1</release-version>
|
||||||
|
<specification-version>1.31.2</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.awt</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>7.55.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.dialogs</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>7.28.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.explorer</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>6.50.3</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.nodes</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>7.33.2</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.util</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>8.29.3</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.util.lookup</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>8.19.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.openide.windows</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>6.60.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.sleuthkit.autopsy.core</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<release-version>9</release-version>
|
||||||
|
<specification-version>7.0</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.sleuthkit.autopsy.corelibs</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<release-version>3</release-version>
|
||||||
|
<specification-version>1.1</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<code-name-base>org.sleuthkit.autopsy.filetypeid</code-name-base>
|
||||||
|
<build-prerequisite/>
|
||||||
|
<compile-dependency/>
|
||||||
|
<run-dependency>
|
||||||
|
<specification-version>1.0</specification-version>
|
||||||
|
</run-dependency>
|
||||||
|
</dependency>
|
||||||
|
</module-dependencies>
|
||||||
|
<public-packages>
|
||||||
|
<package>org.sleuthkit.autopsy.fileextmismatch</package>
|
||||||
|
</public-packages>
|
||||||
|
</data>
|
||||||
|
</configuration>
|
||||||
|
</project>
|
1
FileExtMismatch/nbproject/suite.properties
Normal file
1
FileExtMismatch/nbproject/suite.properties
Normal file
@ -0,0 +1 @@
|
|||||||
|
suite.dir=${basedir}/..
|
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2014 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.fileextmismatch;
|
||||||
|
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import javax.swing.AbstractAction;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do the context menu action for adding a new filename extension to
|
||||||
|
* the mismatch list for the MIME type of the selected node.
|
||||||
|
*/
|
||||||
|
public class AddFileExtensionAction extends AbstractAction {
|
||||||
|
private String extStr;
|
||||||
|
private String mimeTypeStr;
|
||||||
|
|
||||||
|
public AddFileExtensionAction(String menuItemStr, String extStr, String mimeTypeStr) {
|
||||||
|
super(menuItemStr);
|
||||||
|
this.mimeTypeStr = mimeTypeStr;
|
||||||
|
this.extStr = extStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent event) {
|
||||||
|
HashMap<String, String[]> editableMap = FileExtMismatchXML.getDefault().load();
|
||||||
|
ArrayList<String> editedExtensions = new ArrayList<>(Arrays.asList(editableMap.get(mimeTypeStr)));
|
||||||
|
editedExtensions.add(extStr);
|
||||||
|
|
||||||
|
// Old array will be replaced by new array for this key
|
||||||
|
editableMap.put(mimeTypeStr, editedExtensions.toArray(new String[0]));
|
||||||
|
|
||||||
|
if (!FileExtMismatchXML.getDefault().save(editableMap)) {
|
||||||
|
//error
|
||||||
|
JOptionPane.showMessageDialog(null, "Writing XML configuration file failed.", "Add Mismatch Extension Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
} // else //in the future we might want to update the statusbar to give feedback to the user
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
OpenIDE-Module-Name=FileExtMismatch
|
||||||
|
FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.text=Skip Known Files (NSRL)
|
||||||
|
FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.toolTipText=Depending on how many files have known hashes, checking this box will improve the speed of mismatch detection.
|
||||||
|
FileExtMismatchConfigPanel.extHeaderLabel.text=Allowed Extensions:
|
||||||
|
FileExtMismatchConfigPanel.userExtTextField.text=
|
||||||
|
FileExtMismatchConfigPanel.addExtButton.text=Add Extension
|
||||||
|
FileExtMismatchConfigPanel.removeExtButton.text=Remove Selected Extension
|
||||||
|
FileExtMismatchConfigPanel.saveButton.text=Save Configuration
|
||||||
|
FileExtMismatchConfigPanel.jLabel1.text=File Types:
|
||||||
|
FileExtMismatchConfigPanel.removeTypeButton.text=Remove Selected Type
|
||||||
|
FileExtMismatchConfigPanel.addTypeButton.text=Add Type
|
||||||
|
FileExtMismatchConfigPanel.userTypeTextField.text=
|
||||||
|
FileExtMismatchConfigPanel.extErrorLabel.text=\
|
||||||
|
FileExtMismatchConfigPanel.mimeErrLabel.text=\
|
||||||
|
FileExtMismatchConfigPanel.mimeRemoveErrLabel.text=\
|
||||||
|
FileExtMismatchConfigPanel.extRemoveErrLabel.text=\
|
||||||
|
FileExtMismatchConfigPanel.saveMsgLabel.text=\
|
||||||
|
FileExtMismatchSimpleConfigPanel.skipNoExtCheckBox.text=Skip Files Without Extensions
|
@ -0,0 +1,336 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jSplitPane1" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="saveButton" alignment="1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="saveMsgLabel" alignment="1" min="-2" pref="145" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jSplitPane1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="saveButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="saveMsgLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="saveButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
|
<Image iconType="3" name="/org/sleuthkit/autopsy/fileextmismatch/save16.png"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.saveButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="saveButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JSplitPane" name="jSplitPane1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="dividerLocation" type="int" value="430"/>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JPanel" name="mimePanel">
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
||||||
|
<JSplitPaneConstraints position="left"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane2" pref="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="userTypeTextField" min="-2" pref="128" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="addTypeButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="removeTypeButton" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="196" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="mimeErrLabel" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Component id="mimeRemoveErrLabel" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane2" min="-2" pref="250" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="userTypeTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="addTypeButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
|
||||||
|
<Component id="mimeErrLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="removeTypeButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="mimeRemoveErrLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace pref="45" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane2">
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTable" name="mimeTable">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
|
<Connection code="mimeTableModel" type="code"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JTextField" name="userTypeTextField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.userTypeTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="userTypeTextFieldFocusGained"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="addTypeButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.addTypeButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="addTypeButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="removeTypeButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.removeTypeButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="removeTypeButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="mimeErrLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" red="ff" type="rgb"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.mimeErrLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="mimeRemoveErrLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.mimeRemoveErrLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Container class="javax.swing.JPanel" name="extensionPanel">
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
||||||
|
<JSplitPaneConstraints position="right"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane3" pref="0" max="32767" attributes="0"/>
|
||||||
|
<Component id="extHeaderLabel" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
|
<Component id="removeExtButton" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="userExtTextField" min="-2" pref="48" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="addExtButton" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="66" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="extErrorLabel" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Component id="extRemoveErrLabel" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="extHeaderLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane3" min="-2" pref="285" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="userExtTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="addExtButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
|
||||||
|
<Component id="extErrorLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="removeExtButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="extRemoveErrLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTextField" name="userExtTextField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.userExtTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="userExtTextFieldFocusGained"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="addExtButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.addExtButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="addExtButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane3">
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTable" name="extTable">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
|
<Connection code="extTableModel" type="code"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JButton" name="removeExtButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.removeExtButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="removeExtButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="extHeaderLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.extHeaderLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="extErrorLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" red="ff" type="rgb"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.extErrorLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="extRemoveErrLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.extRemoveErrLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JLabel" name="saveMsgLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="ff" green="0" red="0" type="rgb"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchConfigPanel.saveMsgLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,704 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011 - 2013 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.fileextmismatch;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.ListSelectionModel;
|
||||||
|
import javax.swing.event.ListSelectionEvent;
|
||||||
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
import javax.swing.table.AbstractTableModel;
|
||||||
|
import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.filetypeid.FileTypeIdIngestModule;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Container panel for File Extension Mismatch Ingest Module advanced configuration options
|
||||||
|
*/
|
||||||
|
public final class FileExtMismatchConfigPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||||
|
private static Logger logger = Logger.getLogger(FileExtMismatchConfigPanel.class.getName());
|
||||||
|
private HashMap<String, String[]> editableMap = new HashMap<>();
|
||||||
|
private ArrayList<String> mimeList = null;
|
||||||
|
private ArrayList<String> currentExtensions = null;
|
||||||
|
private MimeTableModel mimeTableModel;
|
||||||
|
private ExtTableModel extTableModel;
|
||||||
|
private final String EXT_HEADER_LABEL = "Allowed Extensions for ";
|
||||||
|
private String selectedMime = "";
|
||||||
|
private String selectedExt = "";
|
||||||
|
ListSelectionModel lsm = null;
|
||||||
|
|
||||||
|
public FileExtMismatchConfigPanel() {
|
||||||
|
mimeTableModel = new MimeTableModel();
|
||||||
|
extTableModel = new ExtTableModel();
|
||||||
|
|
||||||
|
initComponents();
|
||||||
|
customizeComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void customizeComponents() {
|
||||||
|
setName("Advanced File Extension Mismatch Configuration");
|
||||||
|
|
||||||
|
// Handle selections on the left table
|
||||||
|
lsm = mimeTable.getSelectionModel();
|
||||||
|
lsm.addListSelectionListener(new ListSelectionListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
ListSelectionModel listSelectionModel = (ListSelectionModel) e.getSource();
|
||||||
|
if (!listSelectionModel.isSelectionEmpty()) {
|
||||||
|
int index = listSelectionModel.getMinSelectionIndex();
|
||||||
|
listSelectionModel.setSelectionInterval(index, index);
|
||||||
|
|
||||||
|
selectedMime = mimeList.get(index);
|
||||||
|
String labelStr = EXT_HEADER_LABEL + selectedMime + ":";
|
||||||
|
if (labelStr.length() > 80) {
|
||||||
|
labelStr = labelStr.substring(0, 80);
|
||||||
|
}
|
||||||
|
extHeaderLabel.setText(labelStr);
|
||||||
|
updateExtList();
|
||||||
|
|
||||||
|
extTableModel.resync();
|
||||||
|
//initButtons();
|
||||||
|
} else {
|
||||||
|
selectedMime = "";
|
||||||
|
currentExtensions = null;
|
||||||
|
extTableModel.resync();
|
||||||
|
}
|
||||||
|
|
||||||
|
clearErrLabels();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle selections on the right table
|
||||||
|
ListSelectionModel extLsm = extTable.getSelectionModel();
|
||||||
|
extLsm.addListSelectionListener(new ListSelectionListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
ListSelectionModel listSelectionModel = (ListSelectionModel) e.getSource();
|
||||||
|
if (!listSelectionModel.isSelectionEmpty()) {
|
||||||
|
int index = listSelectionModel.getMinSelectionIndex();
|
||||||
|
listSelectionModel.setSelectionInterval(index, index);
|
||||||
|
|
||||||
|
selectedExt = currentExtensions.get(index);
|
||||||
|
} else {
|
||||||
|
selectedExt = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
extRemoveErrLabel.setText(" ");
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearErrLabels() {
|
||||||
|
mimeErrLabel.setText(" ");
|
||||||
|
mimeRemoveErrLabel.setText(" ");
|
||||||
|
extRemoveErrLabel.setText(" ");
|
||||||
|
extErrorLabel.setText(" ");
|
||||||
|
saveMsgLabel.setText(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called from within the constructor to initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
|
* regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
saveButton = new javax.swing.JButton();
|
||||||
|
jSplitPane1 = new javax.swing.JSplitPane();
|
||||||
|
mimePanel = new javax.swing.JPanel();
|
||||||
|
jLabel1 = new javax.swing.JLabel();
|
||||||
|
jScrollPane2 = new javax.swing.JScrollPane();
|
||||||
|
mimeTable = new javax.swing.JTable();
|
||||||
|
userTypeTextField = new javax.swing.JTextField();
|
||||||
|
addTypeButton = new javax.swing.JButton();
|
||||||
|
removeTypeButton = new javax.swing.JButton();
|
||||||
|
mimeErrLabel = new javax.swing.JLabel();
|
||||||
|
mimeRemoveErrLabel = new javax.swing.JLabel();
|
||||||
|
extensionPanel = new javax.swing.JPanel();
|
||||||
|
userExtTextField = new javax.swing.JTextField();
|
||||||
|
addExtButton = new javax.swing.JButton();
|
||||||
|
jScrollPane3 = new javax.swing.JScrollPane();
|
||||||
|
extTable = new javax.swing.JTable();
|
||||||
|
removeExtButton = new javax.swing.JButton();
|
||||||
|
extHeaderLabel = new javax.swing.JLabel();
|
||||||
|
extErrorLabel = new javax.swing.JLabel();
|
||||||
|
extRemoveErrLabel = new javax.swing.JLabel();
|
||||||
|
saveMsgLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
|
saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/fileextmismatch/save16.png"))); // NOI18N
|
||||||
|
saveButton.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.saveButton.text")); // NOI18N
|
||||||
|
saveButton.setEnabled(false);
|
||||||
|
saveButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
saveButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
jSplitPane1.setDividerLocation(430);
|
||||||
|
|
||||||
|
jLabel1.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jLabel1.text")); // NOI18N
|
||||||
|
|
||||||
|
mimeTable.setModel(mimeTableModel);
|
||||||
|
jScrollPane2.setViewportView(mimeTable);
|
||||||
|
|
||||||
|
userTypeTextField.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.userTypeTextField.text")); // NOI18N
|
||||||
|
userTypeTextField.addFocusListener(new java.awt.event.FocusAdapter() {
|
||||||
|
public void focusGained(java.awt.event.FocusEvent evt) {
|
||||||
|
userTypeTextFieldFocusGained(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
addTypeButton.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.addTypeButton.text")); // NOI18N
|
||||||
|
addTypeButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
addTypeButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
removeTypeButton.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.removeTypeButton.text")); // NOI18N
|
||||||
|
removeTypeButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
removeTypeButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mimeErrLabel.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
|
mimeErrLabel.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.mimeErrLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
mimeRemoveErrLabel.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.mimeRemoveErrLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
javax.swing.GroupLayout mimePanelLayout = new javax.swing.GroupLayout(mimePanel);
|
||||||
|
mimePanel.setLayout(mimePanelLayout);
|
||||||
|
mimePanelLayout.setHorizontalGroup(
|
||||||
|
mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||||
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
||||||
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jLabel1)
|
||||||
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(userTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(addTypeButton))
|
||||||
|
.addComponent(removeTypeButton))
|
||||||
|
.addGap(0, 196, Short.MAX_VALUE))
|
||||||
|
.addComponent(mimeErrLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(mimeRemoveErrLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
mimePanelLayout.setVerticalGroup(
|
||||||
|
mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(jLabel1)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(userTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(addTypeButton))
|
||||||
|
.addGap(3, 3, 3)
|
||||||
|
.addComponent(mimeErrLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(removeTypeButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(mimeRemoveErrLabel)
|
||||||
|
.addContainerGap(45, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
|
||||||
|
jSplitPane1.setLeftComponent(mimePanel);
|
||||||
|
|
||||||
|
userExtTextField.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.userExtTextField.text")); // NOI18N
|
||||||
|
userExtTextField.addFocusListener(new java.awt.event.FocusAdapter() {
|
||||||
|
public void focusGained(java.awt.event.FocusEvent evt) {
|
||||||
|
userExtTextFieldFocusGained(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
addExtButton.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.addExtButton.text")); // NOI18N
|
||||||
|
addExtButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
addExtButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
extTable.setModel(extTableModel);
|
||||||
|
jScrollPane3.setViewportView(extTable);
|
||||||
|
|
||||||
|
removeExtButton.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.removeExtButton.text")); // NOI18N
|
||||||
|
removeExtButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
removeExtButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
extHeaderLabel.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.extHeaderLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
extErrorLabel.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
|
extErrorLabel.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.extErrorLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
extRemoveErrLabel.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.extRemoveErrLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
javax.swing.GroupLayout extensionPanelLayout = new javax.swing.GroupLayout(extensionPanel);
|
||||||
|
extensionPanel.setLayout(extensionPanelLayout);
|
||||||
|
extensionPanelLayout.setHorizontalGroup(
|
||||||
|
extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||||
|
.addComponent(extHeaderLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
||||||
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
|
.addComponent(removeExtButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(userExtTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(addExtButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
||||||
|
.addGap(0, 66, Short.MAX_VALUE))
|
||||||
|
.addComponent(extErrorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(extRemoveErrLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
extensionPanelLayout.setVerticalGroup(
|
||||||
|
extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, extensionPanelLayout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(extHeaderLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 285, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(userExtTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(addExtButton))
|
||||||
|
.addGap(2, 2, 2)
|
||||||
|
.addComponent(extErrorLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(removeExtButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(extRemoveErrLabel)
|
||||||
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
|
||||||
|
jSplitPane1.setRightComponent(extensionPanel);
|
||||||
|
|
||||||
|
saveMsgLabel.setForeground(new java.awt.Color(0, 0, 255));
|
||||||
|
saveMsgLabel.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.saveMsgLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
|
this.setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jSplitPane1)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(saveButton, javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addComponent(saveMsgLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE))))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(saveButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(saveMsgLabel)
|
||||||
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
// Add a user-provided filename extension string to the selecte mimetype
|
||||||
|
private void addExtButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addExtButtonActionPerformed
|
||||||
|
String newExt = userExtTextField.getText();
|
||||||
|
if (newExt.isEmpty()) {
|
||||||
|
extErrorLabel.setForeground(Color.red);
|
||||||
|
extErrorLabel.setText("Extension text is empty!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedMime.isEmpty()) {
|
||||||
|
extErrorLabel.setForeground(Color.red);
|
||||||
|
extErrorLabel.setText("No MIME type selected!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentExtensions.contains(newExt)) {
|
||||||
|
extErrorLabel.setForeground(Color.red);
|
||||||
|
extErrorLabel.setText("Extension already exists!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<String> editedExtensions = new ArrayList<>(Arrays.asList(editableMap.get(selectedMime)));
|
||||||
|
editedExtensions.add(newExt);
|
||||||
|
|
||||||
|
// Old array will be replaced by new array for this key
|
||||||
|
editableMap.put(selectedMime, editedExtensions.toArray(new String[0]));
|
||||||
|
|
||||||
|
// Refresh table
|
||||||
|
updateExtList();
|
||||||
|
extTableModel.resync();
|
||||||
|
|
||||||
|
// user feedback for successful add
|
||||||
|
extErrorLabel.setForeground(Color.blue);
|
||||||
|
extErrorLabel.setText("Extension " + newExt + " added.");
|
||||||
|
extRemoveErrLabel.setText(" ");
|
||||||
|
userExtTextField.setText("");
|
||||||
|
setIsModified();
|
||||||
|
}//GEN-LAST:event_addExtButtonActionPerformed
|
||||||
|
|
||||||
|
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed
|
||||||
|
store();
|
||||||
|
}//GEN-LAST:event_saveButtonActionPerformed
|
||||||
|
|
||||||
|
private void addTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addTypeButtonActionPerformed
|
||||||
|
String newMime = userTypeTextField.getText();
|
||||||
|
if (newMime.isEmpty()) {
|
||||||
|
mimeErrLabel.setForeground(Color.red);
|
||||||
|
mimeErrLabel.setText("MIME type text is empty!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mimeList.contains(newMime)) {
|
||||||
|
mimeErrLabel.setForeground(Color.red);
|
||||||
|
mimeErrLabel.setText("MIME type already exists!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!FileTypeIdIngestModule.isMimeTypeDetectable(newMime)) {
|
||||||
|
mimeErrLabel.setForeground(Color.red);
|
||||||
|
mimeErrLabel.setText("MIME type is not detectable by this module.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
editableMap.put(newMime, new String[0]);
|
||||||
|
|
||||||
|
// Refresh table
|
||||||
|
updateMimeList();
|
||||||
|
mimeTableModel.resync();
|
||||||
|
|
||||||
|
// user feedback for successful add
|
||||||
|
//selectByMimeString(newMime);
|
||||||
|
mimeErrLabel.setForeground(Color.blue);
|
||||||
|
mimeErrLabel.setText("MIME type " + newMime + " added.");
|
||||||
|
mimeRemoveErrLabel.setText(" ");
|
||||||
|
userTypeTextField.setText("");
|
||||||
|
setIsModified();
|
||||||
|
}//GEN-LAST:event_addTypeButtonActionPerformed
|
||||||
|
|
||||||
|
private void userExtTextFieldFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_userExtTextFieldFocusGained
|
||||||
|
extErrorLabel.setText(" "); //space so Swing doesn't mess up vertical spacing
|
||||||
|
}//GEN-LAST:event_userExtTextFieldFocusGained
|
||||||
|
|
||||||
|
private void userTypeTextFieldFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_userTypeTextFieldFocusGained
|
||||||
|
mimeErrLabel.setText(" "); //space so Swing doesn't mess up vertical spacing
|
||||||
|
}//GEN-LAST:event_userTypeTextFieldFocusGained
|
||||||
|
|
||||||
|
private void removeTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeTypeButtonActionPerformed
|
||||||
|
if (selectedMime.isEmpty()) {
|
||||||
|
mimeRemoveErrLabel.setForeground(Color.red);
|
||||||
|
mimeRemoveErrLabel.setText("No MIME type selected!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
editableMap.remove(selectedMime);
|
||||||
|
String deadMime = selectedMime;
|
||||||
|
|
||||||
|
// Refresh table
|
||||||
|
updateMimeList();
|
||||||
|
mimeTableModel.resync();
|
||||||
|
|
||||||
|
// user feedback for successful add
|
||||||
|
mimeRemoveErrLabel.setForeground(Color.blue);
|
||||||
|
mimeRemoveErrLabel.setText("MIME type " + deadMime + " deleted.");
|
||||||
|
setIsModified();
|
||||||
|
}//GEN-LAST:event_removeTypeButtonActionPerformed
|
||||||
|
|
||||||
|
private void removeExtButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeExtButtonActionPerformed
|
||||||
|
if (selectedExt.isEmpty()) {
|
||||||
|
extRemoveErrLabel.setForeground(Color.red);
|
||||||
|
extRemoveErrLabel.setText("No extension selected!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedMime.isEmpty()) {
|
||||||
|
extErrorLabel.setForeground(Color.red);
|
||||||
|
extErrorLabel.setText("No MIME type selected!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<String> editedExtensions = new ArrayList<>(Arrays.asList(editableMap.get(selectedMime)));
|
||||||
|
editedExtensions.remove(selectedExt);
|
||||||
|
String deadExt = selectedExt;
|
||||||
|
|
||||||
|
// Old array will be replaced by new array for this key
|
||||||
|
editableMap.put(selectedMime, editedExtensions.toArray(new String[0]));
|
||||||
|
|
||||||
|
// Refresh tables
|
||||||
|
updateExtList();
|
||||||
|
extTableModel.resync();
|
||||||
|
|
||||||
|
// user feedback for successful add
|
||||||
|
extRemoveErrLabel.setForeground(Color.blue);
|
||||||
|
extRemoveErrLabel.setText("Extension " + deadExt + " deleted.");
|
||||||
|
setIsModified();
|
||||||
|
}//GEN-LAST:event_removeExtButtonActionPerformed
|
||||||
|
|
||||||
|
private void updateMimeList() {
|
||||||
|
mimeList = new ArrayList<>(editableMap.keySet());
|
||||||
|
if (mimeList.size() > 0) {
|
||||||
|
Collections.sort(mimeList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateExtList() {
|
||||||
|
String[] temp = editableMap.get(selectedMime);
|
||||||
|
if (temp != null) {
|
||||||
|
currentExtensions = new ArrayList<>(Arrays.asList(temp));
|
||||||
|
if (temp.length > 0) {
|
||||||
|
Collections.sort(currentExtensions);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
currentExtensions = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void load() {
|
||||||
|
// Load the XML into a buffer that the user can modify. They can choose
|
||||||
|
// to save it back to the file after making changes.
|
||||||
|
editableMap = FileExtMismatchXML.getDefault().load();
|
||||||
|
updateMimeList();
|
||||||
|
updateExtList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void store() {
|
||||||
|
if (FileExtMismatchXML.getDefault().save(editableMap)) {
|
||||||
|
mimeErrLabel.setText(" ");
|
||||||
|
mimeRemoveErrLabel.setText(" ");
|
||||||
|
extRemoveErrLabel.setText(" ");
|
||||||
|
extErrorLabel.setText(" ");
|
||||||
|
|
||||||
|
saveMsgLabel.setText("Saved.");
|
||||||
|
saveButton.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
//error
|
||||||
|
JOptionPane.showMessageDialog(this, "Writing XML configuration file failed.", "Save Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setIsModified() {
|
||||||
|
saveButton.setEnabled(true);
|
||||||
|
saveMsgLabel.setText(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cancel() {
|
||||||
|
clearErrLabels();
|
||||||
|
load(); // The next time this panel is opened, we want it to be fresh
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ok() {
|
||||||
|
// if data is unsaved
|
||||||
|
if (saveButton.isEnabled()) {
|
||||||
|
int choice = JOptionPane.showConfirmDialog(this, "Would you like to save configuration changes?", "Unsaved Changes", JOptionPane.YES_NO_OPTION);
|
||||||
|
if (choice == JOptionPane.YES_OPTION) {
|
||||||
|
store();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
clearErrLabels();
|
||||||
|
load(); // The next time this panel is opened, we want it to be fresh
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean valid() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JButton addExtButton;
|
||||||
|
private javax.swing.JButton addTypeButton;
|
||||||
|
private javax.swing.JLabel extErrorLabel;
|
||||||
|
private javax.swing.JLabel extHeaderLabel;
|
||||||
|
private javax.swing.JLabel extRemoveErrLabel;
|
||||||
|
private javax.swing.JTable extTable;
|
||||||
|
private javax.swing.JPanel extensionPanel;
|
||||||
|
private javax.swing.JLabel jLabel1;
|
||||||
|
private javax.swing.JScrollPane jScrollPane2;
|
||||||
|
private javax.swing.JScrollPane jScrollPane3;
|
||||||
|
private javax.swing.JSplitPane jSplitPane1;
|
||||||
|
private javax.swing.JLabel mimeErrLabel;
|
||||||
|
private javax.swing.JPanel mimePanel;
|
||||||
|
private javax.swing.JLabel mimeRemoveErrLabel;
|
||||||
|
private javax.swing.JTable mimeTable;
|
||||||
|
private javax.swing.JButton removeExtButton;
|
||||||
|
private javax.swing.JButton removeTypeButton;
|
||||||
|
private javax.swing.JButton saveButton;
|
||||||
|
private javax.swing.JLabel saveMsgLabel;
|
||||||
|
private javax.swing.JTextField userExtTextField;
|
||||||
|
private javax.swing.JTextField userTypeTextField;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
|
private class MimeTableModel extends AbstractTableModel {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRowCount() {
|
||||||
|
return editableMap == null ? 0 : editableMap.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getColumnName(int column) {
|
||||||
|
String colName = null;
|
||||||
|
|
||||||
|
switch (column) {
|
||||||
|
case 0:
|
||||||
|
colName = "MIME Type";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
|
||||||
|
}
|
||||||
|
return colName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
||||||
|
Object ret = null;
|
||||||
|
if ((mimeList == null) || (rowIndex > mimeList.size())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String word = mimeList.get(rowIndex);
|
||||||
|
switch (columnIndex) {
|
||||||
|
case 0:
|
||||||
|
ret = (Object) word;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.log(Level.SEVERE, "Invalid table column index: " + columnIndex);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> getColumnClass(int c) {
|
||||||
|
return getValueAt(0, c).getClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
void resync() {
|
||||||
|
fireTableDataChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ExtTableModel extends AbstractTableModel {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRowCount() {
|
||||||
|
return currentExtensions == null ? 0 : currentExtensions.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getColumnName(int column) {
|
||||||
|
String colName = null;
|
||||||
|
|
||||||
|
switch (column) {
|
||||||
|
case 0:
|
||||||
|
colName = "Extension";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
|
||||||
|
}
|
||||||
|
return colName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
||||||
|
Object ret = null;
|
||||||
|
|
||||||
|
if ((currentExtensions == null) || (currentExtensions.size() == 0) || (rowIndex > currentExtensions.size())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String word = currentExtensions.get(rowIndex);
|
||||||
|
switch (columnIndex) {
|
||||||
|
case 0:
|
||||||
|
ret = (Object) word;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.log(Level.SEVERE, "Invalid table column index: " + columnIndex);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> getColumnClass(int c) {
|
||||||
|
return getValueAt(0, c).getClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
void resync() {
|
||||||
|
fireTableDataChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2014 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.fileextmismatch;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import javax.swing.Action;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
import org.openide.util.Lookup;
|
||||||
|
import org.openide.util.Utilities;
|
||||||
|
import org.openide.util.lookup.ServiceProvider;
|
||||||
|
import org.sleuthkit.autopsy.corecomponentinterfaces.ContextMenuActionsProvider;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestConfigurator;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This creates a single context menu item for adding a new filename extension to
|
||||||
|
* the mismatch list for the MIME type of the selected node.
|
||||||
|
*/
|
||||||
|
@ServiceProvider(service = ContextMenuActionsProvider.class)
|
||||||
|
public class FileExtMismatchContextMenuActionsProvider implements ContextMenuActionsProvider {
|
||||||
|
@Override
|
||||||
|
public List<Action> getActions() {
|
||||||
|
ArrayList<Action> actions = new ArrayList<>();
|
||||||
|
|
||||||
|
// Ignore if file ingest is in progress.
|
||||||
|
IngestConfigurator ingestConfigurator = Lookup.getDefault().lookup(IngestConfigurator.class);
|
||||||
|
if (ingestConfigurator != null && !ingestConfigurator.isIngestRunning()) {
|
||||||
|
|
||||||
|
final Collection<? extends BlackboardArtifact> selectedArts = Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class);
|
||||||
|
|
||||||
|
// Prevent multiselect
|
||||||
|
if (selectedArts.size() == 1) {
|
||||||
|
|
||||||
|
for (BlackboardArtifact nodeArt : selectedArts) {
|
||||||
|
|
||||||
|
// Only for mismatch results
|
||||||
|
if (nodeArt.getArtifactTypeName().equals("TSK_EXT_MISMATCH_DETECTED")) {
|
||||||
|
String mimeTypeStr = "";
|
||||||
|
String extStr = "";
|
||||||
|
|
||||||
|
AbstractFile af = null;
|
||||||
|
try {
|
||||||
|
af = nodeArt.getSleuthkitCase().getAbstractFileById(nodeArt.getObjectID());
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
Logger.getLogger(FileExtMismatchContextMenuActionsProvider.class.getName()).log(Level.SEVERE, "Error getting file by id", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (af != null) {
|
||||||
|
try {
|
||||||
|
int i = af.getName().lastIndexOf(".");
|
||||||
|
if ((i > -1) && ((i + 1) < af.getName().length())) {
|
||||||
|
extStr = af.getName().substring(i + 1).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<BlackboardArtifact> artList = af.getAllArtifacts();
|
||||||
|
for (BlackboardArtifact art : artList) {
|
||||||
|
List<BlackboardAttribute> atrList = art.getAttributes();
|
||||||
|
for (BlackboardAttribute att : atrList) {
|
||||||
|
if (att.getAttributeTypeID() == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_FILE_TYPE_SIG.getTypeID()) {
|
||||||
|
mimeTypeStr = att.getValueString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!mimeTypeStr.isEmpty()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
Logger.getLogger(FileExtMismatchContextMenuActionsProvider.class.getName()).log(Level.SEVERE, "Error looking up blackboard attributes", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!extStr.isEmpty() && !mimeTypeStr.isEmpty()) {
|
||||||
|
// Limit max size so the context window doesn't get ridiculously wide
|
||||||
|
if (extStr.length() > 10) {
|
||||||
|
extStr = extStr.substring(0, 9);
|
||||||
|
}
|
||||||
|
if (mimeTypeStr.length() > 40) {
|
||||||
|
mimeTypeStr = mimeTypeStr.substring(0, 39);
|
||||||
|
}
|
||||||
|
String menuItemStr = "Add extension " + extStr + " as matching MIME type " + mimeTypeStr;
|
||||||
|
actions.add(new AddFileExtensionAction(menuItemStr, extStr, mimeTypeStr));
|
||||||
|
|
||||||
|
// Check if already added
|
||||||
|
HashMap<String, String[]> editableMap = FileExtMismatchXML.getDefault().load();
|
||||||
|
ArrayList<String> editedExtensions = new ArrayList<>(Arrays.asList(editableMap.get(mimeTypeStr)));
|
||||||
|
if (editedExtensions.contains(extStr)) {
|
||||||
|
// Informs the user that they have already added this extension to this MIME type
|
||||||
|
actions.get(0).setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return actions;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,267 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011 - 2013 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.fileextmismatch;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Version;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestMessage;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestModuleAbstractFile;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestModuleInit;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestServices;
|
||||||
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import org.sleuthkit.autopsy.ingest.PipelineContext;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
import org.sleuthkit.datamodel.TskData;
|
||||||
|
import org.sleuthkit.datamodel.TskData.FileKnown;
|
||||||
|
import org.sleuthkit.datamodel.TskException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flags mismatched filename extensions based on file signature.
|
||||||
|
*/
|
||||||
|
public class FileExtMismatchIngestModule extends org.sleuthkit.autopsy.ingest.IngestModuleAbstractFile {
|
||||||
|
private static FileExtMismatchIngestModule defaultInstance = null;
|
||||||
|
private static final Logger logger = Logger.getLogger(FileExtMismatchIngestModule.class.getName());
|
||||||
|
public static final String MODULE_NAME = "File Extension Mismatch Detection";
|
||||||
|
public static final String MODULE_DESCRIPTION = "Flags mismatched filename extensions based on file signature.";
|
||||||
|
public static final String MODULE_VERSION = Version.getVersion();
|
||||||
|
private static final String ART_NAME = "TSK_MISMATCH";
|
||||||
|
|
||||||
|
private static long processTime = 0;
|
||||||
|
private static int messageId = 0;
|
||||||
|
private static long numFiles = 0;
|
||||||
|
private static boolean skipKnown = false;
|
||||||
|
private static boolean skipNoExt = true;
|
||||||
|
|
||||||
|
private int attrId = -1;
|
||||||
|
private int attrId2 = -1;
|
||||||
|
private FileExtMismatchSimpleConfigPanel simpleConfigPanel;
|
||||||
|
private FileExtMismatchConfigPanel advancedConfigPanel;
|
||||||
|
private IngestServices services;
|
||||||
|
private HashMap<String, String[]> SigTypeToExtMap = new HashMap<>();
|
||||||
|
private String currActualExt = "";
|
||||||
|
private String currActualSigType = "";
|
||||||
|
|
||||||
|
// Private to ensure Singleton status
|
||||||
|
private FileExtMismatchIngestModule() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// File-level ingest modules are currently singleton -- this is required
|
||||||
|
public static synchronized FileExtMismatchIngestModule getDefault() {
|
||||||
|
//defaultInstance is a private static class variable
|
||||||
|
if (defaultInstance == null) {
|
||||||
|
defaultInstance = new FileExtMismatchIngestModule();
|
||||||
|
}
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(IngestModuleInit initContext) {
|
||||||
|
services = IngestServices.getDefault();
|
||||||
|
|
||||||
|
// Load mapping
|
||||||
|
FileExtMismatchXML xmlLoader = FileExtMismatchXML.getDefault();
|
||||||
|
SigTypeToExtMap = xmlLoader.load();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProcessResult process(PipelineContext<IngestModuleAbstractFile> pipelineContext, AbstractFile abstractFile) {
|
||||||
|
// skip non-files
|
||||||
|
if ((abstractFile.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS) ||
|
||||||
|
(abstractFile.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNUSED_BLOCKS)) {
|
||||||
|
|
||||||
|
return ProcessResult.OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skipKnown && (abstractFile.getKnown() == FileKnown.KNOWN)) {
|
||||||
|
return ProcessResult.OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
boolean flag = compareSigTypeToExt(abstractFile);
|
||||||
|
|
||||||
|
processTime += (System.currentTimeMillis() - startTime);
|
||||||
|
numFiles++;
|
||||||
|
|
||||||
|
if (flag) {
|
||||||
|
// add artifact
|
||||||
|
BlackboardArtifact bart = abstractFile.newArtifact(ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED);
|
||||||
|
|
||||||
|
services.fireModuleDataEvent(new ModuleDataEvent(MODULE_NAME, ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED, Collections.singletonList(bart)));
|
||||||
|
}
|
||||||
|
return ProcessResult.OK;
|
||||||
|
} catch (TskException ex) {
|
||||||
|
logger.log(Level.WARNING, "Error matching file signature", ex);
|
||||||
|
return ProcessResult.ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean compareSigTypeToExt(AbstractFile abstractFile) {
|
||||||
|
try {
|
||||||
|
currActualExt = "";
|
||||||
|
int i = abstractFile.getName().lastIndexOf(".");
|
||||||
|
if ((i > -1) && ((i + 1) < abstractFile.getName().length())) {
|
||||||
|
currActualExt = abstractFile.getName().substring(i + 1).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we are skipping names with no extension
|
||||||
|
if (skipNoExt && currActualExt.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find file_sig value.
|
||||||
|
// getArtifacts by type doesn't seem to work, so get all artifacts
|
||||||
|
ArrayList<BlackboardArtifact> artList = abstractFile.getAllArtifacts();
|
||||||
|
|
||||||
|
for (BlackboardArtifact art : artList) {
|
||||||
|
List<BlackboardAttribute> atrList = art.getAttributes();
|
||||||
|
for (BlackboardAttribute att : atrList) {
|
||||||
|
if (att.getAttributeTypeID() == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_FILE_TYPE_SIG.getTypeID()) {
|
||||||
|
currActualSigType = att.getValueString();
|
||||||
|
|
||||||
|
//get known allowed values from the map for this type
|
||||||
|
String[] slist = SigTypeToExtMap.get(att.getValueString());
|
||||||
|
if (slist != null) {
|
||||||
|
List<String> allowedExtList = Arrays.asList(slist);
|
||||||
|
|
||||||
|
// see if the filename ext is in the allowed list
|
||||||
|
if (allowedExtList != null) {
|
||||||
|
for (String e : allowedExtList) {
|
||||||
|
if (e.equals(currActualExt)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true; //potential mismatch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete() {
|
||||||
|
StringBuilder detailsSb = new StringBuilder();
|
||||||
|
//details
|
||||||
|
detailsSb.append("<table border='0' cellpadding='4' width='280'>");
|
||||||
|
|
||||||
|
detailsSb.append("<tr><td>"+MODULE_DESCRIPTION+"</td></tr>");
|
||||||
|
|
||||||
|
detailsSb.append("<tr><td>Total Processing Time</td><td>").append(processTime).append("</td></tr>\n");
|
||||||
|
detailsSb.append("<tr><td>Total Files Processed</td><td>").append(numFiles).append("</td></tr>\n");
|
||||||
|
detailsSb.append("</table>");
|
||||||
|
|
||||||
|
services.postMessage(IngestMessage.createMessage(++messageId, IngestMessage.MessageType.INFO, this, "File Extension Mismatch Results", detailsSb.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return MODULE_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return MODULE_DESCRIPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getVersion() {
|
||||||
|
return MODULE_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasSimpleConfiguration() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasAdvancedConfiguration() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public javax.swing.JPanel getSimpleConfiguration(String context) {
|
||||||
|
if (simpleConfigPanel == null) {
|
||||||
|
simpleConfigPanel = new FileExtMismatchSimpleConfigPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
return simpleConfigPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public javax.swing.JPanel getAdvancedConfiguration(String context) {
|
||||||
|
getPanel().load();
|
||||||
|
return getPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private FileExtMismatchConfigPanel getPanel() {
|
||||||
|
if (advancedConfigPanel == null) {
|
||||||
|
advancedConfigPanel = new FileExtMismatchConfigPanel();
|
||||||
|
}
|
||||||
|
return advancedConfigPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveAdvancedConfiguration() {
|
||||||
|
getPanel().store();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasBackgroundJobsRunning() {
|
||||||
|
// we're single threaded...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSkipKnown(boolean flag) {
|
||||||
|
skipKnown = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSkipNoExt(boolean flag) {
|
||||||
|
skipNoExt = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* To change this template, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.fileextmismatch;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyChangeSupport;
|
||||||
|
import javax.swing.JComponent;
|
||||||
|
import org.netbeans.spi.options.OptionsPanelController;
|
||||||
|
import org.openide.util.HelpCtx;
|
||||||
|
import org.openide.util.Lookup;
|
||||||
|
|
||||||
|
@OptionsPanelController.TopLevelRegistration(
|
||||||
|
categoryName = "#OptionsCategory_Name_FileExtMismatchOptions",
|
||||||
|
iconBase = "org/sleuthkit/autopsy/fileextmismatch/options-icon.png",
|
||||||
|
position = 4,
|
||||||
|
keywords = "#OptionsCategory_FileExtMismatch",
|
||||||
|
keywordsCategory = "KeywordSearchOptions")
|
||||||
|
@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_FileExtMismatchOptions=File Ext Mismatch", "OptionsCategory_FileExtMismatch=File Ext Mismatch"})
|
||||||
|
public final class FileExtMismatchOptionsPanelController extends OptionsPanelController {
|
||||||
|
|
||||||
|
private FileExtMismatchConfigPanel panel;
|
||||||
|
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
|
||||||
|
private boolean changed;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
getPanel().load();
|
||||||
|
changed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyChanges() {
|
||||||
|
//getPanel().store();
|
||||||
|
getPanel().ok();
|
||||||
|
changed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel() {
|
||||||
|
getPanel().cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isValid() {
|
||||||
|
return getPanel().valid();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChanged() {
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HelpCtx getHelpCtx() {
|
||||||
|
return null; // new HelpCtx("...ID") if you have a help set
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JComponent getComponent(Lookup masterLookup) {
|
||||||
|
return getPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
pcs.addPropertyChangeListener(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener l) {
|
||||||
|
pcs.removePropertyChangeListener(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FileExtMismatchConfigPanel getPanel() {
|
||||||
|
if (panel == null) {
|
||||||
|
panel = new FileExtMismatchConfigPanel();
|
||||||
|
}
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void changed() {
|
||||||
|
if (!changed) {
|
||||||
|
changed = true;
|
||||||
|
pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true);
|
||||||
|
}
|
||||||
|
pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
|
<Component id="skipKnownCheckBox" max="32767" attributes="0"/>
|
||||||
|
<Component id="skipNoExtCheckBox" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace pref="127" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="-2" pref="11" max="-2" attributes="0"/>
|
||||||
|
<Component id="skipKnownCheckBox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="skipNoExtCheckBox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace pref="152" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="skipKnownCheckBox">
|
||||||
|
<Properties>
|
||||||
|
<Property name="selected" type="boolean" value="true"/>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="skipKnownCheckBoxActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="skipNoExtCheckBox">
|
||||||
|
<Properties>
|
||||||
|
<Property name="selected" type="boolean" value="true"/>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/fileextmismatch/Bundle.properties" key="FileExtMismatchSimpleConfigPanel.skipNoExtCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="skipNoExtCheckBoxActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011 - 2013 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.fileextmismatch;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instances of this class provide a simplified UI for managing the hash sets configuration.
|
||||||
|
*/
|
||||||
|
public class FileExtMismatchSimpleConfigPanel extends javax.swing.JPanel {
|
||||||
|
|
||||||
|
public FileExtMismatchSimpleConfigPanel() {
|
||||||
|
initComponents();
|
||||||
|
customizeComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void customizeComponents() {
|
||||||
|
// Hidden for now
|
||||||
|
skipKnownCheckBox.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** This method is called from within the constructor to
|
||||||
|
* initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is
|
||||||
|
* always regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
skipKnownCheckBox = new javax.swing.JCheckBox();
|
||||||
|
skipNoExtCheckBox = new javax.swing.JCheckBox();
|
||||||
|
|
||||||
|
skipKnownCheckBox.setSelected(true);
|
||||||
|
skipKnownCheckBox.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchSimpleConfigPanel.class, "FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.text")); // NOI18N
|
||||||
|
skipKnownCheckBox.setToolTipText(org.openide.util.NbBundle.getMessage(FileExtMismatchSimpleConfigPanel.class, "FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.toolTipText")); // NOI18N
|
||||||
|
skipKnownCheckBox.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
skipKnownCheckBoxActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
skipNoExtCheckBox.setSelected(true);
|
||||||
|
skipNoExtCheckBox.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchSimpleConfigPanel.class, "FileExtMismatchSimpleConfigPanel.skipNoExtCheckBox.text")); // NOI18N
|
||||||
|
skipNoExtCheckBox.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
skipNoExtCheckBoxActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
|
this.setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(10, 10, 10)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
|
.addComponent(skipKnownCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(skipNoExtCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
.addContainerGap(127, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(11, 11, 11)
|
||||||
|
.addComponent(skipKnownCheckBox)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(skipNoExtCheckBox)
|
||||||
|
.addContainerGap(152, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void skipKnownCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_skipKnownCheckBoxActionPerformed
|
||||||
|
FileExtMismatchIngestModule.setSkipKnown(skipKnownCheckBox.isSelected());
|
||||||
|
}//GEN-LAST:event_skipKnownCheckBoxActionPerformed
|
||||||
|
|
||||||
|
private void skipNoExtCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_skipNoExtCheckBoxActionPerformed
|
||||||
|
FileExtMismatchIngestModule.setSkipNoExt(skipNoExtCheckBox.isSelected());
|
||||||
|
}//GEN-LAST:event_skipNoExtCheckBoxActionPerformed
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JCheckBox skipKnownCheckBox;
|
||||||
|
private javax.swing.JCheckBox skipNoExtCheckBox;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
}
|
@ -0,0 +1,184 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011 - 2013 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.fileextmismatch;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.XMLUtil;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Storage of file extension mismatch configuration, which maps mimetypes to
|
||||||
|
* allowable filename extensions.
|
||||||
|
*/
|
||||||
|
public class FileExtMismatchXML {
|
||||||
|
private static final Logger logger = Logger.getLogger(FileExtMismatchXML.class.getName());
|
||||||
|
private static FileExtMismatchXML defaultInstance = null;
|
||||||
|
|
||||||
|
private static final String ENCODING = "UTF-8";
|
||||||
|
private static final String XSDFILE = "MismatchConfigSchema.xsd";
|
||||||
|
|
||||||
|
private static final String ROOT_EL = "mismatch_config";
|
||||||
|
private static final String SIG_EL = "signature";
|
||||||
|
private static final String EXT_EL = "ext";
|
||||||
|
private static final String SIG_MIMETYPE_ATTR = "mimetype";
|
||||||
|
|
||||||
|
private static final String DEFAULT_CONFIG_FILE_NAME = "mismatch_config.xml";
|
||||||
|
|
||||||
|
protected String filePath;
|
||||||
|
|
||||||
|
FileExtMismatchXML(String filePath) {
|
||||||
|
this.filePath = filePath;
|
||||||
|
|
||||||
|
try {
|
||||||
|
boolean extracted = PlatformUtil.extractResourceToUserConfigDir(FileExtMismatchXML.class, DEFAULT_CONFIG_FILE_NAME);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Error copying default mismatch configuration to user dir ", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Singleton provides default configuration from user's directory; user CAN
|
||||||
|
* modify this file.
|
||||||
|
*/
|
||||||
|
public static FileExtMismatchXML getDefault() {
|
||||||
|
if (defaultInstance == null) {
|
||||||
|
final String FILTER_CONFIG_FILE = PlatformUtil.getUserConfigDirectory() + File.separator + DEFAULT_CONFIG_FILE_NAME;
|
||||||
|
defaultInstance = new FileExtMismatchXML(FILTER_CONFIG_FILE);
|
||||||
|
}
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load and parse XML
|
||||||
|
*
|
||||||
|
* @return Loaded hash map or null on error or null if data does not exist
|
||||||
|
*/
|
||||||
|
public HashMap<String, String[]> load() {
|
||||||
|
HashMap<String, String[]> sigTypeToExtMap = new HashMap<>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
final Document doc = XMLUtil.loadDoc(FileExtMismatchXML.class, filePath, XSDFILE);
|
||||||
|
if (doc == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
if (root == null) {
|
||||||
|
logger.log(Level.SEVERE, "Error loading config file: invalid file format (bad root).");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeList sigNList = root.getElementsByTagName(SIG_EL);
|
||||||
|
final int numSigs = sigNList.getLength();
|
||||||
|
|
||||||
|
if (numSigs == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int sigIndex = 0; sigIndex < numSigs; ++sigIndex) {
|
||||||
|
Element sigEl = (Element)sigNList.item(sigIndex);
|
||||||
|
final String mimetype = sigEl.getAttribute(SIG_MIMETYPE_ATTR);
|
||||||
|
|
||||||
|
NodeList extNList = sigEl.getElementsByTagName(EXT_EL);
|
||||||
|
final int numExts = extNList.getLength();
|
||||||
|
|
||||||
|
if (numExts != 0) {
|
||||||
|
List<String> extStrings = new ArrayList<>();
|
||||||
|
for(int extIndex = 0; extIndex < numExts; ++extIndex) {
|
||||||
|
Element extEl = (Element)extNList.item(extIndex);
|
||||||
|
extStrings.add(extEl.getTextContent());
|
||||||
|
}
|
||||||
|
String[] sarray = (String[])extStrings.toArray(new String[0]);
|
||||||
|
sigTypeToExtMap.put(mimetype, sarray);
|
||||||
|
} else {
|
||||||
|
sigTypeToExtMap.put(mimetype, null); //ok to have an empty type (the ingest module will not use it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.log(Level.SEVERE, "Error loading config file.", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return sigTypeToExtMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save XML to filePath, overwriting it if it already exists
|
||||||
|
*
|
||||||
|
* @param sigTypeToExtMap String arrays of extensions mapped to each string mimetype.
|
||||||
|
* @return Loaded hash map or null on error or null if data does not exist
|
||||||
|
*/
|
||||||
|
public boolean save(HashMap<String, String[]> sigTypeToExtMap) {
|
||||||
|
boolean success = false;
|
||||||
|
|
||||||
|
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
|
||||||
|
|
||||||
|
try {
|
||||||
|
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
|
||||||
|
Document doc = docBuilder.newDocument();
|
||||||
|
|
||||||
|
Element rootEl = doc.createElement(ROOT_EL);
|
||||||
|
doc.appendChild(rootEl);
|
||||||
|
|
||||||
|
Iterator<String> keyIt = sigTypeToExtMap.keySet().iterator();
|
||||||
|
|
||||||
|
while (keyIt.hasNext()) {
|
||||||
|
String key = keyIt.next();
|
||||||
|
Element sigEl = doc.createElement(SIG_EL);
|
||||||
|
sigEl.setAttribute(SIG_MIMETYPE_ATTR, key);
|
||||||
|
|
||||||
|
String[] extArray = sigTypeToExtMap.get(key);
|
||||||
|
if (extArray != null) {
|
||||||
|
ArrayList<String> extList = new ArrayList<>(Arrays.asList(extArray));
|
||||||
|
for (String ext : extList) {
|
||||||
|
Element extEl = doc.createElement(EXT_EL);
|
||||||
|
extEl.setTextContent(ext);
|
||||||
|
sigEl.appendChild(extEl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rootEl.appendChild(sigEl);
|
||||||
|
}
|
||||||
|
|
||||||
|
success = XMLUtil.saveDoc(FileExtMismatchXML.class, filePath, ENCODING, doc);
|
||||||
|
|
||||||
|
} catch (ParserConfigurationException e) {
|
||||||
|
logger.log(Level.SEVERE, "Error saving keyword list: can't initialize parser.", e);
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<xs:element name="mismatch_config">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="signature">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element maxOccurs="unbounded" name="ext" type="xs:string" />
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="mimetype" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
@ -0,0 +1,295 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<mismatch_config>
|
||||||
|
<signature mimetype="text/plain">
|
||||||
|
<ext>txt</ext>
|
||||||
|
<ext>ini</ext>
|
||||||
|
<ext>inf</ext>
|
||||||
|
<ext>url</ext>
|
||||||
|
<ext>reg</ext>
|
||||||
|
<ext>cfg</ext>
|
||||||
|
<ext>log</ext>
|
||||||
|
<ext>lo_</ext>
|
||||||
|
<ext>dat</ext>
|
||||||
|
<ext>lst</ext>
|
||||||
|
<ext>xml</ext>
|
||||||
|
<ext>dtd</ext>
|
||||||
|
<ext>xsd</ext>
|
||||||
|
<ext>xdr</ext>
|
||||||
|
<ext>xsl</ext>
|
||||||
|
<ext>xsml</ext>
|
||||||
|
<ext>kml</ext>
|
||||||
|
<ext>wsdl</ext>
|
||||||
|
<ext>box</ext>
|
||||||
|
<ext>rdf</ext>
|
||||||
|
<ext>manifest</ext>
|
||||||
|
<ext>htm</ext>
|
||||||
|
<ext>html</ext>
|
||||||
|
<ext>shtml</ext>
|
||||||
|
<ext>shtm</ext>
|
||||||
|
<ext>xhtml</ext>
|
||||||
|
<ext>hta</ext>
|
||||||
|
<ext>css</ext>
|
||||||
|
<ext>js</ext>
|
||||||
|
<ext>jsm</ext>
|
||||||
|
<ext>vbs</ext>
|
||||||
|
<ext>vb</ext>
|
||||||
|
<ext>php</ext>
|
||||||
|
<ext>php3</ext>
|
||||||
|
<ext>phtml</ext>
|
||||||
|
<ext>h</ext>
|
||||||
|
<ext>hpp</ext>
|
||||||
|
<ext>hxx</ext>
|
||||||
|
<ext>cpp</ext>
|
||||||
|
<ext>cxx</ext>
|
||||||
|
<ext>cc</ext>
|
||||||
|
<ext>c</ext>
|
||||||
|
<ext>java</ext>
|
||||||
|
<ext>cs</ext>
|
||||||
|
<ext>asp</ext>
|
||||||
|
<ext>aspx</ext>
|
||||||
|
<ext>axd</ext>
|
||||||
|
<ext>ashx</ext>
|
||||||
|
<ext>properties</ext>
|
||||||
|
<ext>mak</ext>
|
||||||
|
<ext>cmake</ext>
|
||||||
|
<ext>la</ext>
|
||||||
|
<ext>pl</ext>
|
||||||
|
<ext>pm</ext>
|
||||||
|
<ext>plx</ext>
|
||||||
|
<ext>py</ext>
|
||||||
|
<ext>pyw</ext>
|
||||||
|
<ext>bat</ext>
|
||||||
|
<ext>lua</ext>
|
||||||
|
<ext>tex</ext>
|
||||||
|
<ext>lsp</ext>
|
||||||
|
<ext>lisp</ext>
|
||||||
|
<ext>rb</ext>
|
||||||
|
<ext>rbw</ext>
|
||||||
|
<ext>ps</ext>
|
||||||
|
<ext>json</ext>
|
||||||
|
<ext>mof</ext>
|
||||||
|
<ext>mfl</ext>
|
||||||
|
<ext>inc</ext>
|
||||||
|
<ext>milk</ext>
|
||||||
|
<ext>acro</ext>
|
||||||
|
<ext>adm</ext>
|
||||||
|
<ext>dun</ext>
|
||||||
|
<ext>obe</ext>
|
||||||
|
<ext>pro</ext>
|
||||||
|
<ext>sam</ext>
|
||||||
|
<ext>cmd</ext>
|
||||||
|
<ext>rat</ext>
|
||||||
|
<ext>htt</ext>
|
||||||
|
<ext>iem</ext>
|
||||||
|
<ext>policy</ext>
|
||||||
|
<ext>pc</ext>
|
||||||
|
<ext>catalog</ext>
|
||||||
|
<ext>hlp</ext>
|
||||||
|
<ext>cnt</ext>
|
||||||
|
<ext>sql</ext>
|
||||||
|
<ext>rbf</ext>
|
||||||
|
<ext>rsp</ext>
|
||||||
|
<ext>wpl</ext>
|
||||||
|
<ext>dic</ext>
|
||||||
|
<ext>aff</ext>
|
||||||
|
<ext>iqy</ext>
|
||||||
|
<ext>ecf</ext>
|
||||||
|
<ext>elm</ext>
|
||||||
|
<ext>ent</ext>
|
||||||
|
<ext>gdl</ext>
|
||||||
|
<ext>gpd</ext>
|
||||||
|
<ext>isp</ext>
|
||||||
|
<ext>theme</ext>
|
||||||
|
<ext>nt</ext>
|
||||||
|
<ext>cty</ext>
|
||||||
|
<ext>icw</ext>
|
||||||
|
<ext>man</ext>
|
||||||
|
<ext>ppd</ext>
|
||||||
|
<ext>cpx</ext>
|
||||||
|
<ext>scp</ext>
|
||||||
|
<ext>ver</ext>
|
||||||
|
<ext>library-ms</ext>
|
||||||
|
<ext>winprf</ext>
|
||||||
|
<ext>winprf_backup</ext>
|
||||||
|
<ext>svg</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/x-msoffice">
|
||||||
|
<ext>doc</ext>
|
||||||
|
<ext>docx</ext>
|
||||||
|
<ext>docm</ext>
|
||||||
|
<ext>dotm</ext>
|
||||||
|
<ext>dot</ext>
|
||||||
|
<ext>dotx</ext>
|
||||||
|
<ext>xls</ext>
|
||||||
|
<ext>xlt</ext>
|
||||||
|
<ext>xla</ext>
|
||||||
|
<ext>xlsx</ext>
|
||||||
|
<ext>xlsm</ext>
|
||||||
|
<ext>xltm</ext>
|
||||||
|
<ext>xlam</ext>
|
||||||
|
<ext>xlsb</ext>
|
||||||
|
<ext>ppt</ext>
|
||||||
|
<ext>pot</ext>
|
||||||
|
<ext>pps</ext>
|
||||||
|
<ext>ppa</ext>
|
||||||
|
<ext>pptx</ext>
|
||||||
|
<ext>potx</ext>
|
||||||
|
<ext>ppam</ext>
|
||||||
|
<ext>pptm</ext>
|
||||||
|
<ext>potm</ext>
|
||||||
|
<ext>ppsm</ext>
|
||||||
|
<ext>msi</ext>
|
||||||
|
<ext>mst</ext>
|
||||||
|
<ext>db</ext>
|
||||||
|
<ext>db.keep</ext>
|
||||||
|
<ext>wiz</ext>
|
||||||
|
<ext>gra</ext>
|
||||||
|
<ext>automaticDestinations-ms</ext>
|
||||||
|
<ext>customDestinations-ms</ext>
|
||||||
|
<ext>feed-ms</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/x-ooxml">
|
||||||
|
<ext>docx</ext>
|
||||||
|
<ext>dotx</ext>
|
||||||
|
<ext>xlsx</ext>
|
||||||
|
<ext>xlsm</ext>
|
||||||
|
<ext>xltm</ext>
|
||||||
|
<ext>xlam</ext>
|
||||||
|
<ext>xlsb</ext>
|
||||||
|
<ext>pptx</ext>
|
||||||
|
<ext>potx</ext>
|
||||||
|
<ext>ppam</ext>
|
||||||
|
<ext>pptm</ext>
|
||||||
|
<ext>potm</ext>
|
||||||
|
<ext>ppsm</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/msword">
|
||||||
|
<ext>doc</ext>
|
||||||
|
<ext>dot</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.ms-excel">
|
||||||
|
<ext>xls</ext>
|
||||||
|
<ext>xlt</ext>
|
||||||
|
<ext>xla</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.ms-powerpoint">
|
||||||
|
<ext>ppt</ext>
|
||||||
|
<ext>pot</ext>
|
||||||
|
<ext>pps</ext>
|
||||||
|
<ext>ppa</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/zip">
|
||||||
|
<ext>zip</ext>
|
||||||
|
<ext>docx</ext>
|
||||||
|
<ext>dotx</ext>
|
||||||
|
<ext>xlsx</ext>
|
||||||
|
<ext>xlsm</ext>
|
||||||
|
<ext>xltm</ext>
|
||||||
|
<ext>xlam</ext>
|
||||||
|
<ext>xlsb</ext>
|
||||||
|
<ext>pptx</ext>
|
||||||
|
<ext>potx</ext>
|
||||||
|
<ext>ppam</ext>
|
||||||
|
<ext>pptm</ext>
|
||||||
|
<ext>potm</ext>
|
||||||
|
<ext>ppsm</ext>
|
||||||
|
<ext>wmz</ext>
|
||||||
|
<ext>jar</ext>
|
||||||
|
<ext>amo</ext>
|
||||||
|
<ext>xpi</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.oasis.opendocument.text">
|
||||||
|
<ext>odt</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.oasis.opendocument.spreadsheet">
|
||||||
|
<ext>ods</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.oasis.opendocument.presentation">
|
||||||
|
<ext>odp</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/pdf">
|
||||||
|
<ext>pdf</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/rtf">
|
||||||
|
<ext>rtf</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="text/html">
|
||||||
|
<ext>htm</ext>
|
||||||
|
<ext>html</ext>
|
||||||
|
<ext>htx</ext>
|
||||||
|
<ext>htmls</ext>
|
||||||
|
<ext>hhk</ext>
|
||||||
|
<ext>hta</ext>
|
||||||
|
<ext>wpl</ext>
|
||||||
|
<ext>htt</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="image/jpeg">
|
||||||
|
<ext>jpg</ext>
|
||||||
|
<ext>jpeg</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="image/tiff">
|
||||||
|
<ext>tif</ext>
|
||||||
|
<ext>tiff</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="image/png">
|
||||||
|
<ext>png</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="image/gif">
|
||||||
|
<ext>gif</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="image/x-ms-bmp">
|
||||||
|
<ext>bmp</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="image/bmp">
|
||||||
|
<ext>bmp</ext>
|
||||||
|
<ext>bm</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="image/x-icon">
|
||||||
|
<ext>ico</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/mp4">
|
||||||
|
<ext>mp4</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/quicktime">
|
||||||
|
<ext>mov</ext>
|
||||||
|
<ext>qt</ext>
|
||||||
|
<ext>mp4</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/3gpp">
|
||||||
|
<ext>3gp</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/x-msvideo">
|
||||||
|
<ext>avi</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/x-ms-wmv">
|
||||||
|
<ext>wmv</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.ms-asf">
|
||||||
|
<ext>wmv</ext>
|
||||||
|
<ext>asf</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/x-ms-asf">
|
||||||
|
<ext>wmv</ext>
|
||||||
|
<ext>asf</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="audio/x-ms-wma">
|
||||||
|
<ext>wma</ext>
|
||||||
|
<ext>asf</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/mpeg">
|
||||||
|
<ext>mpg</ext>
|
||||||
|
<ext>mpeg</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="video/x-flv">
|
||||||
|
<ext>flv</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.rn-realmedia">
|
||||||
|
<ext>rm</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/vnd.rn-realvideo">
|
||||||
|
<ext>rv</ext>
|
||||||
|
</signature>
|
||||||
|
<signature mimetype="application/x-shockwave-flash">
|
||||||
|
<ext>swf</ext>
|
||||||
|
</signature>
|
||||||
|
</mismatch_config>
|
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 609 B |
@ -1,5 +1,5 @@
|
|||||||
#Updated by build script
|
#Updated by build script
|
||||||
#Wed, 18 Dec 2013 16:55:09 -0500
|
#Wed, 15 Jan 2014 15:11:33 -0500
|
||||||
LBL_splash_window_title=Starting Autopsy
|
LBL_splash_window_title=Starting Autopsy
|
||||||
SPLASH_HEIGHT=288
|
SPLASH_HEIGHT=288
|
||||||
SPLASH_WIDTH=538
|
SPLASH_WIDTH=538
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#Updated by build script
|
#Updated by build script
|
||||||
#Wed, 18 Dec 2013 16:55:09 -0500
|
#Wed, 15 Jan 2014 15:11:33 -0500
|
||||||
|
|
||||||
CTL_MainWindow_Title=Autopsy 3.0.8
|
CTL_MainWindow_Title=Autopsy 3.0.8
|
||||||
CTL_MainWindow_Title_No_Project=Autopsy 3.0.8
|
CTL_MainWindow_Title_No_Project=Autopsy 3.0.8
|
||||||
|
@ -9,6 +9,7 @@ app.version=3.0.8
|
|||||||
### Must be one of: DEVELOPMENT, RELEASE
|
### Must be one of: DEVELOPMENT, RELEASE
|
||||||
build.type=RELEASE
|
build.type=RELEASE
|
||||||
project.org.sleuthkit.autopsy.ewfverify=ewfVerify
|
project.org.sleuthkit.autopsy.ewfverify=ewfVerify
|
||||||
|
project.org.sleuthkit.autopsy.fileextmismatch=FileExtMismatch
|
||||||
#build.type=DEVELOPMENT
|
#build.type=DEVELOPMENT
|
||||||
update_versions=false
|
update_versions=false
|
||||||
#custom JVM options
|
#custom JVM options
|
||||||
@ -34,7 +35,8 @@ modules=\
|
|||||||
${project.org.sleuthkit.autopsy.scalpel}:\
|
${project.org.sleuthkit.autopsy.scalpel}:\
|
||||||
${project.org.sleuthkit.autopsy.timeline}:\
|
${project.org.sleuthkit.autopsy.timeline}:\
|
||||||
${project.org.sleuthkit.autopsy.filetypeid}:\
|
${project.org.sleuthkit.autopsy.filetypeid}:\
|
||||||
${project.org.sleuthkit.autopsy.ewfverify}
|
${project.org.sleuthkit.autopsy.ewfverify}:\
|
||||||
|
${project.org.sleuthkit.autopsy.fileextmismatch}
|
||||||
project.org.sleuthkit.autopsy.core=Core
|
project.org.sleuthkit.autopsy.core=Core
|
||||||
project.org.sleuthkit.autopsy.corelibs=CoreLibs
|
project.org.sleuthkit.autopsy.corelibs=CoreLibs
|
||||||
project.org.sleuthkit.autopsy.hashdatabase=HashDatabase
|
project.org.sleuthkit.autopsy.hashdatabase=HashDatabase
|
||||||
|
Loading…
x
Reference in New Issue
Block a user