Merge pull request #7929 from gdicristofaro/25_01_17_outstandingPrs

1/17/25 outstanding prs
This commit is contained in:
Mark McKinnon 2025-01-21 11:49:08 -05:00 committed by GitHub
commit 4a8a66754f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
84 changed files with 3469 additions and 2046 deletions

View File

@ -108,8 +108,6 @@
<copy todir="${ext.dir}">
<fileset dir="${thirdparty.dir}/jai/"/>
</copy>
<copy file="${thirdparty.dir}/jdom/jdom-2.0.5.jar" todir="${ext.dir}" />
<copy file="${thirdparty.dir}/jdom/jdom-2.0.5-contrib.jar" todir="${ext.dir}" />
<copy file="${thirdparty.dir}/DatCon/3.6.9/DatCon.jar" todir="${ext.dir}" />
<!--Copy YARA to release-->
<copy todir="${basedir}/release/yara" >

View File

@ -1,6 +1,3 @@
<!DOCTYPE ivy-module [
<!ENTITY httpcomponents.version "4.5.14">
]>
<ivy-module version="2.0">
<info organisation="org.sleuthkit.autopsy" module="core"/>
<configurations >
@ -10,43 +7,44 @@
<dependencies >
<dependency conf="core->default" org="com.github.vlsi.mxgraph" name="jgraphx" rev="4.2.2" />
<dependency conf="core->default" org="org.apache.activemq" name="activemq-all" rev="5.16.4"/>
<dependency conf="core->default" org="org.apache.curator" name="curator-client" rev="5.2.1"/>
<dependency conf="core->default" org="org.apache.curator" name="curator-framework" rev="5.2.1"/>
<dependency conf="core->default" org="org.apache.curator" name="curator-recipes" rev="5.2.1"/>
<dependency org="jakarta.jms" name="jakarta.jms-api" rev="3.1.0"/>
<dependency conf="core->default" org="org.apache.activemq" name="activemq-all" rev="6.1.4"/>
<dependency conf="core->default" org="org.apache.curator" name="curator-client" rev="${curator.version}"/>
<dependency conf="core->default" org="org.apache.curator" name="curator-framework" rev="${curator.version}"/>
<dependency conf="core->default" org="org.apache.curator" name="curator-recipes" rev="${curator.version}"/>
<dependency conf="core->default" org="org.python" name="jython-standalone" rev="2.7.2" />
<dependency conf="core->default" org="org.python" name="jython-standalone" rev="2.7.4" />
<dependency conf="core->default" org="com.adobe.xmp" name="xmpcore" rev="6.1.11"/>
<dependency conf="core->default" org="org.apache.zookeeper" name="zookeeper" rev="3.8.0"/>
<dependency conf="core->default" org="org.apache.zookeeper" name="zookeeper" rev="3.9.3"/>
<dependency conf="core->default" org="com.healthmarketscience.jackcess" name="jackcess" rev="4.0.1"/>
<dependency conf="core->default" org="com.healthmarketscience.jackcess" name="jackcess-encrypt" rev="4.0.1"/>
<dependency conf="core->default" org="com.healthmarketscience.jackcess" name="jackcess" rev="4.0.7"/>
<dependency conf="core->default" org="com.healthmarketscience.jackcess" name="jackcess-encrypt" rev="4.0.2"/>
<dependency conf="core->default" org="org.apache.commons" name="commons-dbcp2" rev="2.9.0"/>
<dependency conf="core->default" org="org.apache.commons" name="commons-dbcp2" rev="2.13.0"/>
<dependency conf="core->default" org="org.jsoup" name="jsoup" rev="1.16.1"/>
<dependency conf="core->default" org="org.jsoup" name="jsoup" rev="1.18.3"/>
<dependency conf="core->default" org="com.drewnoakes" name="metadata-extractor" rev="2.18.0"/>
<dependency conf="core->default" org="com.drewnoakes" name="metadata-extractor" rev="2.19.0"/>
<dependency conf="core->default" org="com.ethteck.decodetect" name="decodetect-core" rev="0.3"/>
<dependency conf="core->default" org="com.googlecode.libphonenumber" name="libphonenumber" rev="8.12.45" />
<dependency conf="core->default" org="com.googlecode.libphonenumber" name="libphonenumber" rev="8.13.52" />
<dependency conf="core->default" org="com.squareup.okhttp" name="okhttp" rev="2.7.5"/>
<dependency conf="core->default" org="org.jfree" name="jfreechart" rev="1.5.3"/>
<dependency conf="core->default" org="com.squareup.okhttp3" name="okhttp" rev="4.12.0"/>
<dependency conf="core->default" org="org.jfree" name="jfreechart" rev="1.5.5"/>
<!-- for yaml reading/writing -->
<dependency conf="core->default" org="org.yaml" name="snakeyaml" rev="2.0"/>
<dependency conf="core->default" org="org.yaml" name="snakeyaml" rev="2.3"/>
<!-- map support for geolocation -->
<dependency conf="core->default" org="org.jxmapviewer" name="jxmapviewer2" rev="2.6"/>
<dependency conf="core->default" org="org.jxmapviewer" name="jxmapviewer2" rev="2.8"/>
<!-- for handling diffs -->
<dependency conf="core->default" org="io.github.java-diff-utils" name="java-diff-utils" rev="4.11"/>
<dependency conf="core->default" org="io.github.java-diff-utils" name="java-diff-utils" rev="4.15"/>
<!-- JAXB -->
<dependency conf="core->default" org="javax.xml.bind" name="jaxb-api" rev="2.3.1"/>
<dependency conf="core->default" org="org.glassfish.jaxb" name="jaxb-runtime" rev="2.3.3"/>
<dependency conf="core->default" org="jakarta.xml.bind" name="jakarta.xml.bind-api" rev="4.0.2"/>
<dependency conf="core->default" org="com.sun.xml.bind" name="jaxb-impl" rev="4.0.5"/>
<dependency conf="core->default" org="org.icepdf.os" name="icepdf-viewer" rev="6.2.2">
<!-- get the new latest batik items below, override bouncy castle -->
@ -62,40 +60,52 @@
<exclude org="com.sun.media" module="jai_imageio"/>
</dependency>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-awt-util" rev="1.14"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-dom" rev="1.14"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-svg-dom" rev="1.14"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-svggen" rev="1.14"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-util" rev="1.14"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-xml" rev="1.14"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-awt-util" rev="${batik.version}"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-dom" rev="${batik.version}"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-svg-dom" rev="${batik.version}"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-svggen" rev="${batik.version}"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-util" rev="${batik.version}"/>
<dependency conf="core->default" org="org.apache.xmlgraphics" name="batik-xml" rev="${batik.version}"/>
<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency conf="core->default" org="javax.ws.rs" name="javax.ws.rs-api" rev="2.1.1"/>
<dependency org="org.jdom" name="jdom2" rev="2.0.6.1"/>
<!-- annotations like guarded by -->
<dependency conf="core->default" org="com.github.spotbugs" name="spotbugs-annotations" rev="4.6.0"/>
<dependency conf="core->default" org="com.github.spotbugs" name="spotbugs-annotations" rev="4.8.6"/>
<dependency conf="core->default" org="com.license4j" name="license4j-runtime-library" rev="4.7.1"/>
<dependency conf="core->default" org="com.license4j" name="license4j-runtime-library" rev="4.7.3"/>
<dependency conf="core->default" org="org.apache.httpcomponents" name="httpclient" rev="&httpcomponents.version;"/>
<dependency conf="core->default" org="org.apache.httpcomponents" name="httpmime" rev="&httpcomponents.version;"/>
<dependency conf="core->default" org="org.apache.httpcomponents" name="httpclient-win" rev="&httpcomponents.version;">
<dependency conf="core->default" org="org.apache.httpcomponents" name="httpclient" rev="${httpcomponents.version}"/>
<dependency conf="core->default" org="org.apache.httpcomponents" name="httpmime" rev="${httpcomponents.version}"/>
<dependency conf="core->default" org="org.apache.httpcomponents" name="httpclient-win" rev="${httpcomponents.version}">
<exclude name="jna" />
<exclude name="jna-platform" />
</dependency>
<override org="org.apache.zookeeper" module="zookeeper" rev="3.8.0"/>
<override org="org.apache.zookeeper" module="zookeeper-jute" rev="3.8.0"/>
<override org="jakarta.ws.rs" module="jakarta.ws.rs-api" rev="2.1.5"/>
<override org="org.slf4j" module="slf4j-api" rev="1.7.36"/>
<override org="com.google.guava" module="guava" rev="32.0.1-jre"/>
<override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/>
<dependency conf="core->default" org="org.bouncycastle" name="bcprov-jdk18on" rev="${bouncycastle.version}"/>
<dependency conf="core->default" org="org.bouncycastle" name="bcpkix-jdk18on" rev="${bouncycastle.version}"/>
<exclude org="org.bouncycastle" module="bcprov-jdk15on"/>
<exclude org="org.bouncycastle" module="bcprov-ext-jdk15on"/>
<exclude org="org.bouncycastle" module="bcpkix-jdk15on"/>
<exclude org="*" ext="*" type="javadoc"/>
<override org="xalan" module="xalan" rev="2.7.3"/>
<override org="xerces" module="xercesImpl" rev="2.12.2"/>
<override org="org.bouncycastle" module="bcprov-jdk18on" rev="${bouncycastle.version}"/>
<override org="org.bouncycastle" module="bcpkix-jdk18on" rev="${bouncycastle.version}"/>
<override org="commons-io" module="commons-io" rev="2.18.0"/>
<override org="com.google.guava" module="guava" rev="33.4.0-jre"/>
<override org="io.netty" module="netty-transport" rev="${netty.version}"/>
<override org="io.netty" module="netty-transport-native-epoll" rev="${netty.version}"/>
<override org="io.netty" module="netty-transport-classes-epoll" rev="${netty.version}"/>
<override org="io.netty" module="netty-common" rev="${netty.version}"/>
<override org="io.netty" module="netty-tcnative-boringssl-static" rev="2.0.69.Final"/>
<!-- changes to bouncy castle version may also be reflected in thirdparty/IcePDF 6.2.2 -->
<override org="org.bouncycastle" module="bcprov-ext-jdk15on" rev="1.70"/>
<override org="org.bouncycastle" module="bcprov-jdk15on" rev="1.70"/>
<override org="org.bouncycastle" module="bcpkix-jdk15on" rev="1.70"/>
<override org="junit" module="junit" rev="4.13.2"/>
</dependencies>
</ivy-module>

View File

@ -1,4 +1,10 @@
<ivysettings>
<property name="httpcomponents.version" value="4.5.14"/>
<property name="curator.version" value="5.7.1"/>
<property name="batik.version" value="1.18"/>
<property name="bouncycastle.version" value="1.79"/>
<property name="netty.version" value="4.1.116.Final"/>
<settings defaultResolver="main"/>
<resolvers>
<chain name="main">

View File

@ -1,110 +1,116 @@
file.reference.activemq-all-5.16.4.jar=release/modules/ext/activemq-all-5.16.4.jar
file.reference.audience-annotations-0.12.0.jar=release/modules/ext/audience-annotations-0.12.0.jar
file.reference.batik-awt-util-1.14.jar=release/modules/ext/batik-awt-util-1.14.jar
file.reference.batik-constants-1.14.jar=release/modules/ext/batik-constants-1.14.jar
file.reference.batik-css-1.14.jar=release/modules/ext/batik-css-1.14.jar
file.reference.batik-dom-1.14.jar=release/modules/ext/batik-dom-1.14.jar
file.reference.batik-ext-1.14.jar=release/modules/ext/batik-ext-1.14.jar
file.reference.batik-i18n-1.14.jar=release/modules/ext/batik-i18n-1.14.jar
file.reference.batik-parser-1.14.jar=release/modules/ext/batik-parser-1.14.jar
file.reference.batik-shared-resources-1.14.jar=release/modules/ext/batik-shared-resources-1.14.jar
file.reference.batik-svg-dom-1.14.jar=release/modules/ext/batik-svg-dom-1.14.jar
file.reference.batik-svggen-1.14.jar=release/modules/ext/batik-svggen-1.14.jar
file.reference.batik-util-1.14.jar=release/modules/ext/batik-util-1.14.jar
file.reference.batik-xml-1.14.jar=release/modules/ext/batik-xml-1.14.jar
file.reference.bcpkix-jdk15on-1.70.jar=release/modules/ext/bcpkix-jdk15on-1.70.jar
file.reference.bcprov-ext-jdk15on-1.70.jar=release/modules/ext/bcprov-ext-jdk15on-1.70.jar
file.reference.bcprov-jdk15on-1.70.jar=release/modules/ext/bcprov-jdk15on-1.70.jar
file.reference.bcutil-jdk15on-1.70.jar=release/modules/ext/bcutil-jdk15on-1.70.jar
file.reference.c3p0-0.9.5.5.jar=release/modules/ext/c3p0-0.9.5.5.jar
file.reference.checker-qual-3.33.0.jar=release/modules/ext/checker-qual-3.33.0.jar
file.reference.commons-codec-1.11.jar=release/modules/ext/commons-codec-1.11.jar
file.reference.commons-dbcp2-2.9.0.jar=release/modules/ext/commons-dbcp2-2.9.0.jar
file.reference.commons-io-2.11.0.jar=release/modules/ext/commons-io-2.11.0.jar
file.reference.commons-lang3-3.10.jar=release/modules/ext/commons-lang3-3.10.jar
file.reference.commons-logging-1.2.jar=release/modules/ext/commons-logging-1.2.jar
file.reference.commons-pool2-2.10.0.jar=release/modules/ext/commons-pool2-2.10.0.jar
file.reference.curator-client-5.2.1.jar=release/modules/ext/curator-client-5.2.1.jar
file.reference.curator-framework-5.2.1.jar=release/modules/ext/curator-framework-5.2.1.jar
file.reference.curator-recipes-5.2.1.jar=release/modules/ext/curator-recipes-5.2.1.jar
file.reference.DatCon.jar=release/modules/ext/DatCon.jar
file.reference.Rejistry-1.1-SNAPSHOT.jar=release/modules/ext/Rejistry-1.1-SNAPSHOT.jar
file.reference.SparseBitSet-1.1.jar=release/modules/ext/SparseBitSet-1.1.jar
file.reference.YaraJNIWrapper.jar=release/modules/ext/YaraJNIWrapper.jar
file.reference.activemq-all-6.1.4.jar=release/modules/ext/activemq-all-6.1.4.jar
file.reference.angus-activation-2.0.2.jar=release/modules/ext/angus-activation-2.0.2.jar
file.reference.annotations-13.0.jar=release/modules/ext/annotations-13.0.jar
file.reference.audience-annotations-0.12.0.jar=release/modules/ext/audience-annotations-0.12.0.jar
file.reference.batik-awt-util-1.18.jar=release/modules/ext/batik-awt-util-1.18.jar
file.reference.batik-constants-1.18.jar=release/modules/ext/batik-constants-1.18.jar
file.reference.batik-css-1.18.jar=release/modules/ext/batik-css-1.18.jar
file.reference.batik-dom-1.18.jar=release/modules/ext/batik-dom-1.18.jar
file.reference.batik-ext-1.18.jar=release/modules/ext/batik-ext-1.18.jar
file.reference.batik-i18n-1.18.jar=release/modules/ext/batik-i18n-1.18.jar
file.reference.batik-parser-1.18.jar=release/modules/ext/batik-parser-1.18.jar
file.reference.batik-shared-resources-1.18.jar=release/modules/ext/batik-shared-resources-1.18.jar
file.reference.batik-svg-dom-1.18.jar=release/modules/ext/batik-svg-dom-1.18.jar
file.reference.batik-svggen-1.18.jar=release/modules/ext/batik-svggen-1.18.jar
file.reference.batik-util-1.18.jar=release/modules/ext/batik-util-1.18.jar
file.reference.batik-xml-1.18.jar=release/modules/ext/batik-xml-1.18.jar
file.reference.bcpkix-jdk18on-1.79.jar=release/modules/ext/bcpkix-jdk18on-1.79.jar
file.reference.bcprov-jdk18on-1.79.jar=release/modules/ext/bcprov-jdk18on-1.79.jar
file.reference.bcutil-jdk18on-1.79.jar=release/modules/ext/bcutil-jdk18on-1.79.jar
file.reference.c3p0-0.9.5.5.jar=release/modules/ext/c3p0-0.9.5.5.jar
file.reference.checker-qual-3.43.0.jar=release/modules/ext/checker-qual-3.43.0.jar
file.reference.commons-codec-1.11.jar=release/modules/ext/commons-codec-1.11.jar
file.reference.commons-dbcp2-2.13.0.jar=release/modules/ext/commons-dbcp2-2.13.0.jar
file.reference.commons-io-2.18.0.jar=release/modules/ext/commons-io-2.18.0.jar
file.reference.commons-lang3-3.10.jar=release/modules/ext/commons-lang3-3.10.jar
file.reference.commons-logging-1.3.4.jar=release/modules/ext/commons-logging-1.3.4.jar
file.reference.commons-pool2-2.12.0.jar=release/modules/ext/commons-pool2-2.12.0.jar
file.reference.curator-client-5.7.1.jar=release/modules/ext/curator-client-5.7.1.jar
file.reference.curator-framework-5.7.1.jar=release/modules/ext/curator-framework-5.7.1.jar
file.reference.curator-recipes-5.7.1.jar=release/modules/ext/curator-recipes-5.7.1.jar
file.reference.decodetect-core-0.3.jar=release/modules/ext/decodetect-core-0.3.jar
file.reference.error_prone_annotations-2.18.0.jar=release/modules/ext/error_prone_annotations-2.18.0.jar
file.reference.error_prone_annotations-2.36.0.jar=release/modules/ext/error_prone_annotations-2.36.0.jar
file.reference.failureaccess-1.0.1.jar=release/modules/ext/failureaccess-1.0.1.jar
file.reference.guava-32.0.1-jre.jar=release/modules/ext/guava-32.0.1-jre.jar
file.reference.guava-33.4.0-jre.jar=release/modules/ext/guava-33.4.0-jre.jar
file.reference.httpclient-4.5.14.jar=release/modules/ext/httpclient-4.5.14.jar
file.reference.httpclient-win-4.5.14.jar=release/modules/ext/httpclient-win-4.5.14.jar
file.reference.httpcore-4.4.16.jar=release/modules/ext/httpcore-4.4.16.jar
file.reference.httpmime-4.5.14.jar=release/modules/ext/httpmime-4.5.14.jar
file.reference.icepdf-core-6.2.2.jar=release/modules/ext/icepdf-core-6.2.2.jar
file.reference.icepdf-viewer-6.2.2.jar=release/modules/ext/icepdf-viewer-6.2.2.jar
file.reference.istack-commons-runtime-3.0.11.jar=release/modules/ext/istack-commons-runtime-3.0.11.jar
file.reference.j2objc-annotations-2.8.jar=release/modules/ext/j2objc-annotations-2.8.jar
file.reference.jackcess-4.0.1.jar=release/modules/ext/jackcess-4.0.1.jar
file.reference.jackcess-encrypt-4.0.1.jar=release/modules/ext/jackcess-encrypt-4.0.1.jar
file.reference.j2objc-annotations-3.0.0.jar=release/modules/ext/j2objc-annotations-3.0.0.jar
file.reference.jackcess-4.0.7.jar=release/modules/ext/jackcess-4.0.7.jar
file.reference.jackcess-encrypt-4.0.2.jar=release/modules/ext/jackcess-encrypt-4.0.2.jar
file.reference.jai_core-1.1.3.jar=release/modules/ext/jai_core-1.1.3.jar
file.reference.jai_imageio-1.1.jar=release/modules/ext/jai_imageio-1.1.jar
file.reference.jakarta.activation-1.2.2.jar=release/modules/ext/jakarta.activation-1.2.2.jar
file.reference.jakarta.xml.bind-api-2.3.3.jar=release/modules/ext/jakarta.xml.bind-api-2.3.3.jar
file.reference.java-diff-utils-4.11.jar=release/modules/ext/java-diff-utils-4.11.jar
file.reference.javax.activation-api-1.2.0.jar=release/modules/ext/javax.activation-api-1.2.0.jar
file.reference.jakarta.activation-api-2.1.3.jar=release/modules/ext/jakarta.activation-api-2.1.3.jar
file.reference.jakarta.annotation-api-2.1.1.jar=release/modules/ext/jakarta.annotation-api-2.1.1.jar
file.reference.jakarta.jms-api-3.1.0-sources.jar=release/modules/ext/jakarta.jms-api-3.1.0-sources.jar
file.reference.jakarta.jms-api-3.1.0.jar=release/modules/ext/jakarta.jms-api-3.1.0.jar
file.reference.jakarta.transaction-api-1.3.3.jar=release/modules/ext/jakarta.transaction-api-1.3.3.jar
file.reference.jakarta.xml.bind-api-4.0.2.jar=release/modules/ext/jakarta.xml.bind-api-4.0.2.jar
file.reference.java-diff-utils-4.15.jar=release/modules/ext/java-diff-utils-4.15.jar
file.reference.javax.ws.rs-api-2.1.1.jar=release/modules/ext/javax.ws.rs-api-2.1.1.jar
file.reference.jaxb-api-2.3.1.jar=release/modules/ext/jaxb-api-2.3.1.jar
file.reference.jaxb-runtime-2.3.3.jar=release/modules/ext/jaxb-runtime-2.3.3.jar
file.reference.jdom-2.0.5-contrib.jar=release/modules/ext/jdom-2.0.5-contrib.jar
file.reference.jdom-2.0.5.jar=release/modules/ext/jdom-2.0.5.jar
file.reference.jfreechart-1.5.3.jar=release/modules/ext/jfreechart-1.5.3.jar
file.reference.jaxb-core-4.0.5.jar=release/modules/ext/jaxb-core-4.0.5.jar
file.reference.jaxb-impl-4.0.5.jar=release/modules/ext/jaxb-impl-4.0.5.jar
file.reference.jaxen-1.2.0.jar=release/modules/ext/jaxen-1.2.0.jar
file.reference.jdom2-2.0.6.1-sources.jar=release/modules/ext/jdom2-2.0.6.1-sources.jar
file.reference.jdom2-2.0.6.1.jar=release/modules/ext/jdom2-2.0.6.1.jar
file.reference.jfreechart-1.5.5.jar=release/modules/ext/jfreechart-1.5.5.jar
file.reference.jgraphx-4.2.2.jar=release/modules/ext/jgraphx-4.2.2.jar
file.reference.jsoup-1.16.1.jar=release/modules/ext/jsoup-1.16.1.jar
file.reference.jsoup-1.18.3.jar=release/modules/ext/jsoup-1.18.3.jar
file.reference.jsr305-3.0.2.jar=release/modules/ext/jsr305-3.0.2.jar
file.reference.jutf7-1.0.0.jar=release/modules/ext/jutf7-1.0.0.jar
file.reference.jxmapviewer2-2.6.jar=release/modules/ext/jxmapviewer2-2.6.jar
file.reference.jython-standalone-2.7.2.jar=release/modules/ext/jython-standalone-2.7.2.jar
file.reference.libphonenumber-8.12.45.jar=release/modules/ext/libphonenumber-8.12.45.jar
file.reference.license4j-runtime-library-4.7.1.jar=release/modules/ext/license4j-runtime-library-4.7.1.jar
file.reference.jxmapviewer2-2.8.jar=release/modules/ext/jxmapviewer2-2.8.jar
file.reference.jython-standalone-2.7.4.jar=release/modules/ext/jython-standalone-2.7.4.jar
file.reference.kotlin-stdlib-1.8.21.jar=release/modules/ext/kotlin-stdlib-1.8.21.jar
file.reference.kotlin-stdlib-common-1.9.10.jar=release/modules/ext/kotlin-stdlib-common-1.9.10.jar
file.reference.kotlin-stdlib-jdk7-1.8.21.jar=release/modules/ext/kotlin-stdlib-jdk7-1.8.21.jar
file.reference.kotlin-stdlib-jdk8-1.8.21.jar=release/modules/ext/kotlin-stdlib-jdk8-1.8.21.jar
file.reference.libphonenumber-8.13.52.jar=release/modules/ext/libphonenumber-8.13.52.jar
file.reference.license4j-runtime-library-4.7.3.jar=release/modules/ext/license4j-runtime-library-4.7.3.jar
file.reference.listenablefuture-1.0.jar=release/modules/ext/listenablefuture-1.0.jar
file.reference.logback-classic-1.2.10.jar=release/modules/ext/logback-classic-1.2.10.jar
file.reference.logback-core-1.2.10.jar=release/modules/ext/logback-core-1.2.10.jar
file.reference.mchange-commons-java-0.3.0.jar=release/modules/ext/mchange-commons-java-0.3.0.jar
file.reference.metadata-extractor-2.18.0.jar=release/modules/ext/metadata-extractor-2.18.0.jar
file.reference.netty-buffer-4.1.73.Final.jar=release/modules/ext/netty-buffer-4.1.73.Final.jar
file.reference.netty-codec-4.1.73.Final.jar=release/modules/ext/netty-codec-4.1.73.Final.jar
file.reference.netty-common-4.1.73.Final.jar=release/modules/ext/netty-common-4.1.73.Final.jar
file.reference.netty-handler-4.1.73.Final.jar=release/modules/ext/netty-handler-4.1.73.Final.jar
file.reference.netty-resolver-4.1.73.Final.jar=release/modules/ext/netty-resolver-4.1.73.Final.jar
file.reference.netty-tcnative-2.0.48.Final.jar=release/modules/ext/netty-tcnative-2.0.48.Final.jar
file.reference.netty-tcnative-classes-2.0.48.Final.jar=release/modules/ext/netty-tcnative-classes-2.0.48.Final.jar
file.reference.netty-transport-4.1.73.Final.jar=release/modules/ext/netty-transport-4.1.73.Final.jar
file.reference.netty-transport-classes-epoll-4.1.73.Final.jar=release/modules/ext/netty-transport-classes-epoll-4.1.73.Final.jar
file.reference.netty-transport-native-epoll-4.1.73.Final.jar=release/modules/ext/netty-transport-native-epoll-4.1.73.Final.jar
file.reference.netty-transport-native-unix-common-4.1.73.Final.jar=release/modules/ext/netty-transport-native-unix-common-4.1.73.Final.jar
file.reference.okhttp-2.7.5.jar=release/modules/ext/okhttp-2.7.5.jar
file.reference.okio-1.6.0.jar=release/modules/ext/okio-1.6.0.jar
file.reference.metadata-extractor-2.19.0.jar=release/modules/ext/metadata-extractor-2.19.0.jar
file.reference.netty-buffer-4.1.113.Final.jar=release/modules/ext/netty-buffer-4.1.113.Final.jar
file.reference.netty-codec-4.1.113.Final.jar=release/modules/ext/netty-codec-4.1.113.Final.jar
file.reference.netty-common-4.1.116.Final.jar=release/modules/ext/netty-common-4.1.116.Final.jar
file.reference.netty-handler-4.1.113.Final.jar=release/modules/ext/netty-handler-4.1.113.Final.jar
file.reference.netty-resolver-4.1.113.Final.jar=release/modules/ext/netty-resolver-4.1.113.Final.jar
file.reference.netty-tcnative-boringssl-static-2.0.69.Final.jar=release/modules/ext/netty-tcnative-boringssl-static-2.0.69.Final.jar
file.reference.netty-tcnative-classes-2.0.66.Final.jar=release/modules/ext/netty-tcnative-classes-2.0.66.Final.jar
file.reference.netty-transport-4.1.116.Final.jar=release/modules/ext/netty-transport-4.1.116.Final.jar
file.reference.netty-transport-classes-epoll-4.1.116.Final.jar=release/modules/ext/netty-transport-classes-epoll-4.1.116.Final.jar
file.reference.netty-transport-native-epoll-4.1.116.Final-linux-x86_64.jar=release/modules/ext/netty-transport-native-epoll-4.1.116.Final-linux-x86_64.jar
file.reference.netty-transport-native-unix-common-4.1.113.Final.jar=release/modules/ext/netty-transport-native-unix-common-4.1.113.Final.jar
file.reference.okhttp-4.12.0.jar=release/modules/ext/okhttp-4.12.0.jar
file.reference.okio-3.6.0.jar=release/modules/ext/okio-3.6.0.jar
file.reference.okio-jvm-3.6.0.jar=release/modules/ext/okio-jvm-3.6.0.jar
file.reference.postgresql-42.7.3.jar=release/modules/ext/postgresql-42.7.3.jar
file.reference.Rejistry-1.1-SNAPSHOT.jar=release/modules/ext/Rejistry-1.1-SNAPSHOT.jar
file.reference.serializer-2.7.2.jar=release/modules/ext/serializer-2.7.2.jar
file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbinding-AllPlatforms.jar
file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar
file.reference.sleuthkit-4.12.1.jar=release/modules/ext/sleuthkit-4.12.1.jar
file.reference.sleuthkit-caseuco-4.12.1.jar=release/modules/ext/sleuthkit-caseuco-4.12.1.jar
file.reference.slf4j-api-1.7.36.jar=release/modules/ext/slf4j-api-1.7.36.jar
file.reference.snakeyaml-2.0.jar=release/modules/ext/snakeyaml-2.0.jar
file.reference.SparseBitSet-1.1.jar=release/modules/ext/SparseBitSet-1.1.jar
file.reference.spotbugs-annotations-4.6.0.jar=release/modules/ext/spotbugs-annotations-4.6.0.jar
file.reference.slf4j-api-1.7.30.jar=release/modules/ext/slf4j-api-1.7.30.jar
file.reference.snakeyaml-2.3.jar=release/modules/ext/snakeyaml-2.3.jar
file.reference.spotbugs-annotations-4.8.6.jar=release/modules/ext/spotbugs-annotations-4.8.6.jar
file.reference.sqlite-jdbc-3.47.1.0.jar=release/modules/ext/sqlite-jdbc-3.47.1.0.jar
file.reference.txw2-2.3.3.jar=release/modules/ext/txw2-2.3.3.jar
file.reference.xalan-2.7.2.jar=release/modules/ext/xalan-2.7.2.jar
file.reference.xalan-2.7.3.jar=release/modules/ext/xalan-2.7.3.jar
file.reference.xercesImpl-2.12.2.jar=release/modules/ext/xercesImpl-2.12.2.jar
file.reference.xml-apis-1.4.01.jar=release/modules/ext/xml-apis-1.4.01.jar
file.reference.xml-apis-ext-1.3.04.jar=release/modules/ext/xml-apis-ext-1.3.04.jar
file.reference.xmlgraphics-commons-2.6.jar=release/modules/ext/xmlgraphics-commons-2.6.jar
file.reference.xmlgraphics-commons-2.10.jar=release/modules/ext/xmlgraphics-commons-2.10.jar
file.reference.xmpcore-6.1.11.jar=release/modules/ext/xmpcore-6.1.11.jar
file.reference.YaraJNIWrapper.jar=release/modules/ext/YaraJNIWrapper.jar
file.reference.zookeeper-3.8.0.jar=release/modules/ext/zookeeper-3.8.0.jar
file.reference.zookeeper-jute-3.8.0.jar=release/modules/ext/zookeeper-jute-3.8.0.jar
file.reference.zookeeper-3.9.3.jar=release/modules/ext/zookeeper-3.9.3.jar
file.reference.zookeeper-jute-3.9.3.jar=release/modules/ext/zookeeper-jute-3.9.3.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17
javac.compilerargs=-Xlint -Xlint:-serial
license.file=../LICENSE-2.0.txt
nbm.homepage=http://www.sleuthkit.org/
nbm.homepage=http\://www.sleuthkit.org/
nbm.module.author=Brian Carrier
nbm.needs.restart=true
spec.version.base=10.25

View File

@ -370,120 +370,124 @@
<package>org.sleuthkit.datamodel.blackboardutils.attributes</package>
</public-packages>
<class-path-extension>
<runtime-relative-path>ext/activemq-all-5.16.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/activemq-all-5.16.4.jar</binary-origin>
<runtime-relative-path>ext/activemq-all-6.1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/activemq-all-6.1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/angus-activation-2.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/angus-activation-2.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/annotations-13.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/annotations-13.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/audience-annotations-0.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/audience-annotations-0.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-awt-util-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-awt-util-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-awt-util-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-awt-util-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-constants-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-constants-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-constants-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-constants-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-css-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-css-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-css-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-css-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-dom-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-dom-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-dom-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-dom-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-ext-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-ext-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-ext-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-ext-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-i18n-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-i18n-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-i18n-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-i18n-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-parser-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-parser-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-parser-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-parser-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-shared-resources-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-shared-resources-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-shared-resources-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-shared-resources-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-svg-dom-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-svg-dom-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-svg-dom-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-svg-dom-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-svggen-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-svggen-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-svggen-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-svggen-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-util-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-util-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-util-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-util-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/batik-xml-1.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-xml-1.14.jar</binary-origin>
<runtime-relative-path>ext/batik-xml-1.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/batik-xml-1.18.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcpkix-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcpkix-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/bcpkix-jdk18on-1.79.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcpkix-jdk18on-1.79.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcprov-ext-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcprov-ext-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/bcprov-jdk18on-1.79.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcprov-jdk18on-1.79.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcprov-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcprov-jdk15on-1.70.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcutil-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcutil-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/bcutil-jdk18on-1.79.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcutil-jdk18on-1.79.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/c3p0-0.9.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/c3p0-0.9.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/checker-qual-3.33.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/checker-qual-3.33.0.jar</binary-origin>
<runtime-relative-path>ext/checker-qual-3.43.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/checker-qual-3.43.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-codec-1.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-codec-1.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-dbcp2-2.9.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-dbcp2-2.9.0.jar</binary-origin>
<runtime-relative-path>ext/commons-dbcp2-2.13.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-dbcp2-2.13.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-io-2.11.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.11.0.jar</binary-origin>
<runtime-relative-path>ext/commons-io-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.18.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-lang3-3.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-lang3-3.10.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-logging-1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-logging-1.2.jar</binary-origin>
<runtime-relative-path>ext/commons-logging-1.3.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-logging-1.3.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-pool2-2.10.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-pool2-2.10.0.jar</binary-origin>
<runtime-relative-path>ext/commons-pool2-2.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-pool2-2.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-client-5.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-client-5.2.1.jar</binary-origin>
<runtime-relative-path>ext/curator-client-5.7.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-client-5.7.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-framework-5.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-framework-5.2.1.jar</binary-origin>
<runtime-relative-path>ext/curator-framework-5.7.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-framework-5.7.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curator-recipes-5.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-recipes-5.2.1.jar</binary-origin>
<runtime-relative-path>ext/curator-recipes-5.7.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curator-recipes-5.7.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/DatCon.jar</runtime-relative-path>
@ -494,16 +498,16 @@
<binary-origin>release/modules/ext/decodetect-core-0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/error_prone_annotations-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/error_prone_annotations-2.18.0.jar</binary-origin>
<runtime-relative-path>ext/error_prone_annotations-2.36.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/error_prone_annotations-2.36.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/failureaccess-1.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/failureaccess-1.0.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/guava-32.0.1-jre.jar</runtime-relative-path>
<binary-origin>release/modules/ext/guava-32.0.1-jre.jar</binary-origin>
<runtime-relative-path>ext/guava-33.4.0-jre.jar</runtime-relative-path>
<binary-origin>release/modules/ext/guava-33.4.0-jre.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpclient-4.5.14.jar</runtime-relative-path>
@ -530,20 +534,16 @@
<binary-origin>release/modules/ext/icepdf-viewer-6.2.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/istack-commons-runtime-3.0.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/istack-commons-runtime-3.0.11.jar</binary-origin>
<runtime-relative-path>ext/j2objc-annotations-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/j2objc-annotations-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/j2objc-annotations-2.8.jar</runtime-relative-path>
<binary-origin>release/modules/ext/j2objc-annotations-2.8.jar</binary-origin>
<runtime-relative-path>ext/jackcess-4.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-4.0.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackcess-4.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-4.0.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackcess-encrypt-4.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-encrypt-4.0.1.jar</binary-origin>
<runtime-relative-path>ext/jackcess-encrypt-4.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-encrypt-4.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jai_core-1.1.3.jar</runtime-relative-path>
@ -554,52 +554,68 @@
<binary-origin>release/modules/ext/jai_imageio-1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.activation-1.2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.activation-1.2.2.jar</binary-origin>
<runtime-relative-path>ext/jakarta.activation-api-2.1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.activation-api-2.1.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.xml.bind-api-2.3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.xml.bind-api-2.3.3.jar</binary-origin>
<runtime-relative-path>ext/jakarta.annotation-api-2.1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.annotation-api-2.1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/java-diff-utils-4.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/java-diff-utils-4.11.jar</binary-origin>
<runtime-relative-path>ext/jakarta.jms-api-3.1.0-sources.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.jms-api-3.1.0-sources.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javax.activation-api-1.2.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javax.activation-api-1.2.0.jar</binary-origin>
<runtime-relative-path>ext/jakarta.jms-api-3.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.jms-api-3.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.transaction-api-1.3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.transaction-api-1.3.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.xml.bind-api-4.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.xml.bind-api-4.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/java-diff-utils-4.15.jar</runtime-relative-path>
<binary-origin>release/modules/ext/java-diff-utils-4.15.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javax.ws.rs-api-2.1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javax.ws.rs-api-2.1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jaxb-api-2.3.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxb-api-2.3.1.jar</binary-origin>
<runtime-relative-path>ext/jaxb-core-4.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxb-core-4.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jaxb-runtime-2.3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxb-runtime-2.3.3.jar</binary-origin>
<runtime-relative-path>ext/jaxb-impl-4.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxb-impl-4.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom-2.0.5-contrib.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom-2.0.5-contrib.jar</binary-origin>
<runtime-relative-path>ext/jaxen-1.2.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxen-1.2.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom-2.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom-2.0.5.jar</binary-origin>
<runtime-relative-path>ext/jdom2-2.0.6.1-sources.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom2-2.0.6.1-sources.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jfreechart-1.5.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jfreechart-1.5.3.jar</binary-origin>
<runtime-relative-path>ext/jdom2-2.0.6.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom2-2.0.6.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jfreechart-1.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jfreechart-1.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jgraphx-4.2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jgraphx-4.2.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsoup-1.16.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jsoup-1.16.1.jar</binary-origin>
<runtime-relative-path>ext/jsoup-1.18.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jsoup-1.18.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsr305-3.0.2.jar</runtime-relative-path>
@ -610,92 +626,104 @@
<binary-origin>release/modules/ext/jutf7-1.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jxmapviewer2-2.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jxmapviewer2-2.6.jar</binary-origin>
<runtime-relative-path>ext/jxmapviewer2-2.8.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jxmapviewer2-2.8.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jython-standalone-2.7.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jython-standalone-2.7.2.jar</binary-origin>
<runtime-relative-path>ext/jython-standalone-2.7.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jython-standalone-2.7.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/libphonenumber-8.12.45.jar</runtime-relative-path>
<binary-origin>release/modules/ext/libphonenumber-8.12.45.jar</binary-origin>
<runtime-relative-path>ext/kotlin-stdlib-1.8.21.jar</runtime-relative-path>
<binary-origin>release/modules/ext/kotlin-stdlib-1.8.21.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/license4j-runtime-library-4.7.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/license4j-runtime-library-4.7.1.jar</binary-origin>
<runtime-relative-path>ext/kotlin-stdlib-common-1.9.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/kotlin-stdlib-common-1.9.10.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/kotlin-stdlib-jdk7-1.8.21.jar</runtime-relative-path>
<binary-origin>release/modules/ext/kotlin-stdlib-jdk7-1.8.21.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/kotlin-stdlib-jdk8-1.8.21.jar</runtime-relative-path>
<binary-origin>release/modules/ext/kotlin-stdlib-jdk8-1.8.21.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/libphonenumber-8.13.52.jar</runtime-relative-path>
<binary-origin>release/modules/ext/libphonenumber-8.13.52.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/license4j-runtime-library-4.7.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/license4j-runtime-library-4.7.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/listenablefuture-1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/listenablefuture-1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/logback-classic-1.2.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/logback-classic-1.2.10.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/logback-core-1.2.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/logback-core-1.2.10.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/mchange-commons-java-0.3.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/mchange-commons-java-00.3.0.jar</binary-origin>
<binary-origin>release/modules/ext/mchange-commons-java-0.3.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/metadata-extractor-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/metadata-extractor-2.18.0.jar</binary-origin>
<runtime-relative-path>ext/metadata-extractor-2.19.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/metadata-extractor-2.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-buffer-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-buffer-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-buffer-4.1.113.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-buffer-4.1.113.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-codec-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-codec-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-codec-4.1.113.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-codec-4.1.113.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-common-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-common-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-common-4.1.116.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-common-4.1.116.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-handler-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-handler-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-handler-4.1.113.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-handler-4.1.113.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-resolver-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-resolver-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-resolver-4.1.113.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-resolver-4.1.113.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-tcnative-2.0.48.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-2.0.48.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-tcnative-boringssl-static-2.0.69.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-boringssl-static-2.0.69.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-tcnative-classes-2.0.48.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-classes-2.0.48.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-tcnative-classes-2.0.66.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-classes-2.0.66.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-transport-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-4.1.116.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-4.1.116.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-transport-classes-epoll-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-classes-epoll-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-classes-epoll-4.1.116.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-classes-epoll-4.1.116.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-transport-native-epoll-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-epoll-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-native-epoll-4.1.116.Final-linux-x86_64.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-epoll-4.1.116.Final-linux-x86_64.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-transport-native-unix-common-4.1.73.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-unix-common-4.1.73.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-native-unix-common-4.1.113.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-unix-common-4.1.113.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/okhttp-2.7.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okhttp-2.7.5.jar</binary-origin>
<runtime-relative-path>ext/okhttp-4.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okhttp-4.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/okio-1.6.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okio-1.6.0.jar</binary-origin>
<runtime-relative-path>ext/okio-3.6.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okio-3.6.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/okio-jvm-3.6.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/okio-jvm-3.6.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/postgresql-42.7.3.jar</runtime-relative-path>
@ -705,10 +733,6 @@
<runtime-relative-path>ext/Rejistry-1.1-SNAPSHOT.jar</runtime-relative-path>
<binary-origin>release/modules/ext/Rejistry-1.1-SNAPSHOT.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/serializer-2.7.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/serializer-2.7.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sevenzipjbinding-AllPlatforms.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sevenzipjbinding-AllPlatforms.jar</binary-origin>
@ -726,32 +750,32 @@
<binary-origin>release/modules/ext/sleuthkit-caseuco-4.12.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-api-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-api-1.7.36.jar</binary-origin>
<runtime-relative-path>ext/slf4j-api-1.7.30.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-api-1.7.30.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/snakeyaml-2.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/snakeyaml-2.0.jar</binary-origin>
<runtime-relative-path>ext/snakeyaml-2.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/snakeyaml-2.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/SparseBitSet-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/SparseBitSet-1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/spotbugs-annotations-4.6.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/spotbugs-annotations-4.6.0.jar</binary-origin>
<runtime-relative-path>ext/spotbugs-annotations-4.8.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/spotbugs-annotations-4.8.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sqlite-jdbc-3.47.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sqlite-jdbc-3.47.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/txw2-2.3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/txw2-2.3.3.jar</binary-origin>
<runtime-relative-path>ext/xalan-2.7.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xalan-2.7.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xalan-2.7.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xalan-2.7.2.jar</binary-origin>
<runtime-relative-path>ext/xercesImpl-2.12.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xercesImpl-2.12.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xml-apis-1.4.01.jar</runtime-relative-path>
@ -762,8 +786,8 @@
<binary-origin>release/modules/ext/xml-apis-ext-1.3.04.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmlgraphics-commons-2.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmlgraphics-commons-2.6.jar</binary-origin>
<runtime-relative-path>ext/xmlgraphics-commons-2.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmlgraphics-commons-2.10.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmpcore-6.1.11.jar</runtime-relative-path>
@ -774,12 +798,12 @@
<binary-origin>release/modules/ext/YaraJNIWrapper.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/zookeeper-3.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-3.8.0.jar</binary-origin>
<runtime-relative-path>ext/zookeeper-3.9.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-3.9.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/zookeeper-jute-3.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-jute-3.8.0.jar</binary-origin>
<runtime-relative-path>ext/zookeeper-jute-3.9.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-jute-3.9.3.jar</binary-origin>
</class-path-extension>
</data>
</configuration>

View File

@ -32,7 +32,7 @@ public class CTCloudException extends Exception{
public enum ErrorCode {
BAD_REQUEST("CT-400", "Unknown or Bad request. Please contact Basis support at " + Constants.SUPPORT_AT_CYBERTRIAGE_DOT_COM + " for help diagnosing the problem."),
INVALID_KEY("CT-401", "An invalid license ID was used to access CyberTriage Cloud Service. Please contact Basis support " + Constants.SUPPORT_AT_CYBERTRIAGE_DOT_COM + " for help diagnosing the problem."),
INVALID_KEY("CT-401", "An invalid license ID was used to access CyberTriage Cloud Service. Please remove the license from the Cyber Triage options panel."),
GATEWAY_TIMEOUT("CT-504", "Request to CyberTriage Cloud Service timed out. Please retry after some time. If issue persists, please contact Basis support at " + Constants.SUPPORT_AT_CYBERTRIAGE_DOT_COM + " for assistance."),
UN_AUTHORIZED("CT-403", "An authorization error occurred. Please contact Basis support " + Constants.SUPPORT_AT_CYBERTRIAGE_DOT_COM + " for help diagnosing the problem."),
PROXY_UNAUTHORIZED("CT-407", "Proxy authentication failed. Please validate the connection settings from the Options panel Proxy Settings."),

View File

@ -39,7 +39,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel;
*/
public class CTOptionsPanel extends IngestModuleGlobalSettingsPanel {
private static final int MAX_SUBPANEL_WIDTH = 650;
private static final int MAX_SUBPANEL_WIDTH = 700;
private static final Logger logger = Logger.getLogger(CTOptionsPanel.class.getName());
@ -70,14 +70,14 @@ public class CTOptionsPanel extends IngestModuleGlobalSettingsPanel {
}
private void addSubOptionsPanels(List<CTOptionsSubPanel> subPanels) {
GridBagConstraints disclaimerConstraints = new GridBagConstraints();
disclaimerConstraints.gridx = 0;
disclaimerConstraints.gridy = 0;
disclaimerConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
disclaimerConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
disclaimerConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
disclaimerConstraints.weighty = 0;
disclaimerConstraints.weightx = 0;
GridBagConstraints disclaimerConstraints = new GridBagConstraints();
disclaimerConstraints.gridx = 0;
disclaimerConstraints.gridy = 0;
disclaimerConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
disclaimerConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
disclaimerConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
disclaimerConstraints.weighty = 0;
disclaimerConstraints.weightx = 0;
for (int i = 0; i < subPanels.size(); i++) {
CTOptionsSubPanel subPanel = subPanels.get(i);

View File

@ -23,6 +23,8 @@ EULADialog.cancelButton.text=Cancel
EULADialog.acceptButton.text=Accept
EULADialog.title=Cyber Triage End User License Agreement
CTMalwareScannerOptionsPanel.licenseInfoMessageLabel.text=
CTMalwareScannerOptionsPanel.disclaimer.text=<html>The Cyber Triage Malware Scanner module uses 40+ malware scanning engines to identify if Windows executables are malicious. It requires a paid subscription to use.</html>
CTMalwareScannerOptionsPanel.purchaseFromLabel.text=For licensing information, visit
CTLicenseDialog.licenseNumberTextField.toolTipText=AUT-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
CTMalwareScannerOptionsPanel.licenseErrorLabel.text=
CTMalwareScannerOptionsPanel.licenseInfoRemoveButton.text=Remove License
CTMalwareScannerOptionsPanel.text=<html>The Cyber Triage Malware Scanner module uses 40+ malware scanning engines to identify if Windows executables are malicious. It requires a paid subscription to use.</html>

View File

@ -28,7 +28,7 @@ CTMalwareScannerOptionsPanel_licenseAddDialog_desc=License Number:
CTMalwareScannerOptionsPanel_licenseAddDialog_title=Add a License...
CTMalwareScannerOptionsPanel_licenseAddDialogEnteredErr_desc=The license number has already been entered
CTMalwareScannerOptionsPanel_licenseAddDialogEnteredErr_title=License Number Already Entered
CTMalwareScannerOptionsPanel_licenseAddDialogPatternErr_desc=Please verify that license number is of format 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
CTMalwareScannerOptionsPanel_licenseAddDialogPatternErr_desc=Please verify that license number is of format 'AUT-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
CTMalwareScannerOptionsPanel_licenseAddDialogPatternErr_title=Invalid License Number
CTMalwareScannerOptionsPanel_LicenseFetcher_apiErr_title=Server Error
# {0} - licenseCode
@ -63,6 +63,9 @@ EULADialog.cancelButton.text=Cancel
EULADialog.acceptButton.text=Accept
EULADialog.title=Cyber Triage End User License Agreement
CTMalwareScannerOptionsPanel.licenseInfoMessageLabel.text=
CTMalwareScannerOptionsPanel.disclaimer.text=<html>The Cyber Triage Malware Scanner module uses 40+ malware scanning engines to identify if Windows executables are malicious. It requires a paid subscription to use.</html>
CTMalwareScannerOptionsPanel.purchaseFromLabel.text=For licensing information, visit
CTLicenseDialog.licenseNumberTextField.toolTipText=AUT-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
CTMalwareScannerOptionsPanel.licenseErrorLabel.text=
CTMalwareScannerOptionsPanel.licenseInfoRemoveButton.text=Remove License
CTMalwareScannerOptionsPanel.text=<html>The Cyber Triage Malware Scanner module uses 40+ malware scanning engines to identify if Windows executables are malicious. It requires a paid subscription to use.</html>
Installer_LicenseCheck_cloudExceptionTitle=Cyber Triage Error

View File

@ -50,6 +50,15 @@ public class CTLicensePersistence {
public static CTLicensePersistence getInstance() {
return instance;
}
public synchronized boolean deleteLicenseResponse() {
File licenseFile = getCTLicenseFile();
if (licenseFile.exists()) {
return licenseFile.delete();
} else {
return false;
}
}
public synchronized boolean saveLicenseResponse(LicenseResponse licenseResponse) {
if (licenseResponse != null) {

View File

@ -1,6 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.8" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 32767]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
@ -11,7 +16,7 @@
<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"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,90,0,0,1,-29"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,90,0,0,2,6"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
@ -25,10 +30,13 @@
</TitledBorder>
</Border>
</Property>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 2147483647]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
@ -37,9 +45,16 @@
<Component class="javax.swing.JLabel" name="disclaimer">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.disclaimer.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="verticalAlignment" type="int" value="1"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 32]"/>
</Property>
<Property name="name" type="java.lang.String" value="" noResource="true"/>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 32]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
@ -72,10 +87,79 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="0" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Container class="javax.swing.JPanel" name="buttonSpacer">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[32767, 0]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[5, 0]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[5, 0]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
</Container>
<Container class="javax.swing.JPanel" name="buttonPanel">
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="7" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="11" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JButton" name="licenseInfoAddButton">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.licenseInfoAddButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="licenseInfoAddButtonActionPerformed"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="12" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="licenseInfoRemoveButton">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.licenseInfoRemoveButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="licenseInfoRemoveButtonActionPerformed"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="12" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
<Component class="javax.swing.JLabel" name="licenseInfoExpiresLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
@ -84,7 +168,7 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
@ -96,7 +180,7 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="1" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
@ -108,58 +192,7 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="licenseInfoAddButton">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.licenseInfoAddButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="licenseInfoAddButtonActionPerformed"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="2" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="12" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="maxFileUploadsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.maxFileUploadsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="maxHashLookupsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.maxHashLookupsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="hashLookupsRemainingLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.hashLookupsRemainingLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="4" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
@ -171,19 +204,43 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="5" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="countersResetLabel">
<Component class="javax.swing.JLabel" name="maxHashLookupsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.countersResetLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.maxHashLookupsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="5" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="hashLookupsRemainingLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.hashLookupsRemainingLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="6" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="maxFileUploadsLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.maxFileUploadsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
@ -195,7 +252,34 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="1" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="countersResetLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.countersResetLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="8" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="licenseErrorLabel">
<Properties>
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<Connection code="java.awt.Color.RED" type="code"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/ctoptions/ctcloud/Bundle.properties" key="CTMalwareScannerOptionsPanel.licenseErrorLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
@ -208,7 +292,7 @@
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>

View File

@ -40,7 +40,6 @@ import java.util.Optional;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import org.apache.commons.lang3.StringUtils;
@ -81,6 +80,7 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
private volatile AuthTokenResponse authTokenResponse = null;
private volatile String authTokenMessage = null;
private volatile AuthTokenFetcher authTokenFetcher = null;
private volatile String authTokenError = null;
/**
* Main constructor.
@ -118,7 +118,12 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
@Override
public synchronized void saveSettings() {
ctPersistence.saveLicenseResponse(getLicenseInfo());
LicenseResponse licenseResponse = getLicenseInfo();
if (licenseResponse == null) {
this.ctPersistence.deleteLicenseResponse();
} else {
ctPersistence.saveLicenseResponse(licenseResponse);
}
}
@Override
@ -131,14 +136,14 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
Optional<LicenseInfo> licenseInfoOpt = ctPersistence.loadLicenseInfo();
LicenseInfo licenseInfo = licenseInfoOpt.orElse(null);
setLicenseDisplay(licenseInfo, null);
setMalwareScansDisplay(null, null);
setMalwareScansDisplay(null, null, null);
if (licenseInfo != null) {
loadMalwareScansInfo(licenseInfo);
this.purchaseFromLabel.setVisible(false);
this.purchaseLink.setVisible(false);
} else {
this.purchaseFromLabel.setVisible(true);
this.purchaseLink.setVisible(true);
this.purchaseLink.setVisible(true);
}
}
@ -160,7 +165,7 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
private synchronized LicenseResponse getLicenseInfo() {
return this.licenseInfo == null ? null : this.licenseInfo.getLicenseResponse();
}
}
private synchronized void setLicenseDisplay(LicenseInfo licenseInfo, String licenseMessage) {
this.licenseInfo = licenseInfo;
@ -168,9 +173,10 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
renderLicenseState();
}
private synchronized void setMalwareScansDisplay(AuthTokenResponse authTokenResponse, String authTokenMessage) {
private synchronized void setMalwareScansDisplay(AuthTokenResponse authTokenResponse, String authTokenMessage, String authTokenError) {
this.authTokenResponse = authTokenResponse;
this.authTokenMessage = authTokenMessage;
this.authTokenError = authTokenError;
renderLicenseState();
}
@ -196,7 +202,7 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
this.licenseFetcher.cancel(true);
}
setLicenseDisplay(null, Bundle.CTOPtionsPanel_loadLicenseInfo_loading());
setMalwareScansDisplay(null, null);
setMalwareScansDisplay(null, null, null);
this.licenseFetcher = new LicenseFetcher(licenseNumber);
this.licenseFetcher.execute();
}
@ -210,16 +216,22 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
}
if (licenseInfo == null || licenseInfo.getDecryptedLicense() == null) {
setMalwareScansDisplay(null, null);
setMalwareScansDisplay(null, null, null);
return;
}
setMalwareScansDisplay(null, Bundle.CTOPtionsPanel_loadMalwareScansInfo_loading());
setMalwareScansDisplay(null, Bundle.CTOPtionsPanel_loadMalwareScansInfo_loading(), null);
this.authTokenFetcher = new AuthTokenFetcher(licenseInfo.getDecryptedLicense());
this.authTokenFetcher.execute();
}
private static String htmlWrap(String msg) {
return msg == null
? null
: "<html>" + msg + "</html>";
}
/**
* 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
@ -234,27 +246,36 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
javax.swing.JLabel disclaimer = new javax.swing.JLabel();
javax.swing.JPanel licenseInfoPanel = new javax.swing.JPanel();
licenseInfoMessageLabel = new javax.swing.JLabel();
javax.swing.JPanel buttonSpacer = new javax.swing.JPanel();
javax.swing.JPanel buttonPanel = new javax.swing.JPanel();
licenseInfoAddButton = new javax.swing.JButton();
licenseInfoRemoveButton = new javax.swing.JButton();
licenseInfoExpiresLabel = new javax.swing.JLabel();
licenseInfoIdLabel = new javax.swing.JLabel();
licenseInfoUserLabel = new javax.swing.JLabel();
licenseInfoAddButton = new javax.swing.JButton();
maxFileUploadsLabel = new javax.swing.JLabel();
malwareScansMessageLabel = new javax.swing.JLabel();
maxHashLookupsLabel = new javax.swing.JLabel();
hashLookupsRemainingLabel = new javax.swing.JLabel();
malwareScansMessageLabel = new javax.swing.JLabel();
countersResetLabel = new javax.swing.JLabel();
maxFileUploadsLabel = new javax.swing.JLabel();
fileUploadsRemainingLabel = new javax.swing.JLabel();
countersResetLabel = new javax.swing.JLabel();
licenseErrorLabel = new javax.swing.JLabel();
javax.swing.JPanel purchasePanel = new javax.swing.JPanel();
purchaseFromLabel = new javax.swing.JLabel();
purchaseLink = new javax.swing.JLabel();
setMaximumSize(new java.awt.Dimension(650, 32767));
setLayout(new java.awt.GridBagLayout());
malwareScansPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.malwareScansPanel.border.title"))); // NOI18N
malwareScansPanel.setMaximumSize(new java.awt.Dimension(650, 2147483647));
malwareScansPanel.setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(disclaimer, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.disclaimer.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(disclaimer, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.text")); // NOI18N
disclaimer.setVerticalAlignment(javax.swing.SwingConstants.TOP);
disclaimer.setMaximumSize(new java.awt.Dimension(650, 32));
disclaimer.setName(""); // NOI18N
disclaimer.setPreferredSize(new java.awt.Dimension(650, 32));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
@ -270,38 +291,25 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseInfoMessageLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoExpiresLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoExpiresLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseInfoExpiresLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoIdLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoIdLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseInfoIdLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoUserLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoUserLabel.text")); // NOI18N
buttonSpacer.setMaximumSize(new java.awt.Dimension(32767, 0));
buttonSpacer.setMinimumSize(new java.awt.Dimension(5, 0));
buttonSpacer.setPreferredSize(new java.awt.Dimension(5, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseInfoUserLabel, gridBagConstraints);
licenseInfoPanel.add(buttonSpacer, gridBagConstraints);
buttonPanel.setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoAddButton, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoAddButton.text")); // NOI18N
licenseInfoAddButton.addActionListener(new java.awt.event.ActionListener() {
@ -309,27 +317,77 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
licenseInfoAddButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
buttonPanel.add(licenseInfoAddButton, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoRemoveButton, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoRemoveButton.text")); // NOI18N
licenseInfoRemoveButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
licenseInfoRemoveButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
buttonPanel.add(licenseInfoRemoveButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
licenseInfoPanel.add(licenseInfoAddButton, gridBagConstraints);
gridBagConstraints.gridheight = 7;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
licenseInfoPanel.add(buttonPanel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(maxFileUploadsLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.maxFileUploadsLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoExpiresLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoExpiresLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseInfoExpiresLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoIdLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoIdLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseInfoIdLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(licenseInfoUserLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseInfoUserLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
licenseInfoPanel.add(maxFileUploadsLabel, gridBagConstraints);
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseInfoUserLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(malwareScansMessageLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.malwareScansMessageLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(malwareScansMessageLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(maxHashLookupsLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.maxHashLookupsLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridy = 6;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
@ -338,39 +396,51 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
org.openide.awt.Mnemonics.setLocalizedText(hashLookupsRemainingLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.hashLookupsRemainingLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridy = 6;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(hashLookupsRemainingLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(malwareScansMessageLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.malwareScansMessageLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(maxFileUploadsLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.maxFileUploadsLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.gridy = 7;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(malwareScansMessageLabel, gridBagConstraints);
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
licenseInfoPanel.add(maxFileUploadsLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(fileUploadsRemainingLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.fileUploadsRemainingLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 7;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
licenseInfoPanel.add(fileUploadsRemainingLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(countersResetLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.countersResetLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridy = 8;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
licenseInfoPanel.add(countersResetLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(fileUploadsRemainingLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.fileUploadsRemainingLabel.text")); // NOI18N
licenseErrorLabel.setForeground(java.awt.Color.RED);
org.openide.awt.Mnemonics.setLocalizedText(licenseErrorLabel, org.openide.util.NbBundle.getMessage(CTMalwareScannerOptionsPanel.class, "CTMalwareScannerOptionsPanel.licenseErrorLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
licenseInfoPanel.add(fileUploadsRemainingLabel, gridBagConstraints);
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
licenseInfoPanel.add(licenseErrorLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
@ -406,7 +476,7 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
@ -414,10 +484,7 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
malwareScansPanel.add(purchasePanel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
add(malwareScansPanel, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
@ -428,7 +495,7 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
"CTMalwareScannerOptionsPanel_licenseAddDialogEnteredErr_title=License Number Already Entered",
"CTMalwareScannerOptionsPanel_licenseAddDialogEnteredErr_desc=The license number has already been entered",
"CTMalwareScannerOptionsPanel_licenseAddDialogPatternErr_title=Invalid License Number",
"CTMalwareScannerOptionsPanel_licenseAddDialogPatternErr_desc=Please verify that license number is of format 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'"})
"CTMalwareScannerOptionsPanel_licenseAddDialogPatternErr_desc=Please verify that license number is of format 'AUT-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'"})
private void licenseInfoAddButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_licenseInfoAddButtonActionPerformed
CTLicenseDialog licenseDialog = new CTLicenseDialog(WindowManager.getDefault().getMainWindow(), true);
licenseDialog.setLocationRelativeTo(this);
@ -442,11 +509,7 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
}
}
JOptionPane.showMessageDialog(
this,
Bundle.CTMalwareScannerOptionsPanel_licenseAddDialogEnteredErr_desc(),
Bundle.CTMalwareScannerOptionsPanel_licenseAddDialogEnteredErr_title(),
JOptionPane.INFORMATION_MESSAGE);
setMalwareScansDisplay(null, null, htmlWrap(Bundle.CTMalwareScannerOptionsPanel_licenseAddDialogEnteredErr_desc()));
}
}//GEN-LAST:event_licenseInfoAddButtonActionPerformed
@ -455,6 +518,12 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
gotoLink(PURCHASE_URL);
}//GEN-LAST:event_purchaseLinkMouseClicked
private void licenseInfoRemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_licenseInfoRemoveButtonActionPerformed
setLicenseDisplay(null, null);
setMalwareScansDisplay(null, null, null);
this.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
}//GEN-LAST:event_licenseInfoRemoveButtonActionPerformed
@NbBundle.Messages({
"# {0} - userName",
"# {1} - email",
@ -477,19 +546,23 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
"CTMalwareScannerOptionsPanel_malwareScans_fileUploadsRemaining=File uploads remaining: {0}"})
private synchronized void renderLicenseState() {
this.licenseInfoAddButton.setEnabled(!isLicenseAddRunning());
this.licenseInfoRemoveButton.setEnabled(this.licenseInfo != null && !isLicenseAddRunning());
this.licenseInfoMessageLabel.setVisible(StringUtils.isNotBlank(this.licenseInfoMessage));
this.licenseInfoMessageLabel.setText(this.licenseInfoMessage);
this.licenseErrorLabel.setVisible(StringUtils.isNotBlank(this.authTokenError));
this.licenseErrorLabel.setText(this.authTokenError);
if (licenseInfo == null) {
this.licenseInfoExpiresLabel.setVisible(false);
this.licenseInfoIdLabel.setVisible(false);
this.licenseInfoUserLabel.setVisible(false);
this.purchaseFromLabel.setVisible(true);
this.purchaseLink.setVisible(true);
this.purchaseLink.setVisible(true);
} else {
this.purchaseFromLabel.setVisible(false);
this.purchaseLink.setVisible(false);
this.purchaseLink.setVisible(false);
this.licenseInfoExpiresLabel.setVisible(true);
this.licenseInfoExpiresLabel.setText(Bundle.CTMalwareScannerOptionsPanel_licenseInfo_expires(
@ -592,16 +665,12 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
this.licenseInfo = LicenseDecryptorUtil.getInstance().createLicenseInfo(licenseResponse);
this.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
}
} catch (IOException | InvalidLicenseException ex) {
logger.log(Level.WARNING, "An error occurred while fetching data", ex);
JOptionPane.showMessageDialog(
CTMalwareScannerOptionsPanel.this,
Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_localErr_desc(),
Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_localErr_title(),
JOptionPane.ERROR_MESSAGE);
} finally {
setLicenseDisplay(this.licenseInfo, null);
loadMalwareScansInfo(this.licenseInfo);
} catch (IOException | InvalidLicenseException ex) {
logger.log(Level.WARNING, "An error occurred while fetching data", ex);
setLicenseDisplay(this.licenseInfo, null);
setMalwareScansDisplay(null, null, htmlWrap(Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_localErr_desc()));
}
}
@ -634,16 +703,11 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
// if no result, show unauthorized
if (licenseResponse == null) {
logger.log(Level.WARNING, "An API error occurred while fetching license information. License fetch returned no result.");
JOptionPane.showMessageDialog(
CTMalwareScannerOptionsPanel.this,
CTCloudException.ErrorCode.UN_AUTHORIZED.getDescription(),
Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_apiErr_title(),
JOptionPane.ERROR_MESSAGE);
setLicenseDisplay(licenseInfo, null);
loadMalwareScansInfo(licenseInfo);
setLicenseDisplay(null, null);
setMalwareScansDisplay(null, null, htmlWrap(CTCloudException.ErrorCode.UN_AUTHORIZED.getDescription()));
return;
}
// if not successful response
if (!Boolean.TRUE.equals(licenseResponse.isSuccess())) {
logger.log(Level.WARNING, "An API error occurred while fetching license information. License fetch was not successful");
@ -652,41 +716,29 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
if (!StringUtils.isBlank(licenseResponse.getErrorMsg())) {
message = licenseResponse.getErrorMsg();
}
JOptionPane.showMessageDialog(
CTMalwareScannerOptionsPanel.this,
message,
Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_apiErr_title(),
JOptionPane.ERROR_MESSAGE);
setLicenseDisplay(licenseInfo, null);
loadMalwareScansInfo(licenseInfo);
setLicenseDisplay(null, null);
setMalwareScansDisplay(null, null, htmlWrap(message));
return;
}
// otherwise, load
SwingUtilities.invokeLater(() -> acceptEula(licenseResponse));
} catch (InterruptedException | CancellationException ex) {
// ignore cancellation; just load current license
setLicenseDisplay(licenseInfo, null);
loadMalwareScansInfo(licenseInfo);
} catch (ExecutionException ex) {
String errMessage;
if (ex.getCause() != null && ex.getCause() instanceof CTCloudException cloudEx) {
logger.log(Level.WARNING, "An API error occurred while fetching license information", cloudEx);
JOptionPane.showMessageDialog(
CTMalwareScannerOptionsPanel.this,
cloudEx.getErrorCode().getDescription(),
Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_apiErr_title(),
JOptionPane.ERROR_MESSAGE);
errMessage = cloudEx.getErrorDetails();
} else {
logger.log(Level.WARNING, "An error occurred while fetching data", ex);
JOptionPane.showMessageDialog(
CTMalwareScannerOptionsPanel.this,
Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_localErr_desc(),
Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_localErr_title(),
JOptionPane.ERROR_MESSAGE);
errMessage = Bundle.CTMalwareScannerOptionsPanel_LicenseFetcher_localErr_desc();
}
setLicenseDisplay(licenseInfo, null);
loadMalwareScansInfo(licenseInfo);
setLicenseDisplay(null, null);
setMalwareScansDisplay(null, null, htmlWrap(errMessage));
} finally {
synchronized (CTMalwareScannerOptionsPanel.this) {
CTMalwareScannerOptionsPanel.this.licenseFetcher = null;
@ -712,13 +764,14 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
if (this.isCancelled()) {
return null;
}
return ctApiDAO.getAuthToken(decryptedLicense);
return ctApiDAO.getAuthToken(decryptedLicense);
}
@Override
protected void done() {
AuthTokenResponse authTokenResponse = null;
String authTokenError = null;
try {
authTokenResponse = get();
} catch (InterruptedException | CancellationException ex) {
@ -726,24 +779,16 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
} catch (ExecutionException ex) {
if (ex.getCause() != null && ex.getCause() instanceof CTCloudException cloudEx) {
logger.log(Level.WARNING, "An API error occurred while fetching malware scans information for license", cloudEx);
JOptionPane.showMessageDialog(
CTMalwareScannerOptionsPanel.this,
cloudEx.getErrorDetails(),
Bundle.CTMalwareScannerOptionsPanel_MalwareScansFetcher_apiErr_title(),
JOptionPane.ERROR_MESSAGE);
authTokenError = cloudEx.getErrorDetails();
} else {
logger.log(Level.WARNING, "An error occurred while fetching data", ex);
JOptionPane.showMessageDialog(
CTMalwareScannerOptionsPanel.this,
Bundle.CTMalwareScannerOptionsPanel_MalwareScansFetcher_localErr_desc(),
Bundle.CTMalwareScannerOptionsPanel_MalwareScansFetcher_localErr_title(),
JOptionPane.ERROR_MESSAGE);
authTokenError = Bundle.CTMalwareScannerOptionsPanel_MalwareScansFetcher_localErr_desc();
}
} finally {
synchronized (CTMalwareScannerOptionsPanel.this) {
CTMalwareScannerOptionsPanel.this.authTokenFetcher = null;
if (!this.isCancelled()) {
setMalwareScansDisplay(authTokenResponse, null);
setMalwareScansDisplay(authTokenResponse, null, htmlWrap(authTokenError));
}
}
}
@ -755,10 +800,12 @@ public class CTMalwareScannerOptionsPanel extends CTOptionsSubPanel {
private javax.swing.JLabel countersResetLabel;
private javax.swing.JLabel fileUploadsRemainingLabel;
private javax.swing.JLabel hashLookupsRemainingLabel;
private javax.swing.JLabel licenseErrorLabel;
private javax.swing.JButton licenseInfoAddButton;
private javax.swing.JLabel licenseInfoExpiresLabel;
private javax.swing.JLabel licenseInfoIdLabel;
private javax.swing.JLabel licenseInfoMessageLabel;
private javax.swing.JButton licenseInfoRemoveButton;
private javax.swing.JLabel licenseInfoUserLabel;
private javax.swing.JLabel malwareScansMessageLabel;
private javax.swing.JPanel malwareScansPanel;

View File

@ -0,0 +1,75 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2023 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 com.basistech.df.cybertriage.autopsy.ctoptions.ctcloud;
import com.basistech.df.cybertriage.autopsy.ctapi.CTApiDAO;
import com.basistech.df.cybertriage.autopsy.ctapi.CTCloudException;
import com.basistech.df.cybertriage.autopsy.ctapi.json.AuthTokenResponse;
import com.basistech.df.cybertriage.autopsy.ctapi.json.LicenseInfo;
import java.util.Optional;
import java.util.logging.Level;
import org.openide.modules.ModuleInstall;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
/**
* Installer to check for a functional license at startup.
*/
public class Installer extends ModuleInstall {
private final static Logger LOGGER = Logger.getLogger(Installer.class.getName());
private final static Installer INSTANCE = new Installer();
public static Installer getDefault() {
return INSTANCE;
}
private Installer() {}
@Override
public void restored() {
new Thread(new LicenseCheck()).start();
}
@Messages({
"Installer_LicenseCheck_cloudExceptionTitle=Cyber Triage Error"
})
private static class LicenseCheck implements Runnable {
@Override
public void run() {
try {
Optional<LicenseInfo> licenseInfoOpt = CTLicensePersistence.getInstance().loadLicenseInfo();
if (licenseInfoOpt.isEmpty()) {
return;
}
LicenseInfo licenseInfo = licenseInfoOpt.get();
AuthTokenResponse authTokenResp = CTApiDAO.getInstance().getAuthToken(licenseInfo.getDecryptedLicense());
// if we got this far, then it was a successful request
} catch (CTCloudException cloudEx) {
LOGGER.log(Level.WARNING, "A cloud exception occurred while fetching an auth token", cloudEx);
MessageNotifyUtil.Notify.warn(Bundle.Installer_LicenseCheck_cloudExceptionTitle(), cloudEx.getErrorDetails());
} catch (Throwable t) {
LOGGER.log(Level.WARNING, "An error occurred while fetching license info", t);
}
}
}
}

View File

@ -3,13 +3,13 @@
# Click nbfs://nbhost/SystemFileSystem/Templates/Other/properties.properties to edit this template
CTIncidentImportOptionsPanel.border.title=Local Settings
CTIncidentImportOptionsPanel.fileRepoPathLabel.text=Update the Cyber Triage Data Folder if you are not using the default location:
CTIncidentImportOptionsPanel.fileRepoPathLabel.text=<html>Update the Cyber Triage Data Folder if you are not using the default location:</html>
CTIncidentImportOptionsPanel.fileRepoPathField.text=
CTIncidentImportOptionsPanel.fileRepoBrowseButton.text=Browse
CTIncidentImportOptionsPanel.caseOpenWarningLabel.text=Some settings cannot be modified while a case is open.
CTIncidentImportOptionsPanel.fileRepoFileChooser.title=Cyber Triage Data Folder
CTIncidentImportOptionsPanel.border.title_1=Incident Importer
CTIncidentImportOptionsPanel.incidentTextLabel.text=The Cyber Triage Incident Import module allows you to open data collected by Cyber Triage in Autopsy. To use this feature you must install the Cyber Triage Import Module.
CTIncidentImportOptionsPanel.incidentTextLabel.text=<html>The Cyber Triage Incident Import module allows you to open data collected by Cyber Triage in Autopsy. To use this feature you must install the Cyber Triage Import Module.</html>
CTincidentImportOptionsPanel.instructionsTextLabel.text=
CTIncidentImportOptionsPanel.instructionsTextLabel.text=For instructions on obtaining the module refer to:
CTIncidentImportOptionsPanel.importModule.text=Cyber Triage Import Module:

View File

@ -3,13 +3,13 @@
# Click nbfs://nbhost/SystemFileSystem/Templates/Other/properties.properties to edit this template
CTIncidentImportOptionsPanel.border.title=Local Settings
CTIncidentImportOptionsPanel.fileRepoPathLabel.text=Update the Cyber Triage Data Folder if you are not using the default location:
CTIncidentImportOptionsPanel.fileRepoPathLabel.text=<html>Update the Cyber Triage Data Folder if you are not using the default location:</html>
CTIncidentImportOptionsPanel.fileRepoPathField.text=
CTIncidentImportOptionsPanel.fileRepoBrowseButton.text=Browse
CTIncidentImportOptionsPanel.caseOpenWarningLabel.text=Some settings cannot be modified while a case is open.
CTIncidentImportOptionsPanel.fileRepoFileChooser.title=Cyber Triage Data Folder
CTIncidentImportOptionsPanel.border.title_1=Incident Importer
CTIncidentImportOptionsPanel.incidentTextLabel.text=The Cyber Triage Incident Import module allows you to open data collected by Cyber Triage in Autopsy. To use this feature you must install the Cyber Triage Import Module.
CTIncidentImportOptionsPanel.incidentTextLabel.text=<html>The Cyber Triage Incident Import module allows you to open data collected by Cyber Triage in Autopsy. To use this feature you must install the Cyber Triage Import Module.</html>
CTincidentImportOptionsPanel.instructionsTextLabel.text=
CTIncidentImportOptionsPanel.instructionsTextLabel.text=For instructions on obtaining the module refer to:
CTIncidentImportOptionsPanel.importModule.text=Cyber Triage Import Module:

View File

@ -9,6 +9,15 @@
</TitledBorder>
</Border>
</Property>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 2147483647]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 206]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 206]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
@ -20,7 +29,7 @@
<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"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-50,0,0,1,-17"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-54,0,0,2,36"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
@ -28,7 +37,7 @@
<Container class="javax.swing.JPanel" name="incidentTextPanel">
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
@ -39,10 +48,16 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties" key="CTIncidentImportOptionsPanel.incidentTextLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[600, 32]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="0" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
@ -51,6 +66,9 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties" key="CTIncidentImportOptionsPanel.importModule.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
@ -58,7 +76,7 @@
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="3" anchor="10" weightX="0.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="3" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
@ -79,7 +97,7 @@
<Container class="javax.swing.JPanel" name="instructionsPanel">
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
@ -90,6 +108,9 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties" key="CTIncidentImportOptionsPanel.instructionsTextLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="For instructions on obtaining the module refer to:"/>
@ -108,22 +129,33 @@
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
<Color id="Hand Cursor"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
</Properties>
<Events>
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="instructionsLinkLabelMouseClicked"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="2" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="repoPanel">
<Properties>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 2147483647]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[650, 75]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
@ -134,6 +166,12 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties" key="CTIncidentImportOptionsPanel.fileRepoPathLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[600, 16]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
@ -150,6 +188,9 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties" key="CTIncidentImportOptionsPanel.fileRepoPathField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value=""/>
@ -189,7 +230,7 @@
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="17" weightX="0.0" weightY="0.0"/>
<GridBagConstraints gridX="0" gridY="2" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="17" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>

View File

@ -161,24 +161,31 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel {
caseOpenWarningLabel = new javax.swing.JLabel();
setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.border.title_1"))); // NOI18N
setMaximumSize(new java.awt.Dimension(650, 2147483647));
setMinimumSize(new java.awt.Dimension(650, 206));
setPreferredSize(new java.awt.Dimension(650, 206));
setLayout(new java.awt.GridBagLayout());
incidentTextPanel.setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(incidentTextLabel, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.incidentTextLabel.text")); // NOI18N
incidentTextLabel.setMaximumSize(new java.awt.Dimension(600, 32));
incidentTextLabel.setPreferredSize(null);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
incidentTextPanel.add(incidentTextLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(importModule, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.importModule.text")); // NOI18N
importModule.setPreferredSize(null);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 3);
incidentTextPanel.add(importModule, gridBagConstraints);
@ -194,11 +201,14 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel {
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
add(incidentTextPanel, gridBagConstraints);
instructionsPanel.setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(instructionsTextLabel, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.instructionsTextLabel.text")); // NOI18N
instructionsTextLabel.setPreferredSize(null);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
@ -209,6 +219,7 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel {
org.openide.awt.Mnemonics.setLocalizedText(instructionsLinkLabel, getHtmlLink(CT_IMPORTER_DOC_LINK));
instructionsLinkLabel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
instructionsLinkLabel.setPreferredSize(null);
instructionsLinkLabel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
instructionsLinkLabelMouseClicked(evt);
@ -218,18 +229,25 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel {
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 2, 5, 5);
instructionsPanel.add(instructionsLinkLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
add(instructionsPanel, gridBagConstraints);
repoPanel.setMaximumSize(new java.awt.Dimension(650, 2147483647));
repoPanel.setPreferredSize(new java.awt.Dimension(650, 75));
repoPanel.setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(fileRepoPathLabel, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.fileRepoPathLabel.text")); // NOI18N
fileRepoPathLabel.setMaximumSize(new java.awt.Dimension(600, 16));
fileRepoPathLabel.setPreferredSize(null);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
@ -239,6 +257,7 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel {
repoPanel.add(fileRepoPathLabel, gridBagConstraints);
fileRepoPathField.setText(org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.fileRepoPathField.text")); // NOI18N
fileRepoPathField.setPreferredSize(null);
fileRepoPathField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
fileRepoPathFieldActionPerformed(evt);
@ -274,13 +293,16 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel {
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
repoPanel.add(caseOpenWarningLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
add(repoPanel, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
private void fileRepoBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileRepoBrowseButtonActionPerformed

View File

@ -33,6 +33,9 @@ MalwareScanIngestModule_ShareProcessing_noLookupsRemaining_desc=There are no mor
MalwareScanIngestModule_ShareProcessing_noLookupsRemaining_title=No remaining lookups
MalwareScanIngestModule_ShareProcessing_noUploadsRemaining_desc=There are no more remaining file uploads for this license at this time. File uploading will be disabled.
MalwareScanIngestModule_ShareProcessing_noUploadsRemaining_title=No remaining file uploads
MalwareScanIngestModule_ShareProcessing_startup_generalException_desc=An exception occurred on MalwareScanIngestModule startup. See the log for more information.
MalwareScanIngestModule_ShareProcessing_startup_invalidLicenseWarning_desc=The current Cyber Triage license is no longer valid. Please remove the license from the Cyber Triage options panel.
MalwareScanIngestModule_ShareProcessing_startup_invalidLicenseWarning_title=Invalid License
MalwareScanIngestModule_uploadFile_noRemainingFileUploads_desc=There are no more file uploads on this license at this time. File uploads will be disabled for remaining uploads.
MalwareScanIngestModule_uploadFile_noRemainingFileUploads_title=No Remaining File Uploads
# {0} - objectId

View File

@ -161,7 +161,10 @@ class MalwareScanIngestModule implements FileIngestModule {
"MalwareScanIngestModule_ShareProcessing_noUploadsRemaining_desc=There are no more remaining file uploads for this license at this time. File uploading will be disabled.",
"MalwareScanIngestModule_ShareProcessing_lowUploadsLimitWarning_title=File Uploads Limit Low",
"# {0} - remainingUploads",
"MalwareScanIngestModule_ShareProcessing_lowUploadsLimitWarning_desc=This license only has {0} file uploads remaining.",})
"MalwareScanIngestModule_ShareProcessing_lowUploadsLimitWarning_desc=This license only has {0} file uploads remaining.",
"MalwareScanIngestModule_ShareProcessing_startup_generalException_desc=An exception occurred on MalwareScanIngestModule startup. See the log for more information.",
"MalwareScanIngestModule_ShareProcessing_startup_invalidLicenseWarning_title=Invalid License",
"MalwareScanIngestModule_ShareProcessing_startup_invalidLicenseWarning_desc=The current Cyber Triage license is no longer valid. Please remove the license from the Cyber Triage options panel."})
synchronized void startUp(IngestJobContext context, boolean uploadFiles) throws IngestModuleException {
// only run this code once per startup
if (ingestJobState != null) {
@ -170,9 +173,18 @@ class MalwareScanIngestModule implements FileIngestModule {
try {
ingestJobState = getNewJobState(context, uploadFiles);
} catch (CTCloudException cloudEx) {
ingestJobState = IngestJobState.DISABLED;
logger.log(Level.WARNING, "An error occurred while starting the MalwareScanIngestModule.", cloudEx);
throw new IngestModuleException(cloudEx.getErrorDetails(), cloudEx);
} catch (IllegalStateException stateEx) {
ingestJobState = IngestJobState.DISABLED;
logger.log(Level.WARNING, "An error occurred while starting the MalwareScanIngestModule.", stateEx);
throw new IngestModuleException(stateEx.getMessage(), stateEx);
} catch (Exception ex) {
ingestJobState = IngestJobState.DISABLED;
throw new IngestModuleException("An exception occurred on MalwareScanIngestModule startup", ex);
logger.log(Level.WARNING, "An error occurred while starting the MalwareScanIngestModule.", ex);
throw new IngestModuleException(Bundle.MalwareScanIngestModule_ShareProcessing_startup_generalException_desc(), ex);
}
}
@ -188,12 +200,7 @@ class MalwareScanIngestModule implements FileIngestModule {
// get saved license
Optional<LicenseInfo> licenseInfoOpt = ctSettingsPersistence.loadLicenseInfo();
if (licenseInfoOpt.isEmpty() || licenseInfoOpt.get().getDecryptedLicense() == null) {
notifyWarning(
Bundle.MalwareScanIngestModule_ShareProcessing_noLicense_title(),
Bundle.MalwareScanIngestModule_ShareProcessing_noLicense_desc(),
null);
return IngestJobState.DISABLED;
throw new IllegalStateException(Bundle.MalwareScanIngestModule_ShareProcessing_noLicense_desc());
}
AuthTokenResponse authTokenResponse = ctApiDAO.getAuthToken(licenseInfoOpt.get().getDecryptedLicense());

View File

@ -107,7 +107,7 @@ class AddImageTask implements Runnable {
try {
synchronized (tskAddImageProcessLock) {
if (!tskAddImageProcessStopped) {
tskAddImageProcess = currentCase.getSleuthkitCase().makeAddImageProcess(imageDetails.timeZone, true, imageDetails.ignoreFatOrphanFiles, imageWriterPath);
tskAddImageProcess = currentCase.getSleuthkitCase().makeAddImageProcess(imageDetails.timeZone, true, imageDetails.ignoreFatOrphanFiles, imageWriterPath, imageDetails.password);
} else {
return;
}
@ -319,8 +319,9 @@ class AddImageTask implements Runnable {
String sha1;
String sha256;
ImageWriterSettings imageWriterSettings;
String password;
ImageDetails(String deviceId, Image image, int sectorSize, String timeZone, boolean ignoreFatOrphanFiles, String md5, String sha1, String sha256, ImageWriterSettings imageWriterSettings) {
ImageDetails(String deviceId, Image image, int sectorSize, String timeZone, boolean ignoreFatOrphanFiles, String md5, String sha1, String sha256, ImageWriterSettings imageWriterSettings, String password) {
this.deviceId = deviceId;
this.image = image;
this.sectorSize = sectorSize;
@ -330,6 +331,7 @@ class AddImageTask implements Runnable {
this.sha1 = sha1;
this.sha256 = sha256;
this.imageWriterSettings = imageWriterSettings;
this.password = password;
}
String getImagePath() {

View File

@ -49,6 +49,8 @@ final class AddImageWizardDataSourceSettingsVisual extends JPanel {
private JPanel currentPanel;
private final Map<String, DataSourceProcessor> datasourceProcessorsMap = new HashMap<>();
private final PanelUpdateListener panelUpdateListener;
private String currentDsp;
@ -60,6 +62,7 @@ final class AddImageWizardDataSourceSettingsVisual extends JPanel {
AddImageWizardDataSourceSettingsVisual(AddImageWizardDataSourceSettingsPanel wizPanel) {
initComponents();
this.wizPanel = wizPanel;
this.panelUpdateListener = new PanelUpdateListener();
typePanel.setLayout(new BorderLayout());
discoverDataSourceProcessors();
currentDsp = ImageDSProcessor.getType(); //default value to the ImageDSProcessor
@ -107,24 +110,37 @@ final class AddImageWizardDataSourceSettingsVisual extends JPanel {
*/
@SuppressWarnings("deprecation")
private void updateCurrentPanel(JPanel panel) {
cleanupUpdateListener(currentPanel);
currentPanel = panel;
typePanel.removeAll();
typePanel.add(currentPanel, BorderLayout.CENTER);
typePanel.validate();
typePanel.repaint();
currentPanel.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString())) {
wizPanel.enableNextButton(getCurrentDSProcessor().isPanelValid());
}
if (evt.getPropertyName().equals(DataSourceProcessor.DSP_PANEL_EVENT.FOCUS_NEXT.toString())) {
wizPanel.moveFocusToNext();
}
}
});
cleanupUpdateListener(currentPanel);
currentPanel.addPropertyChangeListener(panelUpdateListener);
this.wizPanel.enableNextButton(getCurrentDSProcessor().isPanelValid());
}
/**
* Removes PanelUpdateListener from panel if found.
* @param panel The panel from which to remove the listener.
*/
private void cleanupUpdateListener(JPanel panel) {
if (panel == null) {
return;
}
PropertyChangeListener[] listeners = panel.getPropertyChangeListeners();
if (listeners == null) {
return;
}
for (PropertyChangeListener listener: listeners) {
if (listener instanceof PanelUpdateListener) {
panel.removePropertyChangeListener(listener);
}
}
}
/**
* Returns the currently selected DS Processor
@ -221,4 +237,20 @@ final class AddImageWizardDataSourceSettingsVisual extends JPanel {
protected abstract boolean addSeparatorAfter(JList list, Object value, int index);
}
/**
* A property change listener that responds to update events.
*/
private class PanelUpdateListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString())) {
wizPanel.enableNextButton(getCurrentDSProcessor().isPanelValid());
}
if (evt.getPropertyName().equals(DataSourceProcessor.DSP_PANEL_EVENT.FOCUS_NEXT.toString())) {
wizPanel.moveFocusToNext();
}
}
}
}

View File

@ -270,3 +270,6 @@ LocalFilesPanel.timestampToIncludeLabel.text=Timestamps To Include:
LocalFilesPanel.accessTimeCheckBox.text=Access Time - Can be changed when the file is opened
LocalFilesPanel.timeStampToIncludeLabel.text=Timestamps To Include:
LocalFilesPanel.timeStampNoteLabel.text=NOTE: Time stamps may have changed when the files were copied to the current location.
ImageFilePanel.passwordLabel.text=Bitlocker Password (optional):
ImageFilePanel.passwordTextField.text=
ImageFilePanel.loadingLabel.text=loading...

View File

@ -151,7 +151,7 @@ GeneralFilter.encaseImageDesc.text=Encase Images (*.e01)
GeneralFilter.executableDesc.text=Executables (*.exe)
GeneralFilter.graphicImageDesc.text=Images (*.png, *.jpg, *.jpeg, *.gif, *.bmp)
GeneralFilter.rawImageDesc.text=Raw Images (*.img, *.dd, *.001, *.aa, *.raw, *.bin)
GeneralFilter.virtualMachineImageDesc.text=Virtual Machines (*.vmdk, *.vhd)
GeneralFilter.virtualMachineImageDesc.text=Virtual Machines (*.vmdk, *.vhd, *.vhdx)
ImageFilePanel.000.confirmationMessage=The selected file has extenson .001 but there is a .000 file in the sequence of raw images.\nShould the .000 file be used as the start, instead of the selected .001 file?\n
ImageFilePanel.moduleErr=Module Error
ImageFilePanel.moduleErr.msg=A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.\n
@ -159,6 +159,10 @@ ImageFilePanel.validatePanel.dataSourceOnCDriveError=Warning: Path to multi-user
ImageFilePanel.validatePanel.invalidMD5=Invalid MD5 hash
ImageFilePanel.validatePanel.invalidSHA1=Invalid SHA1 hash
ImageFilePanel.validatePanel.invalidSHA256=Invalid SHA256 hash
# {0} - imageOpenError
ImageFilePanel_validatePanel_imageOpenError=<html><body><p>An error occurred while opening the image:{0}</p></body></html>
ImageFilePanel_validatePanel_unknownError=<html><body><p>An unknown error occurred while attempting to validate the image</p></body></html>
ImageFilePanel_validatePanel_unknownErrorMsg=<unknown>
IngestJobInfoPanel.IngestJobTableModel.EndTime.header=End Time
IngestJobInfoPanel.IngestJobTableModel.IngestStatus.header=Ingest Status
IngestJobInfoPanel.IngestJobTableModel.StartTime.header=Start Time
@ -504,3 +508,6 @@ LocalFilesPanel.timestampToIncludeLabel.text=Timestamps To Include:
LocalFilesPanel.accessTimeCheckBox.text=Access Time - Can be changed when the file is opened
LocalFilesPanel.timeStampToIncludeLabel.text=Timestamps To Include:
LocalFilesPanel.timeStampNoteLabel.text=NOTE: Time stamps may have changed when the files were copied to the current location.
ImageFilePanel.passwordLabel.text=Bitlocker Password (optional):
ImageFilePanel.passwordTextField.text=
ImageFilePanel.loadingLabel.text=loading...

View File

@ -27,6 +27,7 @@ import java.util.List;
import java.util.logging.Level;
import java.util.UUID;
import javax.swing.filechooser.FileFilter;
import org.apache.commons.lang3.StringUtils;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
import org.openide.util.lookup.ServiceProviders;
@ -82,6 +83,7 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
private String sha1;
private String sha256;
private Host host = null;
private String password;
static {
filtersList.add(allFilter);
@ -162,7 +164,9 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
*/
@Override
public boolean isPanelValid() {
return configPanel.validatePanel();
// before attempting to validate the panel (a potentially long running operation),
// check if the validation is loading or on delay.
return !configPanel.isValidationLoading() && configPanel.validatePanel();
}
/**
@ -181,7 +185,7 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
*/
@Override
public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
run(null, progressMonitor, callback);
run(null, null, progressMonitor, callback);
}
/**
@ -201,12 +205,19 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
*/
@Override
public void run(Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
run(null, host, progressMonitor, callback);
}
@Override
public void run(String password, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
ingestStream = new DefaultIngestStream();
readConfigSettings();
this.host = host;
this.password = StringUtils.defaultString(password, this.password);
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.host);
new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.password, this.host);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex);
final List<String> errors = new ArrayList<>();
@ -215,117 +226,9 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
return;
}
doAddImageProcess(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, progressMonitor, callback);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
* configuration panel. Files found during ingest will be sent directly to
* the IngestStream provided. Returns as soon as the background task is
* started. The background task uses a callback object to signal task
* completion and return results.
*
* This method should not be called unless isPanelValid returns true, and
* should only be called for DSPs that support ingest streams.
*
* @param settings The ingest job settings.
* @param progress Progress monitor that will be used by the background task
* to report progress.
* @param callBack Callback that will be used by the background task to
* return results.
*/
@Override
public void runWithIngestStream(IngestJobSettings settings, DataSourceProcessorProgressMonitor progress,
DataSourceProcessorCallback callBack) {
runWithIngestStream(null, settings, progress, callBack);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
* configuration panel. Files found during ingest will be sent directly to
* the IngestStream provided. Returns as soon as the background task is
* started. The background task uses a callback object to signal task
* completion and return results.
*
* This method should not be called unless isPanelValid returns true, and
* should only be called for DSPs that support ingest streams.
*
* @param host The host for this data source.
* @param settings The ingest job settings.
* @param progress Progress monitor that will be used by the background task
* to report progress.
* @param callBack Callback that will be used by the background task to
* return results.
*/
@Override
public void runWithIngestStream(Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progress,
DataSourceProcessorCallback callBack) {
// Read the settings from the wizard
readConfigSettings();
this.host = host;
// Set up the data source before creating the ingest stream
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.host);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex);
final List<String> errors = new ArrayList<>();
errors.add(ex.getMessage());
callBack.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>());
return;
}
// Now initialize the ingest stream
try {
ingestStream = IngestManager.getInstance().openIngestStream(image, settings);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error starting ingest modules", ex);
// There was an error with ingest, but the data source has already been added
// so proceed with the defaultIngestStream. Code in openIngestStream
// should have caused a dialog to popup with the errors.
ingestStream = new DefaultIngestStream();
}
doAddImageProcess(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, progress, callBack);
}
/**
* Store the options from the config panel.
*/
private void readConfigSettings() {
configPanel.storeSettings();
deviceId = UUID.randomUUID().toString();
imagePath = configPanel.getContentPaths();
sectorSize = configPanel.getSectorSize();
timeZone = configPanel.getTimeZone();
ignoreFatOrphanFiles = configPanel.getNoFatOrphans();
md5 = configPanel.getMd5();
if (md5.isEmpty()) {
md5 = null;
}
sha1 = configPanel.getSha1();
if (sha1.isEmpty()) {
sha1 = null;
}
sha256 = configPanel.getSha256();
if (sha256.isEmpty()) {
sha256 = null;
}
}
/**
* Check if this DSP supports ingest streams.
*
* @return True if this DSP supports an ingest stream, false otherwise.
*/
@Override
public boolean supportsIngestStream() {
return true;
doAddImageProcess(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, this.password, progressMonitor, callback);
}
/**
* Adds a data source to the case database using a background task in a
@ -352,7 +255,7 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
ingestStream = new DefaultIngestStream();
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId);
new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId, null, null);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex);
final List<String> errors = new ArrayList<>();
@ -361,9 +264,134 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
return;
}
doAddImageProcess(deviceId, imagePath, 0, timeZone, ignoreFatOrphanFiles, null, null, null, progressMonitor, callback);
doAddImageProcess(deviceId, imagePath, 0, timeZone, ignoreFatOrphanFiles, null, null, null, this.password, progressMonitor, callback);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
* configuration panel. Files found during ingest will be sent directly to
* the IngestStream provided. Returns as soon as the background task is
* started. The background task uses a callback object to signal task
* completion and return results.
*
* This method should not be called unless isPanelValid returns true, and
* should only be called for DSPs that support ingest streams.
*
* @param settings The ingest job settings.
* @param progress Progress monitor that will be used by the background task
* to report progress.
* @param callBack Callback that will be used by the background task to
* return results.
*/
@Override
public void runWithIngestStream(IngestJobSettings settings, DataSourceProcessorProgressMonitor progress,
DataSourceProcessorCallback callBack) {
runWithIngestStream(null, null, settings, progress, callBack);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
* configuration panel. Files found during ingest will be sent directly to
* the IngestStream provided. Returns as soon as the background task is
* started. The background task uses a callback object to signal task
* completion and return results.
*
* This method should not be called unless isPanelValid returns true, and
* should only be called for DSPs that support ingest streams.
*
* @param host The host for this data source.
* @param settings The ingest job settings.
* @param progress Progress monitor that will be used by the background task
* to report progress.
* @param callBack Callback that will be used by the background task to
* return results.
*/
@Override
public void runWithIngestStream(Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progress,
DataSourceProcessorCallback callBack) {
runWithIngestStream(null, host, settings, progress, callBack);
}
@Override
public void runWithIngestStream(String password, Host host, IngestJobSettings settings,
DataSourceProcessorProgressMonitor progress, DataSourceProcessorCallback callBack) {
// Read the settings from the wizard
readConfigSettings();
this.host = host;
this.password = StringUtils.defaultString(password, this.password);
// Set up the data source before creating the ingest stream
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.password, this.host);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex);
final List<String> errors = new ArrayList<>();
errors.add(ex.getMessage());
callBack.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>());
return;
}
// Now initialize the ingest stream
try {
ingestStream = IngestManager.getInstance().openIngestStream(image, settings);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error starting ingest modules", ex);
// There was an error with ingest, but the data source has already been added
// so proceed with the defaultIngestStream. Code in openIngestStream
// should have caused a dialog to popup with the errors.
ingestStream = new DefaultIngestStream();
}
doAddImageProcess(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, this.password, progress, callBack);
}
/**
* Store the options from the config panel.
*/
private void readConfigSettings() {
configPanel.storeSettings();
deviceId = UUID.randomUUID().toString();
imagePath = configPanel.getContentPaths();
sectorSize = configPanel.getSectorSize();
timeZone = configPanel.getTimeZone();
ignoreFatOrphanFiles = configPanel.getNoFatOrphans();
md5 = configPanel.getMd5();
if (md5.isEmpty()) {
md5 = null;
}
sha1 = configPanel.getSha1();
if (sha1.isEmpty()) {
sha1 = null;
}
sha256 = configPanel.getSha256();
if (sha256.isEmpty()) {
sha256 = null;
}
this.password = configPanel.getPassword();
if (this.password.isEmpty()) {
password = null;
}
}
/**
* Check if this DSP supports ingest streams.
*
* @return True if this DSP supports an ingest stream, false otherwise.
*/
@Override
public boolean supportsIngestStream() {
return true;
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the given settings instead of those provided by the
@ -389,11 +417,12 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
* @param md5 The MD5 hash of the image, may be null.
* @param sha1 The SHA-1 hash of the image, may be null.
* @param sha256 The SHA-256 hash of the image, may be null.
* @param password Password for image decryption. May be null.
* @param progressMonitor Progress monitor for reporting progress
* during processing.
* @param callback Callback to call when processing is done.
*/
private void doAddImageProcess(String deviceId, String imagePath, int sectorSize, String timeZone, boolean ignoreFatOrphanFiles, String md5, String sha1, String sha256, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
private void doAddImageProcess(String deviceId, String imagePath, int sectorSize, String timeZone, boolean ignoreFatOrphanFiles, String md5, String sha1, String sha256, String password, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
// If the data source or ingest stream haven't been initialized, stop processing
if (ingestStream == null) {
@ -413,7 +442,7 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
return;
}
AddImageTask.ImageDetails imageDetails = new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, null);
AddImageTask.ImageDetails imageDetails = new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, null, password);
addImageTask = new AddImageTask(imageDetails,
progressMonitor,
new StreamingAddDataSourceCallbacks(ingestStream),
@ -449,6 +478,7 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
timeZone = null;
ignoreFatOrphanFiles = false;
host = null;
password = null;
configPanel.reset();
}
@ -463,6 +493,13 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
@Override
public int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException {
return canProcess(dataSourcePath, null);
}
@Override
public int canProcess(Path dataSourcePath, String password) throws AutoIngestDataSourceProcessorException {
// check file extension for supported types
if (!isAcceptedByFiler(dataSourcePath.toFile(), filtersList)) {
@ -470,10 +507,20 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
}
try {
// verify that the image has a file system that TSK can process
if (!DataSourceUtils.imageHasFileSystem(dataSourcePath)) {
// image does not have a file system that TSK can process
return 0;
if (password == null) {
// verify that the image has a file system that TSK can process
if (!DataSourceUtils.imageHasFileSystem(dataSourcePath)) {
// image does not have a file system that TSK can process
return 0;
}
} else {
// verify that the image has a file system that TSK can process
if (!DataSourceUtils.imageHasFileSystem(dataSourcePath, password)) {
// image does not have a file system that TSK can process
return 0;
}
}
} catch (Exception ex) {
throw new AutoIngestDataSourceProcessorException("Exception inside canProcess() method", ex);
@ -485,23 +532,29 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
@Override
public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
process(deviceId, dataSourcePath, null, progressMonitor, callBack);
process(deviceId, dataSourcePath, null, null, progressMonitor, callBack);
}
@Override
public void process(String deviceId, Path dataSourcePath, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
process(deviceId, dataSourcePath, null, host, progressMonitor, callBack);
}
@Override
public void process(String deviceId, Path dataSourcePath, String password, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
// this method does not use the config panel
this.deviceId = deviceId;
this.imagePath = dataSourcePath.toString();
this.sectorSize = 0;
this.timeZone = Calendar.getInstance().getTimeZone().getID();
this.password = StringUtils.defaultString(password, this.password);
this.host = host;
this.ignoreFatOrphanFiles = false;
ingestStream = new DefaultIngestStream();
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId, host);
new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId, this.password, host);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex);
final List<String> errors = new ArrayList<>();
@ -510,28 +563,36 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
return;
}
doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, progressMonitor, callBack);
doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, this.password, progressMonitor, callBack);
}
@Override
public IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
return processWithIngestStream(deviceId, dataSourcePath, null, settings, progressMonitor, callBack);
return processWithIngestStream(deviceId, dataSourcePath, null, null, settings, progressMonitor, callBack);
}
@Override
public IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
return processWithIngestStream(deviceId, dataSourcePath, null, host, settings, progressMonitor, callBack);
}
@Override
public IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, String password, Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
// this method does not use the config panel
this.deviceId = deviceId;
this.imagePath = dataSourcePath.toString();
this.sectorSize = 0;
this.timeZone = Calendar.getInstance().getTimeZone().getID();
this.host = host;
this.password = password;
this.ignoreFatOrphanFiles = false;
// Set up the data source before creating the ingest stream
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, host);
new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, password, host);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex);
final List<String> errors = new ArrayList<>();
@ -551,8 +612,10 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour
return null;
}
doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, progressMonitor, callBack);
doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, password, progressMonitor, callBack);
return ingestStream;
}
}

View File

@ -19,108 +19,10 @@
<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"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-38,0,0,2,46"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Component id="pathTextField" max="32767" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="browseButton" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="pathLabel" min="-2" max="-2" attributes="0"/>
<Component id="noFatOrphansCheckbox" alignment="0" min="-2" pref="262" max="-2" attributes="0"/>
</Group>
<EmptySpace min="0" pref="368" max="32767" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="errorLabel" alignment="0" min="-2" max="-2" attributes="0"/>
<Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
<Group type="102" attributes="0">
<Component id="timeZoneLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="timeZoneComboBox" min="-2" pref="455" max="-2" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Component id="sectorSizeLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="sectorSizeComboBox" min="-2" pref="455" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="1" attributes="0">
<Component id="md5HashLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="md5HashTextField" min="-2" pref="455" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="1" attributes="0">
<Component id="sha1HashLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="sha1HashTextField" min="-2" pref="455" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="1" attributes="0">
<Component id="sha256HashLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="sha256HashTextField" min="-2" pref="455" max="-2" attributes="0"/>
</Group>
</Group>
<Component id="hashValuesNoteLabel" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="hashValuesLabel" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Component id="pathLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="browseButton" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="pathTextField" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="noFatOrphansCheckbox" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="timeZoneComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="timeZoneLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="sectorSizeComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="sectorSizeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" pref="39" max="-2" attributes="0"/>
<Component id="hashValuesLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="md5HashTextField" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="md5HashLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="sha1HashTextField" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="sha1HashLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="sha256HashTextField" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="sha256HashLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="hashValuesNoteLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="errorLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="pathLabel">
<Properties>
@ -128,6 +30,11 @@
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.pathLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="browseButton">
<Properties>
@ -138,6 +45,11 @@
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseButtonActionPerformed"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="2" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextField" name="pathTextField">
<Properties>
@ -145,6 +57,11 @@
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.pathTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="1" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="timeZoneLabel">
<Properties>
@ -152,6 +69,11 @@
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.timeZoneLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JComboBox" name="timeZoneComboBox">
<Properties>
@ -163,6 +85,11 @@
<AuxValues>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="3" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JCheckBox" name="noFatOrphansCheckbox">
<Properties>
@ -173,6 +100,11 @@
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.noFatOrphansCheckbox.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="2" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="errorLabel">
<Properties>
@ -182,7 +114,22 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.errorLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="verticalAlignment" type="int" value="1"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[500, 60]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[200, 20]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[200, 60]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="11" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="sectorSizeLabel">
<Properties>
@ -190,6 +137,11 @@
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.sectorSizeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="4" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JComboBox" name="sectorSizeComboBox">
<Properties>
@ -200,6 +152,11 @@
<AuxValues>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="4" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="sha256HashLabel">
<Properties>
@ -208,6 +165,11 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="9" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextField" name="sha256HashTextField">
<Properties>
@ -216,6 +178,11 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="9" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextField" name="sha1HashTextField">
<Properties>
@ -224,6 +191,11 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="8" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextField" name="md5HashTextField">
<Properties>
@ -232,6 +204,11 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="7" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="sha1HashLabel">
<Properties>
@ -240,6 +217,11 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="8" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="md5HashLabel">
<Properties>
@ -248,6 +230,11 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="7" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="hashValuesLabel">
<Properties>
@ -256,6 +243,11 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="6" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="hashValuesNoteLabel">
<Properties>
@ -264,6 +256,84 @@
</Property>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="10" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JLabel" name="passwordLabel">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.passwordLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="5" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JTextField" name="passwordTextField">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.passwordTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="1" gridY="5" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
<Container class="javax.swing.JPanel" name="spacer">
<AuxValues>
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="12" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="1.0"/>
</Constraint>
</Constraints>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
</Container>
<Component class="javax.swing.JLabel" name="loadingLabel">
<Properties>
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
<Image iconType="3" name="/org/sleuthkit/autopsy/images/working_spinner.gif"/>
</Property>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="ImageFilePanel.loadingLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="verticalAlignment" type="int" value="1"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[500, 60]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[200, 20]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[200, 60]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="11" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Form>

View File

@ -18,9 +18,16 @@
*/
package org.sleuthkit.autopsy.casemodule;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.io.File;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Supplier;
import java.util.logging.Level;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@ -32,11 +39,14 @@ import org.apache.commons.lang3.StringUtils;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
import org.sleuthkit.autopsy.coreutils.DriveUtils;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.PathValidator;
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
import org.sleuthkit.autopsy.guiutils.JFileChooserFactory;
import org.sleuthkit.datamodel.HashUtility;
import org.sleuthkit.datamodel.SleuthkitJNI;
import org.sleuthkit.datamodel.SleuthkitJNI.TestOpenImageResult;
/**
* Panel for adding an image file such as .img, .E0x, .00x, etc. Allows the user
@ -44,8 +54,10 @@ import org.sleuthkit.datamodel.HashUtility;
* files in FAT32.
*/
@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
public class ImageFilePanel extends JPanel implements DocumentListener {
public class ImageFilePanel extends JPanel {
private static final Logger logger = Logger.getLogger(AddImageTask.class.getName());
private static final long serialVersionUID = 1L;
private static final String PROP_LASTIMAGE_PATH = "LBL_LastImage_PATH"; //NON-NLS
private static final String[] SECTOR_SIZE_CHOICES = {"Auto Detect", "512", "1024", "2048", "4096"};
@ -53,6 +65,15 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
private JFileChooser fileChooser;
private final String contextName;
private final List<FileFilter> fileChooserFilters;
private static int VALIDATE_TIMEOUT_MILLIS = 1000;
static ScheduledThreadPoolExecutor delayedValidationService = new ScheduledThreadPoolExecutor(1, new ThreadFactoryBuilder().setNameFormat("ImageFilePanel delayed validation").build());
private final ReentrantLock validationWaitingLock = new ReentrantLock();
private final ReentrantLock validationLock = new ReentrantLock();
private Runnable validateAction = null;
private Future<?> validateFuture = null;
/**
* Creates new form ImageFilePanel
@ -76,6 +97,7 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
sectorSizeComboBox.setSelectedIndex(0);
errorLabel.setVisible(false);
loadingLabel.setVisible(false);
this.fileChooserFilters = fileChooserFilters;
}
@ -105,11 +127,17 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
*/
public static synchronized ImageFilePanel createInstance(String context, List<FileFilter> fileChooserFilters) {
ImageFilePanel instance = new ImageFilePanel(context, fileChooserFilters);
DocumentListener delayedValidationListener = instance.new DelayedValidationDocListener();
// post-constructor initialization of listener support without leaking references of uninitialized objects
instance.getPathTextField().getDocument().addDocumentListener(instance);
instance.getMd5TextFieldField().getDocument().addDocumentListener(instance);
instance.getSha1TextField().getDocument().addDocumentListener(instance);
instance.getSha256TextField().getDocument().addDocumentListener(instance);
for (JTextField textField: List.of(
instance.getPathTextField(),
instance.getMd5TextFieldField(),
instance.getSha1TextField(),
instance.getSha256TextField(),
instance.getPasswordTextField())) {
textField.getDocument().addDocumentListener(delayedValidationListener);
}
return instance;
}
@ -129,6 +157,10 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
return sha256HashTextField;
}
private JTextField getPasswordTextField() {
return passwordTextField;
}
private JFileChooser getChooser() {
if(fileChooser == null) {
fileChooser = fileChooserHelper.getChooser();
@ -151,6 +183,7 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
pathLabel = new javax.swing.JLabel();
browseButton = new javax.swing.JButton();
@ -169,11 +202,25 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
md5HashLabel = new javax.swing.JLabel();
hashValuesLabel = new javax.swing.JLabel();
hashValuesNoteLabel = new javax.swing.JLabel();
passwordLabel = new javax.swing.JLabel();
passwordTextField = new javax.swing.JTextField();
javax.swing.JPanel spacer = new javax.swing.JPanel();
loadingLabel = new javax.swing.JLabel();
setMinimumSize(new java.awt.Dimension(0, 65));
setPreferredSize(new java.awt.Dimension(403, 65));
setLayout(new java.awt.GridBagLayout());
org.openide.awt.Mnemonics.setLocalizedText(pathLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.pathLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
add(pathLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.browseButton.text")); // NOI18N
browseButton.addActionListener(new java.awt.event.ActionListener() {
@ -181,125 +228,227 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
browseButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 5);
add(browseButton, gridBagConstraints);
pathTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.pathTextField.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(pathTextField, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.timeZoneLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(timeZoneLabel, gridBagConstraints);
timeZoneComboBox.setMaximumRowCount(30);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 5);
add(timeZoneComboBox, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(noFatOrphansCheckbox, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.noFatOrphansCheckbox.text")); // NOI18N
noFatOrphansCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.noFatOrphansCheckbox.toolTipText")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(noFatOrphansCheckbox, gridBagConstraints);
errorLabel.setForeground(new java.awt.Color(255, 0, 0));
org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.errorLabel.text")); // NOI18N
errorLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
errorLabel.setMaximumSize(new java.awt.Dimension(500, 60));
errorLabel.setMinimumSize(new java.awt.Dimension(200, 20));
errorLabel.setPreferredSize(new java.awt.Dimension(200, 60));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 11;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
add(errorLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(sectorSizeLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sectorSizeLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(sectorSizeLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 5);
add(sectorSizeComboBox, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(sha256HashLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha256HashLabel.text")); // NOI18N
sha256HashLabel.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 9;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(sha256HashLabel, gridBagConstraints);
sha256HashTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha256HashTextField.text")); // NOI18N
sha256HashTextField.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 9;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 5);
add(sha256HashTextField, gridBagConstraints);
sha1HashTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha1HashTextField.text")); // NOI18N
sha1HashTextField.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 8;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 5);
add(sha1HashTextField, gridBagConstraints);
md5HashTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.md5HashTextField.text")); // NOI18N
md5HashTextField.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 7;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 5);
add(md5HashTextField, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(sha1HashLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha1HashLabel.text")); // NOI18N
sha1HashLabel.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 8;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(sha1HashLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(md5HashLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.md5HashLabel.text")); // NOI18N
md5HashLabel.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 7;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(md5HashLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(hashValuesLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.hashValuesLabel.text")); // NOI18N
hashValuesLabel.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
add(hashValuesLabel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(hashValuesNoteLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.hashValuesNoteLabel.text")); // NOI18N
hashValuesNoteLabel.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 10;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(hashValuesNoteLabel, gridBagConstraints);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(pathTextField)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(browseButton)
.addGap(2, 2, 2))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pathLabel)
.addComponent(noFatOrphansCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 262, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 368, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(errorLabel)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(timeZoneLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(sectorSizeLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(md5HashLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(md5HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(sha1HashLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(sha1HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(sha256HashLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(sha256HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(hashValuesNoteLabel)
.addComponent(hashValuesLabel))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
org.openide.awt.Mnemonics.setLocalizedText(passwordLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.passwordLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
add(passwordLabel, gridBagConstraints);
passwordTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.passwordTextField.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 5);
add(passwordTextField, gridBagConstraints);
javax.swing.GroupLayout spacerLayout = new javax.swing.GroupLayout(spacer);
spacer.setLayout(spacerLayout);
spacerLayout.setHorizontalGroup(
spacerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(pathLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(browseButton)
.addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(noFatOrphansCheckbox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(timeZoneLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(sectorSizeLabel))
.addGap(39, 39, 39)
.addComponent(hashValuesLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(md5HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(md5HashLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(sha1HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(sha1HashLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(sha256HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(sha256HashLabel))
.addGap(18, 18, 18)
.addComponent(hashValuesNoteLabel)
.addGap(18, 18, 18)
.addComponent(errorLabel)
.addContainerGap(51, Short.MAX_VALUE))
spacerLayout.setVerticalGroup(
spacerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 12;
gridBagConstraints.weighty = 1.0;
add(spacer, gridBagConstraints);
loadingLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/working_spinner.gif"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(loadingLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.loadingLabel.text")); // NOI18N
loadingLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
loadingLabel.setMaximumSize(new java.awt.Dimension(500, 60));
loadingLabel.setMinimumSize(new java.awt.Dimension(200, 20));
loadingLabel.setPreferredSize(new java.awt.Dimension(200, 60));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 11;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
add(loadingLabel, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
@NbBundle.Messages({"ImageFilePanel.000.confirmationMessage=The selected file"
@ -349,9 +498,12 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
private javax.swing.JLabel errorLabel;
private javax.swing.JLabel hashValuesLabel;
private javax.swing.JLabel hashValuesNoteLabel;
private javax.swing.JLabel loadingLabel;
private javax.swing.JLabel md5HashLabel;
private javax.swing.JTextField md5HashTextField;
private javax.swing.JCheckBox noFatOrphansCheckbox;
private javax.swing.JLabel passwordLabel;
private javax.swing.JTextField passwordTextField;
private javax.swing.JLabel pathLabel;
private javax.swing.JTextField pathTextField;
private javax.swing.JComboBox<String> sectorSizeComboBox;
@ -436,6 +588,10 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
String getSha256() {
return this.sha256HashTextField.getText();
}
String getPassword() {
return this.passwordTextField.getText();
}
public void reset() {
//reset the UI elements to default
@ -443,6 +599,24 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
this.md5HashTextField.setText(null);
this.sha1HashTextField.setText(null);
this.sha256HashTextField.setText(null);
this.passwordTextField.setText(null);
}
/**
* Sets UI enabled state.
*
* @param enabled True
*/
private void setUIEnabled(boolean enabled, boolean validNonE01) {
this.browseButton.setEnabled(enabled);
this.noFatOrphansCheckbox.setEnabled(enabled);
this.passwordTextField.setEnabled(enabled);
this.pathTextField.setEnabled(enabled);
this.sectorSizeComboBox.setEnabled(enabled);
this.md5HashTextField.setEnabled(enabled && validNonE01);
this.sha1HashTextField.setEnabled(enabled && validNonE01);
this.sha256HashTextField.setEnabled(enabled && validNonE01);
this.timeZoneComboBox.setEnabled(enabled);
}
/**
@ -454,49 +628,113 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
"ImageFilePanel.validatePanel.dataSourceOnCDriveError=Warning: Path to multi-user data source is on \"C:\" drive",
"ImageFilePanel.validatePanel.invalidMD5=Invalid MD5 hash",
"ImageFilePanel.validatePanel.invalidSHA1=Invalid SHA1 hash",
"ImageFilePanel.validatePanel.invalidSHA256=Invalid SHA256 hash",})
"ImageFilePanel.validatePanel.invalidSHA256=Invalid SHA256 hash",
"# {0} - imageOpenError",
"ImageFilePanel_validatePanel_imageOpenError=<html><body><p>An error occurred while opening the image:{0}</p></body></html>",
"ImageFilePanel_validatePanel_unknownErrorMsg=<unknown>",
"ImageFilePanel_validatePanel_unknownError=<html><body><p>An unknown error occurred while attempting to validate the image</p></body></html>"
})
public boolean validatePanel() {
errorLabel.setVisible(false);
return runWithLock(this.validationLock, () -> {
boolean validNonE01 = true;
try {
String path = getContentPaths();
if (!isImagePathValid()) {
return false;
}
// acquire field values at the beginning to minimize chance of changing while validating.
String path = getContentPaths();
if (!StringUtils.isBlank(getMd5()) && !HashUtility.isValidMd5Hash(getMd5())) {
validNonE01 = isValidNonE01(path);
setUIEnabled(false, validNonE01);
String md5 = getMd5();
String sha1 = getSha1();
String sha256 = getSha256();
String password = getPassword();
if (!isImagePathValid(path)) {
showError(null);
return false;
}
if (!StringUtils.isBlank(md5) && !HashUtility.isValidMd5Hash(md5)) {
showError(Bundle.ImageFilePanel_validatePanel_invalidMD5());
return false;
}
if (!StringUtils.isBlank(sha1) && !HashUtility.isValidSha1Hash(sha1)) {
showError(Bundle.ImageFilePanel_validatePanel_invalidSHA1());
return false;
}
if (!StringUtils.isBlank(sha256) && !HashUtility.isValidSha256Hash(sha256)) {
showError(Bundle.ImageFilePanel_validatePanel_invalidSHA256());
return false;
}
try {
TestOpenImageResult testResult = SleuthkitJNI.testOpenImage(path, password);
if (!testResult.wasSuccessful()) {
showError(Bundle.ImageFilePanel_validatePanel_imageOpenError(
StringUtils.defaultIfBlank(
testResult.getMessage(),
Bundle.ImageFilePanel_validatePanel_unknownErrorMsg())));
return false;
}
} catch (Throwable t) {
logger.log(Level.SEVERE, "An unknown error occurred test opening image: " + path, t);
showError(Bundle.ImageFilePanel_validatePanel_unknownError());
return false;
}
if (!PathValidator.isValidForCaseType(path, Case.getCurrentCase().getCaseType())) {
showError(Bundle.ImageFilePanel_validatePanel_dataSourceOnCDriveError());
} else {
showError(null);
}
return true;
} finally {
setUIEnabled(true, validNonE01);
}
});
}
/**
* Show an error message if error message is non-empty. Otherwise, hide
* error message. Either way, hide loading label.
*
* @param errorMessage The error message to show or null for no error.
*/
private void showError(String errorMessage) {
loadingLabel.setVisible(false);
if (StringUtils.isNotBlank(errorMessage)) {
errorLabel.setVisible(true);
errorLabel.setText(Bundle.ImageFilePanel_validatePanel_invalidMD5());
return false;
errorLabel.setText(errorMessage);
} else {
errorLabel.setVisible(false);
errorLabel.setText("");
}
}
if (!StringUtils.isBlank(getSha1()) && !HashUtility.isValidSha1Hash(getSha1())) {
errorLabel.setVisible(true);
errorLabel.setText(Bundle.ImageFilePanel_validatePanel_invalidSHA1());
/**
* Returns true if path is valid for processing.
*
* @param path The path.
* @return True if valid for processing.
*/
private boolean isImagePathValid(String path) {
if (StringUtils.isBlank(path) || (!(new File(path).isFile() || DriveUtils.isPhysicalDrive(path) || DriveUtils.isPartition(path)))) {
return false;
}
if (!StringUtils.isBlank(getSha256()) && !HashUtility.isValidSha256Hash(getSha256())) {
errorLabel.setVisible(true);
errorLabel.setText(Bundle.ImageFilePanel_validatePanel_invalidSHA256());
return false;
}
if (!PathValidator.isValidForCaseType(path, Case.getCurrentCase().getCaseType())) {
errorLabel.setVisible(true);
errorLabel.setText(Bundle.ImageFilePanel_validatePanel_dataSourceOnCDriveError());
}
return true;
}
private boolean isImagePathValid() {
String path = getContentPaths();
if (StringUtils.isBlank(path) || (!(new File(path).isFile() || DriveUtils.isPhysicalDrive(path) || DriveUtils.isPartition(path)))) {
return false;
}
return true;
/**
* Returns true if the path is a valid image that is not an E01.
* @param path The path.
* @return True if valid image and not E01.
*/
private boolean isValidNonE01(String path) {
return StringUtils.isNotBlank(path) && isImagePathValid(path) && !path.toLowerCase().endsWith(".e01");
}
public void storeSettings() {
@ -514,21 +752,6 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
}
}
@Override
public void insertUpdate(DocumentEvent e) {
updateHelper();
}
@Override
public void removeUpdate(DocumentEvent e) {
updateHelper();
}
@Override
public void changedUpdate(DocumentEvent e) {
updateHelper();
}
/**
* Update functions are called by the pathTextField which has this set as
* it's DocumentEventListener. Each update function fires a property change
@ -539,12 +762,13 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
"ImageFilePanel.moduleErr.msg=A module caused an error listening to ImageFilePanel updates."
+ " See log to determine which module. Some data could be incomplete.\n"})
private void updateHelper() {
if (isImagePathValid() && !getContentPaths().toLowerCase().endsWith(".e01")) {
String path = getContentPaths();
if (isValidNonE01(path)) {
setHashValuesComponentsEnabled(true);
} else {
setHashValuesComponentsEnabled(false);
}
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
}
@ -554,4 +778,119 @@ public class ImageFilePanel extends JPanel implements DocumentListener {
public void select() {
pathTextField.requestFocusInWindow();
}
/**
* Runs the supplier action with the reentrant lock or blocks until
* acquired.
*
* @param <T>
* @param lock The reentrant lock.
* @param action The action to run.
* @return The value of the supplier.
*/
private <T> T runWithLock(ReentrantLock lock, Supplier<T> action) {
try {
lock.lock();
return action.get();
} finally {
lock.unlock();
}
}
/**
* @return True if the panel is on a delay for validating (i.e. typing a
* password for bitlocker).
*/
public boolean isValidationLoading() {
return runWithLock(this.validationWaitingLock, () -> this.validateFuture != null
&& !this.validateFuture.isCancelled()
&& !this.validateFuture.isDone());
}
/**
* This class validates on a delay canceling any tasks previously scheduled
* so that password validation doesn't lock up the system.
*/
private class DelayedValidationDocListener implements DocumentListener {
@Override
public void insertUpdate(DocumentEvent e) {
delayValidate();
}
@Override
public void removeUpdate(DocumentEvent e) {
delayValidate();
}
@Override
public void changedUpdate(DocumentEvent e) {
delayValidate();
}
/**
* Run validation on a delay to avoid password checking too many times
* while typing.
*/
private void delayValidate() {
boolean triggerUpdate = runWithLock(validationWaitingLock, () -> {
boolean toRetTriggerUpdate = false;
if (isValidationLoading()) {
validateFuture.cancel(true);
toRetTriggerUpdate = true;
}
validateAction = new ValidationRunnable();
validateFuture = delayedValidationService.schedule(
validateAction,
VALIDATE_TIMEOUT_MILLIS,
TimeUnit.MILLISECONDS);
return toRetTriggerUpdate;
});
errorLabel.setVisible(false);
loadingLabel.setVisible(true);
// trigger invalidation after setting up new runnable if not already triggered
if (triggerUpdate) {
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
}
}
/**
* Runnable to run the updateHelper if the validation action remains
* this runnable.
*/
private class ValidationRunnable implements Runnable {
@Override
public void run() {
boolean isRunningAction = runWithLock(validationWaitingLock, () -> {
if (validateAction != this) {
return false;
}
// set the validation action to null to indicate that this is done running and can be validated.
validateAction = null;
validateFuture = null;
return true;
});
if (!isRunningAction) {
return;
} else if (Thread.interrupted()) {
return;
}
ImageFilePanel.this.updateHelper();
}
}
}
}

View File

@ -59,6 +59,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
private Host host;
private ImageWriterSettings imageWriterSettings;
private boolean ignoreFatOrphanFiles;
private String password;
/**
* Constructs a local drive data source processor that implements the
@ -135,9 +136,14 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
*/
@Override
public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
run(null, progressMonitor, callback);
run(null, null, progressMonitor, callback);
}
@Override
public void run(Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
run(null, host, progressMonitor, callback);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
@ -154,7 +160,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
* to return results.
*/
@Override
public void run(Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
public void run(String password, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
deviceId = UUID.randomUUID().toString();
drivePath = configPanel.getContentPath();
sectorSize = configPanel.getSectorSize();
@ -167,12 +173,13 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
}
this.host = host;
this.password = password;
Image image;
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{drivePath}, sectorSize,
timeZone, null, null, null, deviceId, this.host);
timeZone, null, null, null, deviceId, this.password, this.host);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding local disk with path " + drivePath + " to database", ex);
final List<String> errors = new ArrayList<>();
@ -182,7 +189,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
}
addDiskTask = new AddImageTask(
new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings),
new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings, this.password),
progressMonitor,
new StreamingAddDataSourceCallbacks(new DefaultIngestStream()),
new StreamingAddImageTaskCallback(new DefaultIngestStream(), callback));
@ -241,7 +248,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
try {
image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(),
new String[]{drivePath}, sectorSize,
timeZone, null, null, null, deviceId);
timeZone, null, null, null, deviceId, this.password, null);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Error adding local disk with path " + drivePath + " to database", ex);
final List<String> errors = new ArrayList<>();
@ -250,7 +257,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor {
return;
}
addDiskTask = new AddImageTask(new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings),
addDiskTask = new AddImageTask(new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings, this.password),
progressMonitor,
new StreamingAddDataSourceCallbacks(new DefaultIngestStream()),
new StreamingAddImageTaskCallback(new DefaultIngestStream(), callback));

View File

@ -0,0 +1,119 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2017-2020 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.centralrepository.eventlisteners;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.logging.Level;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.centralrepository.CentralRepoSettings;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoDbChoice;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoDbManager;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
import org.sleuthkit.autopsy.core.RuntimeProperties;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
/**
* Runs the default setup for central repository and notifies the user if a)
* running with GUI and b) first launch.
*/
public class CRDefaultSetupAction {
private static final Logger logger = Logger.getLogger(CRDefaultSetupAction.class.getName());
private static final CRDefaultSetupAction INSTANCE = new CRDefaultSetupAction();
public static CRDefaultSetupAction getInstance() {
return INSTANCE;
}
private CRDefaultSetupAction() {
}
/**
* Checks if the central repository has been set up and configured. If not,
* does the set up unconditionally.
*
* @return Returns true if first run and a default CR was setup.
*/
public boolean setupDefaultCentralRepository() {
Map<String, String> centralRepoSettings = ModuleSettings.getConfigSettings(CentralRepoSettings.getInstance().getModuleSettingsKey());
String initializedStr = centralRepoSettings.get("initialized");
// check to see if the repo has been initialized asking to setup cr
boolean initialized = Boolean.parseBoolean(initializedStr);
// if it hasn't received that flag, check for a previous install where cr is already setup
if (!initialized) {
boolean prevRepo = Boolean.parseBoolean(centralRepoSettings.get("db.useCentralRepo"));
// if it has been previously set up and is in use, mark as previously initialized and save the settings
if (prevRepo) {
initialized = true;
ModuleSettings.setConfigSetting(CentralRepoSettings.getInstance().getModuleSettingsKey(), "initialized", "true");
}
}
if (initialized) {
return false; // Nothing to do
}
try {
CentralRepoDbManager manager = new CentralRepoDbManager();
if (UserPreferences.getIsMultiUserModeEnabled()) {
// Set up using existing multi-user settings.
manager.setupPostgresDb(CentralRepoDbChoice.POSTGRESQL_MULTIUSER);
} else {
manager.setupDefaultSqliteDb();
}
} catch (CentralRepoException ex) {
logger.log(Level.SEVERE, "There was an error while initializing the central repository database", ex);
doMessageBoxIfRunningInGUI(ex);
}
ModuleSettings.setConfigSetting(CentralRepoSettings.getInstance().getModuleSettingsKey(), "initialized", "true");
return true;
}
/**
* Display a central repository exception in a message box if running with a
* GUI.
*
* @param ex The exception.
*/
@NbBundle.Messages({"Installer.centralRepoUpgradeFailed.title=Central repository disabled"})
private void doMessageBoxIfRunningInGUI(CentralRepoException ex) {
if (RuntimeProperties.runningWithGUI()) {
try {
SwingUtilities.invokeAndWait(() -> {
JOptionPane.showMessageDialog(null,
ex.getUserMessage(),
NbBundle.getMessage(this.getClass(), "Installer.centralRepoUpgradeFailed.title"),
JOptionPane.ERROR_MESSAGE);
});
} catch (InterruptedException | InvocationTargetException e) {
logger.log(Level.WARNING, e.getMessage(), e);
}
}
}
}

View File

@ -33,7 +33,7 @@ public class CentralRepositoryNotificationDialog {
* This dialog should display iff the mode is RELEASE and the
* application is running with a GUI.
*/
static boolean shouldDisplay() {
public static boolean shouldDisplay() {
return Version.getBuildType() == Version.Type.RELEASE
&& RuntimeProperties.runningWithGUI();
}
@ -50,7 +50,7 @@ public class CentralRepositoryNotificationDialog {
"CentralRepositoryNotificationDialog.bulletThree=Create personas that group accounts",
"CentralRepositoryNotificationDialog.finalRemarks=To limit what is stored, use the Central Repository options panel."
})
static void display() {
public static void display() {
assert shouldDisplay();
MessageNotifyUtil.Message.info(

View File

@ -20,21 +20,12 @@ package org.sleuthkit.autopsy.centralrepository.eventlisteners;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.Paths;
import java.util.Map;
import java.util.logging.Level;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import org.apache.commons.io.FileUtils;
import org.openide.modules.ModuleInstall;
import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoDbChoice;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoDbManager;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
import org.sleuthkit.autopsy.centralrepository.CentralRepoSettings;
import org.sleuthkit.autopsy.core.RuntimeProperties;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
@ -90,7 +81,6 @@ public class Installer extends ModuleInstall {
public void restored() {
// must happen first to move any legacy settings that exist.
upgradeSettingsPath();
setupDefaultCentralRepository();
}
@ -151,76 +141,6 @@ public class Installer extends ModuleInstall {
}
}
/**
* Checks if the central repository has been set up and configured. If not,
* does the set up unconditionally. If the application is running with a
* GUI, a notification will be displayed to the user if the mode is RELEASE
* (in other words, developers are exempt from seeing the notification).
*/
private void setupDefaultCentralRepository() {
Map<String, String> centralRepoSettings = ModuleSettings.getConfigSettings(CentralRepoSettings.getInstance().getModuleSettingsKey());
String initializedStr = centralRepoSettings.get("initialized");
// check to see if the repo has been initialized asking to setup cr
boolean initialized = Boolean.parseBoolean(initializedStr);
// if it hasn't received that flag, check for a previous install where cr is already setup
if (!initialized) {
boolean prevRepo = Boolean.parseBoolean(centralRepoSettings.get("db.useCentralRepo"));
// if it has been previously set up and is in use, mark as previously initialized and save the settings
if (prevRepo) {
initialized = true;
ModuleSettings.setConfigSetting(CentralRepoSettings.getInstance().getModuleSettingsKey(), "initialized", "true");
}
}
if(initialized) {
return; // Nothing to do
}
if (CentralRepositoryNotificationDialog.shouldDisplay()) {
CentralRepositoryNotificationDialog.display();
}
try {
CentralRepoDbManager manager = new CentralRepoDbManager();
if (UserPreferences.getIsMultiUserModeEnabled()) {
// Set up using existing multi-user settings.
manager.setupPostgresDb(CentralRepoDbChoice.POSTGRESQL_MULTIUSER);
} else {
manager.setupDefaultSqliteDb();
}
} catch (CentralRepoException ex) {
logger.log(Level.SEVERE, "There was an error while initializing the central repository database", ex);
doMessageBoxIfRunningInGUI(ex);
}
ModuleSettings.setConfigSetting(CentralRepoSettings.getInstance().getModuleSettingsKey(), "initialized", "true");
}
/**
* Display a central repository exception in a message box if running with a
* GUI.
*
* @param ex The exception.
*/
@NbBundle.Messages({"Installer.centralRepoUpgradeFailed.title=Central repository disabled"})
private void doMessageBoxIfRunningInGUI(CentralRepoException ex) {
if (RuntimeProperties.runningWithGUI()) {
try {
SwingUtilities.invokeAndWait(() -> {
JOptionPane.showMessageDialog(null,
ex.getUserMessage(),
NbBundle.getMessage(this.getClass(), "Installer.centralRepoUpgradeFailed.title"),
JOptionPane.ERROR_MESSAGE);
});
} catch (InterruptedException | InvocationTargetException e) {
logger.log(Level.WARNING, e.getMessage(), e);
}
}
}
@Override
public void uninstalled() {
/*

View File

@ -49,7 +49,9 @@ class CommandLineCommand {
DATA_SOURCE_PATH,
DATA_SOURCE_ID,
INGEST_PROFILE_NAME,
REPORT_PROFILE_NAME;
REPORT_PROFILE_NAME,
BITLOCKER_KEY,
;
}
private final CommandType type;

View File

@ -198,7 +198,8 @@ public class CommandLineIngestManager extends CommandLineManager {
}
String dataSourcePath = inputs.get(CommandLineCommand.InputType.DATA_SOURCE_PATH.name());
dataSource = new AutoIngestDataSource(UUID.randomUUID().toString(), Paths.get(dataSourcePath));
String password = inputs.get(CommandLineCommand.InputType.BITLOCKER_KEY.name());
dataSource = new AutoIngestDataSource(UUID.randomUUID().toString(), Paths.get(dataSourcePath), password);
runDataSourceProcessor(caseForJob, dataSource);
String outputDirPath = getOutputDirPath(caseForJob);
@ -406,7 +407,7 @@ public class CommandLineIngestManager extends CommandLineManager {
// Get an ordered list of data source processors to try
List<AutoIngestDataSourceProcessor> validDataSourceProcessors;
try {
validDataSourceProcessors = DataSourceProcessorUtility.getOrderedListOfDataSourceProcessors(dataSource.getPath());
validDataSourceProcessors = DataSourceProcessorUtility.getOrderedListOfDataSourceProcessors(dataSource.getPath(), dataSource.getPassword());
} catch (AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException ex) {
LOGGER.log(Level.SEVERE, "Exception while determining best data source processor for {0}", dataSource.getPath());
// rethrow the exception.
@ -429,7 +430,7 @@ public class CommandLineIngestManager extends CommandLineManager {
DataSourceProcessorCallback callBack = new AddDataSourceCallback(caseForJob, dataSource, taskId, ingestLock);
caseForJob.notifyAddingDataSource(taskId);
LOGGER.log(Level.INFO, "Identified data source type for {0} as {1}", new Object[]{dataSource.getPath(), selectedProcessor.getDataSourceType()});
selectedProcessor.process(dataSource.getDeviceId(), dataSource.getPath(), progressMonitor, callBack);
selectedProcessor.process(dataSource.getDeviceId(), dataSource.getPath(), dataSource.getPassword(), null, progressMonitor, callBack);
ingestLock.wait();
// at this point we got the content object(s) from the current DSP.

View File

@ -30,6 +30,7 @@ import java.util.Set;
import java.util.logging.Level;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.ArrayUtils;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.netbeans.api.sendopts.CommandException;
import org.netbeans.spi.sendopts.Env;
@ -52,6 +53,7 @@ public class CommandLineOptionProcessor extends OptionProcessor {
private final Option dataSourcePathOption = Option.requiredArgument('s', "dataSourcePath");
private final Option dataSourceObjectIdOption = Option.requiredArgument('i', "dataSourceObjectId");
private final Option addDataSourceCommandOption = Option.withoutArgument('a', "addDataSource");
private final Option bitlockerKeyCommandOption = Option.requiredArgument('k', "key");
private final Option runIngestCommandOption = Option.optionalArgument('r', "runIngest");
private final Option listAllDataSourcesCommandOption = Option.withoutArgument('l', "listAllDataSources");
private final Option generateReportsOption = Option.optionalArgument('g', "generateReports");
@ -81,20 +83,21 @@ public class CommandLineOptionProcessor extends OptionProcessor {
@Override
protected Set<Option> getOptions() {
Set<Option> set = new HashSet<>();
set.add(createCaseCommandOption);
set.add(caseNameOption);
set.add(caseTypeOption);
set.add(caseBaseDirOption);
set.add(dataSourcePathOption);
set.add(addDataSourceCommandOption);
set.add(dataSourceObjectIdOption);
set.add(runIngestCommandOption);
set.add(listAllDataSourcesCommandOption);
set.add(generateReportsOption);
set.add(listAllIngestProfileOption);
set.add(defaultArgument);
return set;
return Set.of(
createCaseCommandOption,
caseNameOption,
caseTypeOption,
caseBaseDirOption,
dataSourcePathOption,
addDataSourceCommandOption,
bitlockerKeyCommandOption,
dataSourceObjectIdOption,
runIngestCommandOption,
listAllDataSourcesCommandOption,
generateReportsOption,
listAllIngestProfileOption,
defaultArgument
);
}
@Override
@ -203,6 +206,9 @@ public class CommandLineOptionProcessor extends OptionProcessor {
}
}
String[] keysArgs = values.get(bitlockerKeyCommandOption);
String bitlockerKey = ArrayUtils.isNotEmpty(keysArgs) ? keysArgs[0] : null;
String dataSourceId = "";
if (values.containsKey(dataSourceObjectIdOption)) {
@ -247,6 +253,11 @@ public class CommandLineOptionProcessor extends OptionProcessor {
newCommand.addInputValue(CommandLineCommand.InputType.CASE_NAME.name(), inputCaseName);
newCommand.addInputValue(CommandLineCommand.InputType.CASES_BASE_DIR_PATH.name(), caseBaseDir);
newCommand.addInputValue(CommandLineCommand.InputType.DATA_SOURCE_PATH.name(), dataSourcePath);
if (bitlockerKey != null) {
newCommand.addInputValue(CommandLineCommand.InputType.BITLOCKER_KEY.name(), bitlockerKey);
}
commands.add(newCommand);
runFromCommandLine(true);
}

View File

@ -246,6 +246,7 @@ public class Installer extends ModuleInstall {
packageInstallers.add(org.sleuthkit.autopsy.casemodule.Installer.getDefault());
packageInstallers.add(org.sleuthkit.autopsy.modules.hashdatabase.infrastructure.Installer.getDefault());
packageInstallers.add(org.sleuthkit.autopsy.report.infrastructure.Installer.getDefault());
packageInstallers.add(com.basistech.df.cybertriage.autopsy.ctoptions.ctcloud.Installer.getDefault());
/**
* This is a temporary workaround for the following bug in Tika that

View File

@ -129,6 +129,27 @@ public interface DataSourceProcessor {
run(progressMonitor, callback);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
* configuration panel. Returns as soon as the background task is started.
* The background task uses a callback object to signal task completion and
* return results.
*
* This method should not be called unless isPanelValid returns true.
*
* @param password The password
* @param host Host for the data source.
* @param progressMonitor Progress monitor that will be used by the
* background task to report progress.
* @param callback Callback that will be used by the background task
* to return results.
*/
default void run(String password, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
run(host, progressMonitor, callback);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
@ -175,6 +196,31 @@ public interface DataSourceProcessor {
DataSourceProcessorCallback callBack) {
runWithIngestStream(settings, progress, callBack);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread and the settings provided by the selection and
* configuration panel. Files found during ingest will be sent directly to
* the IngestStream provided. Returns as soon as the background task is
* started. The background task uses a callback object to signal task
* completion and return results.
*
* This method should not be called unless isPanelValid returns true, and
* should only be called for DSPs that support ingest streams. The ingest
* settings must be complete before calling this method.
*
* @param password The password to decrypt the data source.
* @param host Host for this data source.
* @param settings The ingest job settings.
* @param progress Progress monitor that will be used by the background task
* to report progress.
* @param callBack Callback that will be used by the background task to
* return results.
*/
default void runWithIngestStream(String password, Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progress,
DataSourceProcessorCallback callBack) {
runWithIngestStream(host, settings, progress, callBack);
}
/**
* Check if this DSP supports ingest streams.

View File

@ -44,6 +44,8 @@ import org.openide.util.Lookup;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.casemodule.StartupWindowProvider;
import org.sleuthkit.autopsy.commandlineingest.CommandLineIngestManager;
import org.sleuthkit.autopsy.centralrepository.eventlisteners.CRDefaultSetupAction;
import org.sleuthkit.autopsy.centralrepository.eventlisteners.CentralRepositoryNotificationDialog;
import org.sleuthkit.autopsy.commandlineingest.CommandLineOptionProcessor;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
@ -93,6 +95,12 @@ public class Installer extends ModuleInstall {
final CommandLineOptionProcessor finalprocessor = processor;
/**
* Runs central repo default setup. Triggered here to track if this is
* first time setup in order to show CR notification dialog prior to any
* startup window.
*/
final boolean crFirstTimeSetup = CRDefaultSetupAction.getInstance().setupDefaultCentralRepository();
// When the --nogui flag is supplied invokeWhenUIReady happens a lot sooner
// than it would when running wiht the gui. Makes sense. That means that
@ -120,13 +128,13 @@ public class Installer extends ModuleInstall {
} else {
WindowManager.getDefault().invokeWhenUIReady(() -> {
if(WindowManager.getDefault().getMainWindow().isVisible() || finalprocessor == null || finalprocessor.getState() == CommandLineOptionProcessor.ProcessState.COMPLETED) {
StartupWindowProvider.getInstance().open();
showStartupWindows(crFirstTimeSetup);
} else {
finalprocessor.addPropertyChangeListener(new PropertyChangeListener(){
@Override
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getPropertyName().equals(CommandLineOptionProcessor.PROCESSING_COMPLETED)) {
StartupWindowProvider.getInstance().open();
showStartupWindows(crFirstTimeSetup);
}
}
});
@ -134,6 +142,18 @@ public class Installer extends ModuleInstall {
});
}
}
/**
* Show startup window(s) in sequence.
* @param crFirstTimeSetup If true, attempts to show the central repo notification dialog
*/
private void showStartupWindows(boolean crFirstTimeSetup) {
if (crFirstTimeSetup && CentralRepositoryNotificationDialog.shouldDisplay()) {
CentralRepositoryNotificationDialog.display();
}
StartupWindowProvider.getInstance().open();
}
@Override
public void uninstalled() {

View File

@ -21,12 +21,16 @@ package org.sleuthkit.autopsy.coreutils;
import org.sleuthkit.datamodel.SleuthkitJNI;
import java.io.IOException;
import java.nio.file.Path;
import java.text.MessageFormat;
import java.util.logging.Level;
import org.apache.commons.lang3.StringUtils;
/**
* Utility methods for working with data sources.
*/
public class DataSourceUtils {
private static final Logger logger = Logger.getLogger(DataSourceUtils.class.getName());
/**
* Calls TSK to determine whether a
* potential data source has a file system.
@ -41,4 +45,38 @@ public class DataSourceUtils {
public static boolean imageHasFileSystem(Path dataSourcePath) throws IOException {
return SleuthkitJNI.isImageSupported(dataSourcePath.toString());
}
/**
* Calls TSK to determine whether a
* potential data source has a file system.
*
* @param dataSourcePath The path to the data source.
* @param password The password to decrypt the image.
*
* @return True or false.
*
* @throws IOException if an error occurs while trying to determine if the
* data source has a file system.
*/
public static boolean imageHasFileSystem(Path dataSourcePath, String password) throws IOException {
try {
SleuthkitJNI.TestOpenImageResult openImageResult = SleuthkitJNI.testOpenImage(dataSourcePath.toString(), password);
if (openImageResult.wasSuccessful()) {
return true;
} else {
String message = MessageFormat.format("An error occurred while opening {0}: {1}",
dataSourcePath.toString(),
openImageResult == null || StringUtils.isBlank(openImageResult.getMessage())
? "<unknown>"
: openImageResult.getMessage());
logger.log(Level.INFO, message);
return false;
}
} catch (Throwable ex) {
String message = "An error occurred while opening " + dataSourcePath.toString();
logger.log(Level.WARNING, message);
return false;
}
}
}

View File

@ -73,14 +73,7 @@ public class XMLUtil {
}
private static SchemaFactory getSchemaFactory(String schemaLanguage) {
// See JIRA-6958 for details about class loading and jaxb.
ClassLoader original = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(XMLUtil.class.getClassLoader());
return SchemaFactory.newInstance(schemaLanguage);
} finally {
Thread.currentThread().setContextClassLoader(original);
}
return SchemaFactory.newInstance(schemaLanguage);
}
private static TransformerFactory getTransformerFactory() {

View File

@ -30,13 +30,20 @@ public class AutoIngestDataSource {
private final String deviceId;
private final Path path;
private final String password;
private DataSourceProcessorResult resultCode;
private List<String> errorMessages;
private List<Content> content;
public AutoIngestDataSource(String deviceId, Path path) {
public AutoIngestDataSource(String deviceId, Path path, String password) {
this.deviceId = deviceId;
this.path = path;
this.password = password;
}
public AutoIngestDataSource(String deviceId, Path path) {
this(deviceId, path, null);
}
public String getDeviceId() {
@ -47,6 +54,13 @@ public class AutoIngestDataSource {
return this.path;
}
/**
* @return The password to decrypt the data source.
*/
public String getPassword() {
return password;
}
public synchronized void setDataSourceProcessorOutput(DataSourceProcessorResult result, List<String> errorMessages, List<Content> content) {
this.resultCode = result;
this.errorMessages = new ArrayList<>(errorMessages);

View File

@ -50,6 +50,25 @@ public interface AutoIngestDataSourceProcessor extends DataSourceProcessor {
*/
int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException;
/**
* Indicates whether the DataSourceProcessor is capable of processing the
* data source. Returns a confidence value. Method can throw an exception
* for a system level problem. The exception should not be thrown for an issue
* related to bad input data.
*
* @param dataSourcePath Path to the data source.
* @param password The password to decrypt the data source.
* @return Confidence value. Values between 0 and 100 are recommended. Zero
* or less means the data source is not supported by the
* DataSourceProcessor. Value of 100 indicates high certainty in
* being able to process the data source.
* @throws org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException
*/
default int canProcess(Path dataSourcePath, String password) throws AutoIngestDataSourceProcessorException {
return canProcess(dataSourcePath);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread by calling DataSourceProcessor.run() method. Returns as
@ -91,6 +110,30 @@ public interface AutoIngestDataSourceProcessor extends DataSourceProcessor {
process(deviceId, dataSourcePath, progressMonitor, callBack);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread by calling DataSourceProcessor.run() method. Returns as
* soon as the background task is started. The background task uses a
* callback object to signal task completion and return results. Method can
* throw an exception for a system level problem. The exception should not
* be thrown for an issue related to bad input data.
*
* @param deviceId An ASCII-printable identifier for the device
* associated with the data source that is intended
* to be unique across multiple cases (e.g., a UUID).
* @param dataSourcePath Path to the data source.
* @param password The password to decrypt the datasource.
* @param host Host for this data source.
* @param progressMonitor Progress monitor that will be used by the
* background task to report progress.
* @param callBack Callback that will be used by the background task
* to return results.
*/
default void process(String deviceId, Path dataSourcePath, String password, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
process(deviceId, dataSourcePath, progressMonitor, callBack);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread by calling DataSourceProcessor.run() method. Returns as
@ -138,8 +181,35 @@ public interface AutoIngestDataSourceProcessor extends DataSourceProcessor {
*/
default IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
return processWithIngestStream(deviceId, dataSourcePath, settings, progressMonitor, callBack);
}
/**
* Adds a data source to the case database using a background task in a
* separate thread by calling DataSourceProcessor.run() method. Returns as
* soon as the background task is started. The background task uses a
* callback object to signal task completion and return results. Method can
* throw an exception for a system level problem. The exception should not
* be thrown for an issue related to bad input data.
*
* @param deviceId An ASCII-printable identifier for the device
* associated with the data source that is intended
* to be unique across multiple cases (e.g., a UUID).
* @param dataSourcePath Path to the data source.
* @param password The password to decrypt the datasource.
* @param host The host for this data source.
* @param settings The ingest job settings.
* @param progressMonitor Progress monitor that will be used by the
* background task to report progress.
* @param callBack Callback that will be used by the background task
* to return results.
*
* @return The new ingest stream or null if an error occurred. Errors will be handled by the callback.
*/
default IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, String password, Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
return processWithIngestStream(deviceId, dataSourcePath, settings, progressMonitor, callBack);
}
/**
* A custom exception for the use of AutomatedIngestDataSourceProcessor.
*/

View File

@ -49,9 +49,27 @@ public class DataSourceProcessorUtility {
* org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException
*/
public static Map<AutoIngestDataSourceProcessor, Integer> getDataSourceProcessorForFile(Path dataSourcePath, Collection<? extends AutoIngestDataSourceProcessor> processorCandidates) throws AutoIngestDataSourceProcessorException {
return getDataSourceProcessorForFile(dataSourcePath, null, processorCandidates);
}
/**
* A utility method to find all Data Source Processors (DSP) that are able
* to process the input data source. Only the DSPs that implement
* AutoIngestDataSourceProcessor interface are used.
*
* @param dataSourcePath Full path to the data source
* @param password The password to decrypt the data source.
* @param processorCandidates Possible DSPs that can handle the data source
*
* @return Hash map of all DSPs that can process the data source along with
* their confidence score
* @throws
* org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException
*/
public static Map<AutoIngestDataSourceProcessor, Integer> getDataSourceProcessorForFile(Path dataSourcePath, String password, Collection<? extends AutoIngestDataSourceProcessor> processorCandidates) throws AutoIngestDataSourceProcessorException {
Map<AutoIngestDataSourceProcessor, Integer> validDataSourceProcessorsMap = new HashMap<>();
for (AutoIngestDataSourceProcessor processor : processorCandidates) {
int confidence = processor.canProcess(dataSourcePath);
int confidence = processor.canProcess(dataSourcePath, password);
if (confidence > 0) {
validDataSourceProcessorsMap.put(processor, confidence);
}
@ -76,9 +94,29 @@ public class DataSourceProcessorUtility {
* org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException
*/
public static List<AutoIngestDataSourceProcessor> getOrderedListOfDataSourceProcessors(Path dataSourcePath) throws AutoIngestDataSourceProcessorException {
return getOrderedListOfDataSourceProcessors(dataSourcePath, (String) null);
}
/**
* A utility method to find all Data Source Processors (DSP) that are able
* to process the input data source. Only the DSPs that implement
* AutoIngestDataSourceProcessor interface are used. Returns ordered list of
* data source processors. DSPs are ordered in descending order from highest
* confidence to lowest.
*
* @param dataSourcePath Full path to the data source
* @param password The password to decrypt the data source.
*
* @return Ordered list of data source processors. DSPs are ordered in
* descending order from highest confidence to lowest.
*
* @throws
* org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException
*/
public static List<AutoIngestDataSourceProcessor> getOrderedListOfDataSourceProcessors(Path dataSourcePath, String password) throws AutoIngestDataSourceProcessorException {
// lookup all AutomatedIngestDataSourceProcessors
Collection<? extends AutoIngestDataSourceProcessor> processorCandidates = Lookup.getDefault().lookupAll(AutoIngestDataSourceProcessor.class);
return getOrderedListOfDataSourceProcessors(dataSourcePath, processorCandidates);
return getOrderedListOfDataSourceProcessors(dataSourcePath, password, processorCandidates);
}
/**
@ -98,7 +136,28 @@ public class DataSourceProcessorUtility {
* org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException
*/
public static List<AutoIngestDataSourceProcessor> getOrderedListOfDataSourceProcessors(Path dataSourcePath, Collection<? extends AutoIngestDataSourceProcessor> processorCandidates) throws AutoIngestDataSourceProcessorException {
Map<AutoIngestDataSourceProcessor, Integer> validDataSourceProcessorsMap = getDataSourceProcessorForFile(dataSourcePath, processorCandidates);
return getOrderedListOfDataSourceProcessors(dataSourcePath, null, processorCandidates);
}
/**
* A utility method to find all Data Source Processors (DSP) that are able
* to process the input data source. Only the DSPs that implement
* AutoIngestDataSourceProcessor interface are used. Returns ordered list of
* data source processors. DSPs are ordered in descending order from highest
* confidence to lowest.
*
* @param dataSourcePath Full path to the data source
* @param password The password to decrypt the data source.
* @param processorCandidates Collection of AutoIngestDataSourceProcessor objects to use
*
* @return Ordered list of data source processors. DSPs are ordered in
* descending order from highest confidence to lowest.
*
* @throws
* org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException
*/
public static List<AutoIngestDataSourceProcessor> getOrderedListOfDataSourceProcessors(Path dataSourcePath, String password, Collection<? extends AutoIngestDataSourceProcessor> processorCandidates) throws AutoIngestDataSourceProcessorException {
Map<AutoIngestDataSourceProcessor, Integer> validDataSourceProcessorsMap = getDataSourceProcessorForFile(dataSourcePath, password, processorCandidates);
return orderDataSourceProcessorsByConfidence(validDataSourceProcessorsMap);
}

View File

@ -24,7 +24,7 @@ import java.util.Set;
import java.util.logging.Level;
import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe;
import javax.jms.JMSException;
import jakarta.jms.JMSException;
import org.sleuthkit.autopsy.core.UserPreferencesException;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.coreutils.Logger;

View File

@ -21,8 +21,8 @@ package org.sleuthkit.autopsy.events;
import java.net.URI;
import java.net.URISyntaxException;
import javax.annotation.concurrent.Immutable;
import javax.jms.Connection;
import javax.jms.JMSException;
import jakarta.jms.Connection;
import jakarta.jms.JMSException;
import org.apache.activemq.ActiveMQConnectionFactory;
import java.io.IOException;
import java.net.InetAddress;

View File

@ -22,16 +22,16 @@ import java.net.URISyntaxException;
import java.util.logging.Level;
import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.Topic;
import jakarta.jms.Connection;
import jakarta.jms.DeliveryMode;
import jakarta.jms.JMSException;
import jakarta.jms.Message;
import jakarta.jms.MessageConsumer;
import jakarta.jms.MessageListener;
import jakarta.jms.MessageProducer;
import jakarta.jms.ObjectMessage;
import jakarta.jms.Session;
import jakarta.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.sleuthkit.autopsy.coreutils.Logger;

View File

@ -50,6 +50,7 @@ import org.apache.tika.exception.TikaException;
import org.apache.tika.extractor.EmbeddedDocumentExtractor;
import org.apache.tika.extractor.ParsingEmbeddedDocumentExtractor;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.mime.MediaType;
import org.apache.tika.mime.MimeTypeException;
import org.apache.tika.parser.AutoDetectParser;
@ -728,7 +729,7 @@ class DocumentEmbeddedContentExtractor {
}
// try to get the name of the embedded file from the metadata
String name = metadata.get(Metadata.RESOURCE_NAME_KEY);
String name = metadata.get(TikaCoreProperties.RESOURCE_NAME_KEY);
// TODO: This can be removed after we upgrade to Tika 1.16 or
// above. The 1.16 version of Tika keeps track of files that

View File

@ -30,6 +30,7 @@ import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.tika.exception.TikaException;
import org.apache.tika.extractor.EmbeddedDocumentExtractor;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
@ -125,7 +126,7 @@ final class PDFAttachmentExtractor {
//Resource naming scheme is used internally in autopsy, therefore we can guarentee uniqueness.
String uniqueExtractedName = "extract_" + attachmentCount++; //NON-NLS
String name = mtdt.get(Metadata.RESOURCE_NAME_KEY);
String name = mtdt.get(TikaCoreProperties.RESOURCE_NAME_KEY);
String ext = FilenameUtils.getExtension(name);
//Append the extension if we can.

View File

@ -32,6 +32,7 @@ import java.util.Arrays;
import java.util.logging.Level;
import org.apache.tika.exception.EncryptedDocumentException;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
@ -287,7 +288,7 @@ final class EncryptionDetectionFileIngestModule extends FileIngestModuleAdapter
bin = new BufferedInputStream(in);
ContentHandler handler = new BodyContentHandler(-1);
Metadata metadata = new Metadata();
metadata.add(Metadata.RESOURCE_NAME_KEY, file.getName());
metadata.add(TikaCoreProperties.RESOURCE_NAME_KEY, file.getName());
AutoDetectParser parser = new AutoDetectParser();
parser.parse(bin, handler, metadata, new ParseContext());
} catch (EncryptedDocumentException ex) {

View File

@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.modules.filetypeid;
import jakarta.xml.bind.DatatypeConverter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@ -26,7 +27,6 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.DatatypeConverter;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

View File

@ -49,7 +49,6 @@ import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.ParsingReader;
import org.apache.tika.parser.microsoft.OfficeParserConfig;
import org.apache.tika.parser.ocr.TesseractOCRConfig;
import org.apache.tika.parser.pdf.PDFParserConfig;
import org.openide.util.NbBundle;
import org.openide.modules.InstalledFileLocator;
@ -75,7 +74,9 @@ import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Set;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.mime.MimeTypes;
import org.apache.tika.parser.ocr.TesseractOCRConfig;
import org.apache.tika.parser.pdf.PDFParserConfig.OCR_STRATEGY;
import org.sleuthkit.autopsy.coreutils.ExecUtil.HybridTerminator;
import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector;
@ -284,9 +285,10 @@ final class TikaTextExtractor implements TextExtractor {
// during extraction
TesseractOCRConfig ocrConfig = new TesseractOCRConfig();
String tesseractFolder = TESSERACT_PATH.getParent();
ocrConfig.setTesseractPath(tesseractFolder);
// coming from https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=109454096#TikaOCR-OverridingDefaultConfiguration
ocrConfig.getOtherTesseractConfig().put("tessdataPath", PlatformUtil.getOcrLanguagePacksPath());
ocrConfig.getOtherTesseractConfig().put("tesseractPath", tesseractFolder);
ocrConfig.setLanguage(languagePacks);
ocrConfig.setTessdataPath(PlatformUtil.getOcrLanguagePacksPath());
parseContext.set(TesseractOCRConfig.class, ocrConfig);
// Configure how Tika handles OCRing PDFs

View File

@ -21,13 +21,14 @@ package org.sleuthkit.autopsy.texttranslation.translators;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;
import javax.swing.JPanel;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.openide.util.NbBundle.Messages;
import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.coreutils.ThreadConfined;

View File

@ -22,11 +22,6 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonObject;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;
import java.util.logging.Level;
import org.sleuthkit.autopsy.coreutils.Logger;
@ -36,6 +31,11 @@ import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import org.sleuthkit.autopsy.coreutils.Desktop;
import java.net.URISyntaxException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.apache.commons.lang3.StringUtils;
import org.openide.util.NbBundle.Messages;

View File

@ -40,7 +40,13 @@
<!-- Make a report that lists out the dependencies that our JARs have -->
<ivy:report todir='${basedir}/build/ivy-reports' graph='true' xml='false'/>
<ivy:retrieve pattern="${basedir}/release/modules/ext/[artifact]-[revision](-[classifier]).[ext]" />
<ivy:retrieve pattern="${basedir}/release/modules/ext/[artifact]-[revision](-[classifier]).[ext]">
<!-- this is to prevent an issue with '+' in the version identifier which messes with the properties file -->
<firstmatchmapper>
<regexpmapper from="^(.*)\+(.*)$" to="\1\2"/>
<identitymapper/>
</firstmatchmapper>
</ivy:retrieve>
</target>
<target name="init" depends="get-deps,harness.init"/>

View File

@ -1,7 +1,3 @@
<!DOCTYPE ivy-module [
<!ENTITY javafx.version "17.0.7">
<!ENTITY jackson.version "2.15.2">
]>
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="org.sleuthkit.autopsy" module="corelibs"/>
<configurations >
@ -10,43 +6,43 @@
</configurations>
<dependencies>
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-fxml" rev="&javafx.version;">
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-fxml" rev="${javafx.version}">
<artifact name="javafx-fxml" type="jar" />
<artifact name="javafx-fxml" type="jar" e:classifier="win"/>
<artifact name="javafx-fxml" type="jar" e:classifier="mac"/>
<artifact name="javafx-fxml" type="jar" e:classifier="linux"/>
</dependency>
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-graphics" rev="&javafx.version;">
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-graphics" rev="${javafx.version}">
<artifact name="javafx-graphics" type="jar" />
<artifact name="javafx-graphics" type="jar" e:classifier="win"/>
<artifact name="javafx-graphics" type="jar" e:classifier="mac"/>
<artifact name="javafx-graphics" type="jar" e:classifier="linux"/>
</dependency>
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-controls" rev="&javafx.version;">
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-controls" rev="${javafx.version}">
<artifact name="javafx-controls" type="jar" />
<artifact name="javafx-controls" type="jar" e:classifier="win"/>
<artifact name="javafx-controls" type="jar" e:classifier="mac"/>
<artifact name="javafx-controls" type="jar" e:classifier="linux"/>
</dependency>
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-base" rev="&javafx.version;">
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-base" rev="${javafx.version}">
<artifact name="javafx-base" type="jar" />
<artifact name="javafx-base" type="jar" e:classifier="win"/>
<artifact name="javafx-base" type="jar" e:classifier="mac"/>
<artifact name="javafx-base" type="jar" e:classifier="linux"/>
</dependency>
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-swing" rev="&javafx.version;" >
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-swing" rev="${javafx.version}" >
<artifact name="javafx-swing" type="jar" />
<artifact name="javafx-swing" type="jar" e:classifier="win"/>
<artifact name="javafx-swing" type="jar" e:classifier="mac"/>
<artifact name="javafx-swing" type="jar" e:classifier="linux"/>
</dependency>
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-web" rev="&javafx.version;" >
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-web" rev="${javafx.version}" >
<artifact name="javafx-web" type="jar" />
<artifact name="javafx-web" type="jar" e:classifier="win"/>
<artifact name="javafx-web" type="jar" e:classifier="mac"/>
<artifact name="javafx-web" type="jar" e:classifier="linux"/>
</dependency>
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-media" rev="&javafx.version;">
<dependency conf="autopsy_core->default" org="org.openjfx" name="javafx-media" rev="${javafx.version}">
<artifact name="javafx-media" type="jar" />
<artifact name="javafx-media" type="jar" e:classifier="win"/>
<artifact name="javafx-media" type="jar" e:classifier="mac"/>
@ -54,8 +50,8 @@
</dependency>
<dependency conf="autopsy_core->default" org="org.apache.ant" name="ant-launcher" rev="1.10.12"/>
<dependency conf="autopsy_core->default" org="org.apache.ant" name="ant" rev="1.10.12"/>
<dependency conf="autopsy_core->default" org="org.apache.ant" name="ant-launcher" rev="1.10.15"/>
<dependency conf="autopsy_core->default" org="org.apache.ant" name="ant" rev="1.10.15"/>
<!-- apple for swing -->
<dependency conf="autopsy_core->default" org="com.apple" name="AppleJavaExtensions" rev="1.4"/>
@ -67,29 +63,29 @@
<!-- for file search -->
<dependency conf="autopsy_core->default" org="com.github.lgooddatepicker" name="LGoodDatePicker" rev="11.2.1"/>
<dependency conf="autopsy_core->default" org="commons-codec" name="commons-codec" rev="1.15"/>
<dependency conf="autopsy_core->default" org="commons-codec" name="commons-codec" rev="1.17.1"/>
<!-- Google dependencies (translate needs to be kept with guava because translate depends on guava)-->
<dependency conf="autopsy_core->default" org="com.google.cloud" name="google-cloud-translate" rev="2.1.11"/>
<dependency conf="autopsy_core->default" org="com.google.cloud" name="google-cloud-translate" rev="2.54.0"/>
<!-- commmon -->
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-csv" rev="1.9.0"/>
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-text" rev="1.10.0"/>
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-lang3" rev="3.17.0"/>
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-csv" rev="1.12.0"/>
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-text" rev="1.13.0"/>
<!-- keep old commons-lang because some deps may need it at runtime.
Note there is no namespace collision with ver 3 -->
<dependency conf="autopsy_core->default" org="commons-lang" name="commons-lang" rev="2.6"/>
<dependency conf="autopsy_core->default" org="commons-logging" name="commons-logging" rev="1.2"/>
<dependency conf="autopsy_core->default" org="commons-io" name="commons-io" rev="2.11.0"/>
<dependency conf="autopsy_core->default" org="commons-validator" name="commons-validator" rev="1.7"/>
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-collections4" rev="4.4"/>
<dependency conf="autopsy_core->default" org="commons-logging" name="commons-logging" rev="1.3.4"/>
<dependency conf="autopsy_core->default" org="commons-io" name="commons-io" rev="2.18.0"/>
<dependency conf="autopsy_core->default" org="commons-validator" name="commons-validator" rev="1.9.0"/>
<dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-collections4" rev="4.5.0-M2"/>
<dependency conf="autopsy_core->default" org="commons-collections" name="commons-collections" rev="3.2.2"/>
<dependency conf="autopsy_core->default" org="net.htmlparser.jericho" name="jericho-html" rev="3.4"/>
<dependency conf="autopsy_core->default" org="com.fasterxml.jackson.dataformat" name="jackson-dataformat-csv" rev="&jackson.version;"/>
<dependency conf="autopsy_core->default" org="com.fasterxml.jackson.datatype" name="jackson-datatype-jsr310" rev="&jackson.version;"/>
<dependency conf="autopsy_core->default" org="com.fasterxml.jackson.dataformat" name="jackson-dataformat-csv" rev="${jackson.version}"/>
<dependency conf="autopsy_core->default" org="com.fasterxml.jackson.datatype" name="jackson-datatype-jsr310" rev="${jackson.version}"/>
<!-- better image resizing -->
<dependency conf="autopsy_core->default" org="org.imgscalr" name="imgscalr-lib" rev="4.2" />
@ -101,54 +97,47 @@
https://github.com/controlsfx/controlsfx/issues/1241
-->
<dependency conf="autopsy_core->*" org="org.controlsfx" name="controlsfx" rev="11.1.2" />
<dependency conf="autopsy_core->*" org="org.controlsfx" name="controlsfx" rev="11.2.1" />
<dependency conf="autopsy_core->default" org="joda-time" name="joda-time" rev="2.10.14" />
<dependency conf="autopsy_core->default" org="joda-time" name="joda-time" rev="2.13.0" />
<!-- timeline -->
<dependency conf="autopsy_core->default" org="org.jfxtras" name="jfxtras-fxml" rev="17-r1" />
<dependency conf="autopsy_core->default" org="org.jfxtras" name="jfxtras-controls" rev="17-r1" />
<dependency conf="autopsy_core->default" org="org.jfxtras" name="jfxtras-common" rev="17-r1" />
<dependency conf="autopsy_core->default" org="org.jfxtras" name="jfxtras-fxml" rev="${jfxtras.version}" />
<dependency conf="autopsy_core->default" org="org.jfxtras" name="jfxtras-controls" rev="${jfxtras.version}" />
<dependency conf="autopsy_core->default" org="org.jfxtras" name="jfxtras-common" rev="${jfxtras.version}" />
<!-- templateing engine used by timeline to generate its snapshot report -->
<dependency conf="autopsy_core->default" org="com.github.spullara.mustache.java" name="compiler" rev="0.9.10" />
<dependency conf="autopsy_core->default" org="com.github.spullara.mustache.java" name="compiler" rev="0.9.14" />
<!-- image support for autopsy and image gallery -->
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.common" name="common-lang" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.common" name="common-io" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.common" name="common-image" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-jpeg" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-bmp" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-tiff" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-pnm" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-psd" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-iff" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-pcx" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-pict" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-sgi" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-tga" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-icns" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-thumbsdb" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-core" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-metadata" rev="3.8.2" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.common" name="common-lang" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.common" name="common-io" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.common" name="common-image" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-jpeg" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-bmp" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-tiff" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-pnm" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-psd" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-iff" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-pcx" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-pict" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-sgi" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-tga" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-icns" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-thumbsdb" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-core" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="com.twelvemonkeys.imageio" name="imageio-metadata" rev="${twelvemonkeys.version}" />
<dependency conf="autopsy_core->default" org="org.sejda.webp-imageio" name="webp-imageio-sejda" rev="0.1.0"/>
<dependency conf="autopsy_core->default" org="com.googlecode.plist" name="dd-plist" rev="1.23"/>
<dependency conf="autopsy_core->default" org="org.slf4j" name="slf4j-reload4j" rev="1.7.36"/>
<dependency conf="autopsy_core->default" org="com.googlecode.plist" name="dd-plist" rev="1.28"/>
<dependency conf="autopsy_core->default" org="org.slf4j" name="slf4j-reload4j" rev="2.0.16"/>
<dependency conf="autopsy_core->default" org="org.apache.logging.log4j" name="log4j-api" rev="2.17.2" transitive="false"/>
<dependency conf="autopsy_core->default" org="org.apache.logging.log4j" name="log4j-core" rev="2.17.2" transitive="false"/>
<dependency conf="autopsy_core->default" org="org.apache.logging.log4j" name="log4j-api" rev="${log4j.version}" transitive="false"/>
<dependency conf="autopsy_core->default" org="org.apache.logging.log4j" name="log4j-core" rev="${log4j.version}" transitive="false"/>
<exclude org="*" ext="*" type="javadoc"/>
<exclude org="log4j" module="log4j"/>
<override org="org.slf4j" module="slf4j-api" rev="1.7.36"/>
<override org="com.google.guava" module="guava" rev="33.4.0-jre"/>
<override org="io.netty" module="netty-transport" rev="4.1.116.Final"/>
<override org="com.google.code.gson" module="gson" rev="2.9.0"/>
<override org="com.google.guava" module="guava" rev="32.0.1-jre"/>
<override org="com.fasterxml.jackson.core" module="jackson-databind" rev="&jackson.version;"/>
<override org="com.fasterxml.jackson.core" module="jackson-core" rev="&jackson.version;"/>
<!-- changes to bouncy castle version may also be reflected in thirdparty/IcePDF 6.2.2 -->
<override org="org.bouncycastle" module="bcprov-jdk15on" rev="1.70"/>
<override org="org.bouncycastle" module="bcpkix-jdk15on" rev="1.70"/>
</dependencies>
</ivy-module>

View File

@ -1,4 +1,10 @@
<ivysettings>
<property name="javafx.version" value="17.0.14-ea+2"/>
<property name="jackson.version" value="2.18.2"/>
<property name="jfxtras.version" value="17-r1"/>
<property name="twelvemonkeys.version" value="3.12.0"/>
<property name="log4j.version" value="2.24.3"/>
<settings defaultResolver="main"/>
<resolvers>
<chain name="main">

View File

@ -1,118 +1,120 @@
file.reference.animal-sniffer-annotations-1.21.jar=release/modules/ext/animal-sniffer-annotations-1.21.jar
file.reference.annotations-4.1.1.4.jar=release/modules/ext/annotations-4.1.1.4.jar
file.reference.ant-1.10.12.jar=release/modules/ext/ant-1.10.12.jar
file.reference.ant-launcher-1.10.12.jar=release/modules/ext/ant-launcher-1.10.12.jar
file.reference.api-common-2.1.4.jar=release/modules/ext/api-common-2.1.4.jar
file.reference.AppleJavaExtensions-1.4.jar=release/modules/ext/AppleJavaExtensions-1.4.jar
file.reference.auto-value-annotations-1.9.jar=release/modules/ext/auto-value-annotations-1.9.jar
file.reference.bcpkix-jdk15on-1.70.jar=release/modules/ext/bcpkix-jdk15on-1.70.jar
file.reference.bcprov-jdk15on-1.70.jar=release/modules/ext/bcprov-jdk15on-1.70.jar
file.reference.bcutil-jdk15on-1.70.jar=release/modules/ext/bcutil-jdk15on-1.70.jar
file.reference.checker-qual-3.21.3.jar=release/modules/ext/checker-qual-3.21.3.jar
file.reference.common-image-3.8.2.jar=release/modules/ext/common-image-3.8.2.jar
file.reference.common-io-3.8.2.jar=release/modules/ext/common-io-3.8.2.jar
file.reference.common-lang-3.8.2.jar=release/modules/ext/common-lang-3.8.2.jar
file.reference.LGoodDatePicker-11.2.1.jar=release/modules/ext/LGoodDatePicker-11.2.1.jar
file.reference.animal-sniffer-annotations-1.24.jar=release/modules/ext/animal-sniffer-annotations-1.24.jar
file.reference.annotations-4.1.1.4.jar=release/modules/ext/annotations-4.1.1.4.jar
file.reference.ant-1.10.15.jar=release/modules/ext/ant-1.10.15.jar
file.reference.ant-launcher-1.10.15.jar=release/modules/ext/ant-launcher-1.10.15.jar
file.reference.api-common-2.41.0.jar=release/modules/ext/api-common-2.41.0.jar
file.reference.auto-value-annotations-1.11.0.jar=release/modules/ext/auto-value-annotations-1.11.0.jar
file.reference.checker-qual-3.47.0.jar=release/modules/ext/checker-qual-3.47.0.jar
file.reference.common-image-3.12.0.jar=release/modules/ext/common-image-3.12.0.jar
file.reference.common-io-3.12.0.jar=release/modules/ext/common-io-3.12.0.jar
file.reference.common-lang-3.12.0.jar=release/modules/ext/common-lang-3.12.0.jar
file.reference.commons-beanutils-1.9.4.jar=release/modules/ext/commons-beanutils-1.9.4.jar
file.reference.commons-codec-1.15.jar=release/modules/ext/commons-codec-1.15.jar
file.reference.commons-codec-1.17.1.jar=release/modules/ext/commons-codec-1.17.1.jar
file.reference.commons-collections-3.2.2.jar=release/modules/ext/commons-collections-3.2.2.jar
file.reference.commons-collections4-4.4.jar=release/modules/ext/commons-collections4-4.4.jar
file.reference.commons-csv-1.9.0.jar=release/modules/ext/commons-csv-1.9.0.jar
file.reference.commons-collections4-4.5.0-M2.jar=release/modules/ext/commons-collections4-4.5.0-M2.jar
file.reference.commons-csv-1.12.0.jar=release/modules/ext/commons-csv-1.12.0.jar
file.reference.commons-digester-2.1.jar=release/modules/ext/commons-digester-2.1.jar
file.reference.commons-io-2.11.0.jar=release/modules/ext/commons-io-2.11.0.jar
file.reference.commons-io-2.18.0.jar=release/modules/ext/commons-io-2.18.0.jar
file.reference.commons-lang-2.6.jar=release/modules/ext/commons-lang-2.6.jar
file.reference.commons-lang3-3.12.0.jar=release/modules/ext/commons-lang3-3.12.0.jar
file.reference.commons-logging-1.2.jar=release/modules/ext/commons-logging-1.2.jar
file.reference.commons-text-1.10.0.jar=release/modules/ext/commons-text-1.10.0.jar
file.reference.commons-validator-1.7.jar=release/modules/ext/commons-validator-1.7.jar
file.reference.compiler-0.9.10.jar=release/modules/ext/compiler-0.9.10.jar
file.reference.conscrypt-openjdk-uber-2.5.1.jar=release/modules/ext/conscrypt-openjdk-uber-2.5.1.jar
file.reference.controlsfx-11.1.2-sources.jar=release/modules/ext/controlsfx-11.1.2-sources.jar
file.reference.controlsfx-11.1.2.jar=release/modules/ext/controlsfx-11.1.2.jar
file.reference.dd-plist-1.23.jar=release/modules/ext/dd-plist-1.23.jar
file.reference.error_prone_annotations-2.11.0.jar=release/modules/ext/error_prone_annotations-2.11.0.jar
file.reference.failureaccess-1.0.1.jar=release/modules/ext/failureaccess-1.0.1.jar
file.reference.gax-2.12.2.jar=release/modules/ext/gax-2.12.2.jar
file.reference.gax-grpc-2.12.2.jar=release/modules/ext/gax-grpc-2.12.2.jar
file.reference.gax-httpjson-0.97.2.jar=release/modules/ext/gax-httpjson-0.97.2.jar
file.reference.google-api-client-1.33.2.jar=release/modules/ext/google-api-client-1.33.2.jar
file.reference.google-api-services-translate-v2-rev20170525-1.32.1.jar=release/modules/ext/google-api-services-translate-v2-rev20170525-1.32.1.jar
file.reference.google-auth-library-credentials-1.5.3.jar=release/modules/ext/google-auth-library-credentials-1.5.3.jar
file.reference.google-auth-library-oauth2-http-1.5.3.jar=release/modules/ext/google-auth-library-oauth2-http-1.5.3.jar
file.reference.google-cloud-core-2.5.6.jar=release/modules/ext/google-cloud-core-2.5.6.jar
file.reference.google-cloud-core-http-2.5.6.jar=release/modules/ext/google-cloud-core-http-2.5.6.jar
file.reference.google-cloud-translate-2.1.11.jar=release/modules/ext/google-cloud-translate-2.1.11.jar
file.reference.google-http-client-1.41.4.jar=release/modules/ext/google-http-client-1.41.4.jar
file.reference.google-http-client-apache-v2-1.41.4.jar=release/modules/ext/google-http-client-apache-v2-1.41.4.jar
file.reference.google-http-client-appengine-1.41.4.jar=release/modules/ext/google-http-client-appengine-1.41.4.jar
file.reference.google-http-client-gson-1.41.4.jar=release/modules/ext/google-http-client-gson-1.41.4.jar
file.reference.google-http-client-jackson2-1.41.4.jar=release/modules/ext/google-http-client-jackson2-1.41.4.jar
file.reference.google-oauth-client-1.33.1.jar=release/modules/ext/google-oauth-client-1.33.1.jar
file.reference.grpc-alts-1.44.1.jar=release/modules/ext/grpc-alts-1.44.1.jar
file.reference.grpc-api-1.44.1.jar=release/modules/ext/grpc-api-1.44.1.jar
file.reference.grpc-auth-1.44.1.jar=release/modules/ext/grpc-auth-1.44.1.jar
file.reference.grpc-context-1.44.1.jar=release/modules/ext/grpc-context-1.44.1.jar
file.reference.grpc-core-1.44.1.jar=release/modules/ext/grpc-core-1.44.1.jar
file.reference.grpc-grpclb-1.44.1.jar=release/modules/ext/grpc-grpclb-1.44.1.jar
file.reference.grpc-netty-shaded-1.44.1.jar=release/modules/ext/grpc-netty-shaded-1.44.1.jar
file.reference.grpc-protobuf-1.44.1.jar=release/modules/ext/grpc-protobuf-1.44.1.jar
file.reference.grpc-protobuf-lite-1.44.1.jar=release/modules/ext/grpc-protobuf-lite-1.44.1.jar
file.reference.grpc-services-1.44.1.jar=release/modules/ext/grpc-services-1.44.1.jar
file.reference.grpc-stub-1.44.1.jar=release/modules/ext/grpc-stub-1.44.1.jar
file.reference.grpc-xds-1.44.1.jar=release/modules/ext/grpc-xds-1.44.1.jar
file.reference.gson-2.9.0.jar=release/modules/ext/gson-2.9.0.jar
file.reference.commons-lang3-3.17.0.jar=release/modules/ext/commons-lang3-3.17.0.jar
file.reference.commons-logging-1.3.4.jar=release/modules/ext/commons-logging-1.3.4.jar
file.reference.commons-text-1.13.0.jar=release/modules/ext/commons-text-1.13.0.jar
file.reference.commons-validator-1.9.0.jar=release/modules/ext/commons-validator-1.9.0.jar
file.reference.compiler-0.9.14.jar=release/modules/ext/compiler-0.9.14.jar
file.reference.conscrypt-openjdk-uber-2.5.2.jar=release/modules/ext/conscrypt-openjdk-uber-2.5.2.jar
file.reference.controlsfx-11.2.1-sources.jar=release/modules/ext/controlsfx-11.2.1-sources.jar
file.reference.controlsfx-11.2.1.jar=release/modules/ext/controlsfx-11.2.1.jar
file.reference.dd-plist-1.28.jar=release/modules/ext/dd-plist-1.28.jar
file.reference.error_prone_annotations-2.35.1.jar=release/modules/ext/error_prone_annotations-2.35.1.jar
file.reference.failureaccess-1.0.2.jar=release/modules/ext/failureaccess-1.0.2.jar
file.reference.gax-2.58.0.jar=release/modules/ext/gax-2.58.0.jar
file.reference.gax-grpc-2.58.0.jar=release/modules/ext/gax-grpc-2.58.0.jar
file.reference.gax-httpjson-2.58.0.jar=release/modules/ext/gax-httpjson-2.58.0.jar
file.reference.google-api-client-2.7.0.jar=release/modules/ext/google-api-client-2.7.0.jar
file.reference.google-api-services-translate-v2-rev20170525-2.0.0.jar=release/modules/ext/google-api-services-translate-v2-rev20170525-2.0.0.jar
file.reference.google-auth-library-credentials-1.30.0.jar=release/modules/ext/google-auth-library-credentials-1.30.0.jar
file.reference.google-auth-library-oauth2-http-1.30.0.jar=release/modules/ext/google-auth-library-oauth2-http-1.30.0.jar
file.reference.google-cloud-core-2.48.0.jar=release/modules/ext/google-cloud-core-2.48.0.jar
file.reference.google-cloud-core-http-2.48.0.jar=release/modules/ext/google-cloud-core-http-2.48.0.jar
file.reference.google-cloud-translate-2.54.0.jar=release/modules/ext/google-cloud-translate-2.54.0.jar
file.reference.google-http-client-1.45.0.jar=release/modules/ext/google-http-client-1.45.0.jar
file.reference.google-http-client-apache-v2-1.45.0.jar=release/modules/ext/google-http-client-apache-v2-1.45.0.jar
file.reference.google-http-client-appengine-1.45.0.jar=release/modules/ext/google-http-client-appengine-1.45.0.jar
file.reference.google-http-client-gson-1.45.0.jar=release/modules/ext/google-http-client-gson-1.45.0.jar
file.reference.google-http-client-jackson2-1.45.0.jar=release/modules/ext/google-http-client-jackson2-1.45.0.jar
file.reference.google-oauth-client-1.36.0.jar=release/modules/ext/google-oauth-client-1.36.0.jar
file.reference.grpc-alts-1.68.1.jar=release/modules/ext/grpc-alts-1.68.1.jar
file.reference.grpc-api-1.68.1.jar=release/modules/ext/grpc-api-1.68.1.jar
file.reference.grpc-auth-1.68.1.jar=release/modules/ext/grpc-auth-1.68.1.jar
file.reference.grpc-context-1.68.1.jar=release/modules/ext/grpc-context-1.68.1.jar
file.reference.grpc-core-1.68.1.jar=release/modules/ext/grpc-core-1.68.1.jar
file.reference.grpc-googleapis-1.68.1.jar=release/modules/ext/grpc-googleapis-1.68.1.jar
file.reference.grpc-grpclb-1.68.1.jar=release/modules/ext/grpc-grpclb-1.68.1.jar
file.reference.grpc-inprocess-1.68.1.jar=release/modules/ext/grpc-inprocess-1.68.1.jar
file.reference.grpc-netty-shaded-1.68.1.jar=release/modules/ext/grpc-netty-shaded-1.68.1.jar
file.reference.grpc-protobuf-1.68.1.jar=release/modules/ext/grpc-protobuf-1.68.1.jar
file.reference.grpc-protobuf-lite-1.68.1.jar=release/modules/ext/grpc-protobuf-lite-1.68.1.jar
file.reference.grpc-s2a-1.68.1.jar=release/modules/ext/grpc-s2a-1.68.1.jar
file.reference.grpc-services-1.68.1.jar=release/modules/ext/grpc-services-1.68.1.jar
file.reference.grpc-stub-1.68.1.jar=release/modules/ext/grpc-stub-1.68.1.jar
file.reference.grpc-util-1.68.1.jar=release/modules/ext/grpc-util-1.68.1.jar
file.reference.grpc-xds-1.68.1.jar=release/modules/ext/grpc-xds-1.68.1.jar
file.reference.gson-2.11.0.jar=release/modules/ext/gson-2.11.0.jar
file.reference.gst1-java-core-1.4.0.jar=release/modules/ext/gst1-java-core-1.4.0.jar
file.reference.guava-32.0.1-jre.jar=release/modules/ext/guava-32.0.1-jre.jar
file.reference.httpclient-4.5.13.jar=release/modules/ext/httpclient-4.5.13.jar
file.reference.httpcore-4.4.15.jar=release/modules/ext/httpcore-4.4.15.jar
file.reference.imageio-bmp-3.8.2.jar=release/modules/ext/imageio-bmp-3.8.2.jar
file.reference.imageio-core-3.8.2.jar=release/modules/ext/imageio-core-3.8.2.jar
file.reference.imageio-icns-3.8.2.jar=release/modules/ext/imageio-icns-3.8.2.jar
file.reference.imageio-iff-3.8.2.jar=release/modules/ext/imageio-iff-3.8.2.jar
file.reference.imageio-jpeg-3.8.2.jar=release/modules/ext/imageio-jpeg-3.8.2.jar
file.reference.imageio-metadata-3.8.2.jar=release/modules/ext/imageio-metadata-3.8.2.jar
file.reference.imageio-pcx-3.8.2.jar=release/modules/ext/imageio-pcx-3.8.2.jar
file.reference.imageio-pict-3.8.2.jar=release/modules/ext/imageio-pict-3.8.2.jar
file.reference.imageio-pnm-3.8.2.jar=release/modules/ext/imageio-pnm-3.8.2.jar
file.reference.imageio-psd-3.8.2.jar=release/modules/ext/imageio-psd-3.8.2.jar
file.reference.imageio-sgi-3.8.2.jar=release/modules/ext/imageio-sgi-3.8.2.jar
file.reference.imageio-tga-3.8.2.jar=release/modules/ext/imageio-tga-3.8.2.jar
file.reference.imageio-thumbsdb-3.8.2.jar=release/modules/ext/imageio-thumbsdb-3.8.2.jar
file.reference.imageio-tiff-3.8.2.jar=release/modules/ext/imageio-tiff-3.8.2.jar
file.reference.guava-33.4.0-jre.jar=release/modules/ext/guava-33.4.0-jre.jar
file.reference.httpclient-4.5.14.jar=release/modules/ext/httpclient-4.5.14.jar
file.reference.httpcore-4.4.16.jar=release/modules/ext/httpcore-4.4.16.jar
file.reference.imageio-bmp-3.12.0.jar=release/modules/ext/imageio-bmp-3.12.0.jar
file.reference.imageio-core-3.12.0.jar=release/modules/ext/imageio-core-3.12.0.jar
file.reference.imageio-icns-3.12.0.jar=release/modules/ext/imageio-icns-3.12.0.jar
file.reference.imageio-iff-3.12.0.jar=release/modules/ext/imageio-iff-3.12.0.jar
file.reference.imageio-jpeg-3.12.0.jar=release/modules/ext/imageio-jpeg-3.12.0.jar
file.reference.imageio-metadata-3.12.0.jar=release/modules/ext/imageio-metadata-3.12.0.jar
file.reference.imageio-pcx-3.12.0.jar=release/modules/ext/imageio-pcx-3.12.0.jar
file.reference.imageio-pict-3.12.0.jar=release/modules/ext/imageio-pict-3.12.0.jar
file.reference.imageio-pnm-3.12.0.jar=release/modules/ext/imageio-pnm-3.12.0.jar
file.reference.imageio-psd-3.12.0.jar=release/modules/ext/imageio-psd-3.12.0.jar
file.reference.imageio-sgi-3.12.0.jar=release/modules/ext/imageio-sgi-3.12.0.jar
file.reference.imageio-tga-3.12.0.jar=release/modules/ext/imageio-tga-3.12.0.jar
file.reference.imageio-thumbsdb-3.12.0.jar=release/modules/ext/imageio-thumbsdb-3.12.0.jar
file.reference.imageio-tiff-3.12.0.jar=release/modules/ext/imageio-tiff-3.12.0.jar
file.reference.imgscalr-lib-4.2.jar=release/modules/ext/imgscalr-lib-4.2.jar
file.reference.j2objc-annotations-1.3.jar=release/modules/ext/j2objc-annotations-1.3.jar
file.reference.jackson-annotations-2.15.2.jar=release/modules/ext/jackson-annotations-2.15.2.jar
file.reference.jackson-core-2.15.2.jar=release/modules/ext/jackson-core-2.15.2.jar
file.reference.jackson-databind-2.15.2.jar=release/modules/ext/jackson-databind-2.15.2.jar
file.reference.jackson-dataformat-csv-2.15.2.jar=release/modules/ext/jackson-dataformat-csv-2.15.2.jar
file.reference.jackson-datatype-jsr310-2.15.2.jar=release/modules/ext/jackson-datatype-jsr310-2.15.2.jar
file.reference.javafx-base-17.0.7-linux.jar=release/modules/ext/javafx-base-17.0.7-linux.jar
file.reference.javafx-base-17.0.7-mac.jar=release/modules/ext/javafx-base-17.0.7-mac.jar
file.reference.javafx-base-17.0.7-win.jar=release/modules/ext/javafx-base-17.0.7-win.jar
file.reference.javafx-base-17.0.7.jar=release/modules/ext/javafx-base-17.0.7.jar
file.reference.javafx-controls-17.0.7-linux.jar=release/modules/ext/javafx-controls-17.0.7-linux.jar
file.reference.javafx-controls-17.0.7-mac.jar=release/modules/ext/javafx-controls-17.0.7-mac.jar
file.reference.javafx-controls-17.0.7-win.jar=release/modules/ext/javafx-controls-17.0.7-win.jar
file.reference.javafx-controls-17.0.7.jar=release/modules/ext/javafx-controls-17.0.7.jar
file.reference.javafx-fxml-17.0.7-linux.jar=release/modules/ext/javafx-fxml-17.0.7-linux.jar
file.reference.javafx-fxml-17.0.7-mac.jar=release/modules/ext/javafx-fxml-17.0.7-mac.jar
file.reference.javafx-fxml-17.0.7-win.jar=release/modules/ext/javafx-fxml-17.0.7-win.jar
file.reference.javafx-fxml-17.0.7.jar=release/modules/ext/javafx-fxml-17.0.7.jar
file.reference.javafx-graphics-17.0.7-linux.jar=release/modules/ext/javafx-graphics-17.0.7-linux.jar
file.reference.javafx-graphics-17.0.7-mac.jar=release/modules/ext/javafx-graphics-17.0.7-mac.jar
file.reference.javafx-graphics-17.0.7-win.jar=release/modules/ext/javafx-graphics-17.0.7-win.jar
file.reference.javafx-graphics-17.0.7.jar=release/modules/ext/javafx-graphics-17.0.7.jar
file.reference.javafx-media-17.0.7-linux.jar=release/modules/ext/javafx-media-17.0.7-linux.jar
file.reference.javafx-media-17.0.7-mac.jar=release/modules/ext/javafx-media-17.0.7-mac.jar
file.reference.javafx-media-17.0.7-win.jar=release/modules/ext/javafx-media-17.0.7-win.jar
file.reference.javafx-media-17.0.7.jar=release/modules/ext/javafx-media-17.0.7.jar
file.reference.javafx-swing-17.0.7-linux.jar=release/modules/ext/javafx-swing-17.0.7-linux.jar
file.reference.javafx-swing-17.0.7-mac.jar=release/modules/ext/javafx-swing-17.0.7-mac.jar
file.reference.javafx-swing-17.0.7-win.jar=release/modules/ext/javafx-swing-17.0.7-win.jar
file.reference.javafx-swing-17.0.7.jar=release/modules/ext/javafx-swing-17.0.7.jar
file.reference.javafx-web-17.0.7-linux.jar=release/modules/ext/javafx-web-17.0.7-linux.jar
file.reference.javafx-web-17.0.7-mac.jar=release/modules/ext/javafx-web-17.0.7-mac.jar
file.reference.javafx-web-17.0.7-win.jar=release/modules/ext/javafx-web-17.0.7-win.jar
file.reference.javafx-web-17.0.7.jar=release/modules/ext/javafx-web-17.0.7.jar
file.reference.j2objc-annotations-3.0.0.jar=release/modules/ext/j2objc-annotations-3.0.0.jar
file.reference.jackson-annotations-2.18.2.jar=release/modules/ext/jackson-annotations-2.18.2.jar
file.reference.jackson-core-2.18.2.jar=release/modules/ext/jackson-core-2.18.2.jar
file.reference.jackson-databind-2.18.2.jar=release/modules/ext/jackson-databind-2.18.2.jar
file.reference.jackson-dataformat-csv-2.18.2.jar=release/modules/ext/jackson-dataformat-csv-2.18.2.jar
file.reference.jackson-datatype-jsr310-2.18.2.jar=release/modules/ext/jackson-datatype-jsr310-2.18.2.jar
file.reference.javafx-base-17.0.14-ea2-linux.jar=release/modules/ext/javafx-base-17.0.14-ea2-linux.jar
file.reference.javafx-base-17.0.14-ea2-mac.jar=release/modules/ext/javafx-base-17.0.14-ea2-mac.jar
file.reference.javafx-base-17.0.14-ea2-win.jar=release/modules/ext/javafx-base-17.0.14-ea2-win.jar
file.reference.javafx-base-17.0.14-ea2.jar=release/modules/ext/javafx-base-17.0.14-ea2.jar
file.reference.javafx-controls-17.0.14-ea2-linux.jar=release/modules/ext/javafx-controls-17.0.14-ea2-linux.jar
file.reference.javafx-controls-17.0.14-ea2-mac.jar=release/modules/ext/javafx-controls-17.0.14-ea2-mac.jar
file.reference.javafx-controls-17.0.14-ea2-win.jar=release/modules/ext/javafx-controls-17.0.14-ea2-win.jar
file.reference.javafx-controls-17.0.14-ea2.jar=release/modules/ext/javafx-controls-17.0.14-ea2.jar
file.reference.javafx-fxml-17.0.14-ea2-linux.jar=release/modules/ext/javafx-fxml-17.0.14-ea2-linux.jar
file.reference.javafx-fxml-17.0.14-ea2-mac.jar=release/modules/ext/javafx-fxml-17.0.14-ea2-mac.jar
file.reference.javafx-fxml-17.0.14-ea2-win.jar=release/modules/ext/javafx-fxml-17.0.14-ea2-win.jar
file.reference.javafx-fxml-17.0.14-ea2.jar=release/modules/ext/javafx-fxml-17.0.14-ea2.jar
file.reference.javafx-graphics-17.0.14-ea2-linux.jar=release/modules/ext/javafx-graphics-17.0.14-ea2-linux.jar
file.reference.javafx-graphics-17.0.14-ea2-mac.jar=release/modules/ext/javafx-graphics-17.0.14-ea2-mac.jar
file.reference.javafx-graphics-17.0.14-ea2-win.jar=release/modules/ext/javafx-graphics-17.0.14-ea2-win.jar
file.reference.javafx-graphics-17.0.14-ea2.jar=release/modules/ext/javafx-graphics-17.0.14-ea2.jar
file.reference.javafx-media-17.0.14-ea2-linux.jar=release/modules/ext/javafx-media-17.0.14-ea2-linux.jar
file.reference.javafx-media-17.0.14-ea2-mac.jar=release/modules/ext/javafx-media-17.0.14-ea2-mac.jar
file.reference.javafx-media-17.0.14-ea2-win.jar=release/modules/ext/javafx-media-17.0.14-ea2-win.jar
file.reference.javafx-media-17.0.14-ea2.jar=release/modules/ext/javafx-media-17.0.14-ea2.jar
file.reference.javafx-swing-17.0.14-ea2-linux.jar=release/modules/ext/javafx-swing-17.0.14-ea2-linux.jar
file.reference.javafx-swing-17.0.14-ea2-mac.jar=release/modules/ext/javafx-swing-17.0.14-ea2-mac.jar
file.reference.javafx-swing-17.0.14-ea2-win.jar=release/modules/ext/javafx-swing-17.0.14-ea2-win.jar
file.reference.javafx-swing-17.0.14-ea2.jar=release/modules/ext/javafx-swing-17.0.14-ea2.jar
file.reference.javafx-web-17.0.14-ea2-linux.jar=release/modules/ext/javafx-web-17.0.14-ea2-linux.jar
file.reference.javafx-web-17.0.14-ea2-mac.jar=release/modules/ext/javafx-web-17.0.14-ea2-mac.jar
file.reference.javafx-web-17.0.14-ea2-win.jar=release/modules/ext/javafx-web-17.0.14-ea2-win.jar
file.reference.javafx-web-17.0.14-ea2.jar=release/modules/ext/javafx-web-17.0.14-ea2.jar
file.reference.javax.annotation-api-1.3.2.jar=release/modules/ext/javax.annotation-api-1.3.2.jar
file.reference.jericho-html-3.4.jar=release/modules/ext/jericho-html-3.4.jar
file.reference.jfxtras-common-17-r1.jar=release/modules/ext/jfxtras-common-17-r1.jar
@ -120,29 +122,27 @@ file.reference.jfxtras-controls-17-r1.jar=release/modules/ext/jfxtras-controls-1
file.reference.jfxtras-fxml-17-r1.jar=release/modules/ext/jfxtras-fxml-17-r1.jar
file.reference.jna-5.16.0.jar=release/modules/ext/jna-5.16.0.jar
file.reference.jna-platform-5.16.0.jar=release/modules/ext/jna-platform-5.16.0.jar
file.reference.joda-time-2.10.14.jar=release/modules/ext/joda-time-2.10.14.jar
file.reference.joda-time-2.13.0.jar=release/modules/ext/joda-time-2.13.0.jar
file.reference.jsr305-3.0.2.jar=release/modules/ext/jsr305-3.0.2.jar
file.reference.LGoodDatePicker-11.2.1.jar=release/modules/ext/LGoodDatePicker-11.2.1.jar
file.reference.listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar=release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
file.reference.log4j-api-2.17.2.jar=release/modules/ext/log4j-api-2.17.2.jar
file.reference.log4j-core-2.17.2.jar=release/modules/ext/log4j-core-2.17.2.jar
file.reference.opencensus-api-0.31.0.jar=release/modules/ext/opencensus-api-0.31.0.jar
file.reference.opencensus-contrib-http-util-0.31.0.jar=release/modules/ext/opencensus-contrib-http-util-0.31.0.jar
file.reference.opencensus-proto-0.2.0.jar=release/modules/ext/opencensus-proto-0.2.0.jar
file.reference.log4j-api-2.24.3.jar=release/modules/ext/log4j-api-2.24.3.jar
file.reference.log4j-core-2.24.3.jar=release/modules/ext/log4j-core-2.24.3.jar
file.reference.opencensus-api-0.31.1.jar=release/modules/ext/opencensus-api-0.31.1.jar
file.reference.opencensus-contrib-http-util-0.31.1.jar=release/modules/ext/opencensus-contrib-http-util-0.31.1.jar
file.reference.opencv-2413.jar=release/modules/ext/opencv-2413.jar
file.reference.perfmark-api-0.23.0.jar=release/modules/ext/perfmark-api-0.23.0.jar
file.reference.proto-google-cloud-translate-v3-2.1.11.jar=release/modules/ext/proto-google-cloud-translate-v3-2.1.11.jar
file.reference.proto-google-cloud-translate-v3beta1-0.83.11.jar=release/modules/ext/proto-google-cloud-translate-v3beta1-0.83.11.jar
file.reference.proto-google-common-protos-2.7.4.jar=release/modules/ext/proto-google-common-protos-2.7.4.jar
file.reference.proto-google-iam-v1-1.2.6.jar=release/modules/ext/proto-google-iam-v1-1.2.6.jar
file.reference.protobuf-java-3.19.4.jar=release/modules/ext/protobuf-java-3.19.4.jar
file.reference.protobuf-java-util-3.19.4.jar=release/modules/ext/protobuf-java-util-3.19.4.jar
file.reference.re2j-1.5.jar=release/modules/ext/re2j-1.5.jar
file.reference.reload4j-1.2.19.jar=release/modules/ext/reload4j-1.2.19.jar
file.reference.slf4j-api-1.7.36.jar=release/modules/ext/slf4j-api-1.7.36.jar
file.reference.slf4j-reload4j-1.7.36.jar=release/modules/ext/slf4j-reload4j-1.7.36.jar
file.reference.threetenbp-1.5.2.jar=release/modules/ext/threetenbp-1.5.2.jar
file.reference.perfmark-api-0.27.0.jar=release/modules/ext/perfmark-api-0.27.0.jar
file.reference.proto-google-cloud-translate-v3-2.54.0.jar=release/modules/ext/proto-google-cloud-translate-v3-2.54.0.jar
file.reference.proto-google-cloud-translate-v3beta1-0.136.0.jar=release/modules/ext/proto-google-cloud-translate-v3beta1-0.136.0.jar
file.reference.proto-google-common-protos-2.49.0.jar=release/modules/ext/proto-google-common-protos-2.49.0.jar
file.reference.proto-google-iam-v1-1.44.0.jar=release/modules/ext/proto-google-iam-v1-1.44.0.jar
file.reference.protobuf-java-3.25.5.jar=release/modules/ext/protobuf-java-3.25.5.jar
file.reference.protobuf-java-util-3.25.5.jar=release/modules/ext/protobuf-java-util-3.25.5.jar
file.reference.re2j-1.7.jar=release/modules/ext/re2j-1.7.jar
file.reference.reload4j-1.2.22.jar=release/modules/ext/reload4j-1.2.22.jar
file.reference.slf4j-api-2.0.16.jar=release/modules/ext/slf4j-api-2.0.16.jar
file.reference.slf4j-reload4j-2.0.16.jar=release/modules/ext/slf4j-reload4j-2.0.16.jar
file.reference.threetenbp-1.7.0.jar=release/modules/ext/threetenbp-1.7.0.jar
file.reference.webp-imageio-sejda-0.1.0.jar=release/modules/ext/webp-imageio-sejda-0.1.0.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17
javac.compilerargs=-Xlint -Xlint:-serial
nbm.needs.restart=true

View File

@ -405,6 +405,7 @@
<package>org.apache.commons.io</package>
<package>org.apache.commons.io.comparator</package>
<package>org.apache.commons.io.filefilter</package>
<package>org.apache.commons.io.function</package>
<package>org.apache.commons.io.input</package>
<package>org.apache.commons.io.monitor</package>
<package>org.apache.commons.io.output</package>
@ -561,464 +562,468 @@
<package>org.slf4j.spi</package>
</public-packages>
<class-path-extension>
<runtime-relative-path>ext/animal-sniffer-annotations-1.21.jar</runtime-relative-path>
<binary-origin>release/modules/ext/animal-sniffer-annotations-1.21.jar</binary-origin>
<runtime-relative-path>ext/animal-sniffer-annotations-1.24.jar</runtime-relative-path>
<binary-origin>release/modules/ext/animal-sniffer-annotations-1.24.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/annotations-4.1.1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/annotations-4.1.1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/ant-1.10.12.jar</runtime-relative-path>
<binary-origin>release/modules/ext/ant-1.10.12.jar</binary-origin>
<runtime-relative-path>ext/ant-1.10.15.jar</runtime-relative-path>
<binary-origin>release/modules/ext/ant-1.10.15.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/ant-launcher-1.10.12.jar</runtime-relative-path>
<binary-origin>release/modules/ext/ant-launcher-1.10.12.jar</binary-origin>
<runtime-relative-path>ext/ant-launcher-1.10.15.jar</runtime-relative-path>
<binary-origin>release/modules/ext/ant-launcher-1.10.15.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/api-common-2.1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/api-common-2.1.4.jar</binary-origin>
<runtime-relative-path>ext/api-common-2.41.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/api-common-2.41.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/AppleJavaExtensions-1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/AppleJavaExtensions-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/auto-value-annotations-1.9.jar</runtime-relative-path>
<binary-origin>release/modules/ext/auto-value-annotations-1.9.jar</binary-origin>
<runtime-relative-path>ext/auto-value-annotations-1.11.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/auto-value-annotations-1.11.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcpkix-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcpkix-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/checker-qual-3.47.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/checker-qual-3.47.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcprov-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcprov-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/common-image-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/common-image-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcutil-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcutil-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/common-io-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/common-io-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/checker-qual-3.21.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/checker-qual-3.21.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/common-image-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/common-image-3.8.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/common-io-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/common-io-3.8.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/common-lang-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/common-lang-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/common-lang-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/common-lang-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-beanutils-1.9.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-beanutils-1.9.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-codec-1.15.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-codec-1.15.jar</binary-origin>
<runtime-relative-path>ext/commons-codec-1.17.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-codec-1.17.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-collections-3.2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-collections-3.2.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-collections4-4.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-collections4-4.4.jar</binary-origin>
<runtime-relative-path>ext/commons-collections4-4.5.0-M2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-collections4-4.5.0-M2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-csv-1.9.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-csv-1.9.0.jar</binary-origin>
<runtime-relative-path>ext/commons-csv-1.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-csv-1.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-digester-2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-digester-2.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-io-2.11.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.11.0.jar</binary-origin>
<runtime-relative-path>ext/commons-io-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.18.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-lang-2.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-lang-2.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-lang3-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-lang3-3.12.0.jar</binary-origin>
<runtime-relative-path>ext/commons-lang3-3.17.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-lang3-3.17.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-logging-1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-logging-1.2.jar</binary-origin>
<runtime-relative-path>ext/commons-logging-1.3.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-logging-1.3.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-text-1.10.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-text-1.10.0.jar</binary-origin>
<runtime-relative-path>ext/commons-text-1.13.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-text-1.13.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-validator-1.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-validator-1.7.jar</binary-origin>
<runtime-relative-path>ext/commons-validator-1.9.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-validator-1.9.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/compiler-0.9.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/compiler-0.9.10.jar</binary-origin>
<runtime-relative-path>ext/compiler-0.9.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/compiler-0.9.14.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/conscrypt-openjdk-uber-2.5.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/conscrypt-openjdk-uber-2.5.1.jar</binary-origin>
<runtime-relative-path>ext/conscrypt-openjdk-uber-2.5.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/conscrypt-openjdk-uber-2.5.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/controlsfx-11.1.2-sources.jar</runtime-relative-path>
<binary-origin>release/modules/ext/controlsfx-11.1.2-sources.jar</binary-origin>
<runtime-relative-path>ext/controlsfx-11.2.1-sources.jar</runtime-relative-path>
<binary-origin>release/modules/ext/controlsfx-11.2.1-sources.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/controlsfx-11.1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/controlsfx-11.1.2.jar</binary-origin>
<runtime-relative-path>ext/controlsfx-11.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/controlsfx-11.2.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/dd-plist-1.23.jar</runtime-relative-path>
<binary-origin>release/modules/ext/dd-plist-1.23.jar</binary-origin>
<runtime-relative-path>ext/dd-plist-1.28.jar</runtime-relative-path>
<binary-origin>release/modules/ext/dd-plist-1.28.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/error_prone_annotations-2.11.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/error_prone_annotations-2.11.0.jar</binary-origin>
<runtime-relative-path>ext/error_prone_annotations-2.35.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/error_prone_annotations-2.35.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/failureaccess-1.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/failureaccess-1.0.1.jar</binary-origin>
<runtime-relative-path>ext/failureaccess-1.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/failureaccess-1.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gax-2.12.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-2.12.2.jar</binary-origin>
<runtime-relative-path>ext/gax-2.58.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-2.58.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gax-grpc-2.12.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-grpc-2.12.2.jar</binary-origin>
<runtime-relative-path>ext/gax-grpc-2.58.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-grpc-2.58.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gax-httpjson-0.97.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-httpjson-0.97.2.jar</binary-origin>
<runtime-relative-path>ext/gax-httpjson-2.58.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gax-httpjson-2.58.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-api-client-1.33.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-api-client-1.33.2.jar</binary-origin>
<runtime-relative-path>ext/google-api-client-2.7.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-api-client-2.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-api-services-translate-v2-rev20170525-1.32.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-api-services-translate-v2-rev20170525-1.32.1.jar</binary-origin>
<runtime-relative-path>ext/google-api-services-translate-v2-rev20170525-2.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-api-services-translate-v2-rev20170525-2.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-auth-library-credentials-1.5.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-auth-library-credentials-1.5.3.jar</binary-origin>
<runtime-relative-path>ext/google-auth-library-credentials-1.30.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-auth-library-credentials-1.30.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-auth-library-oauth2-http-1.5.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-auth-library-oauth2-http-1.5.3.jar</binary-origin>
<runtime-relative-path>ext/google-auth-library-oauth2-http-1.30.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-auth-library-oauth2-http-1.30.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-cloud-core-2.5.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-core-2.5.6.jar</binary-origin>
<runtime-relative-path>ext/google-cloud-core-2.48.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-core-2.48.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-cloud-core-http-2.5.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-core-http-2.5.6.jar</binary-origin>
<runtime-relative-path>ext/google-cloud-core-http-2.48.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-core-http-2.48.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-cloud-translate-2.1.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-translate-2.1.11.jar</binary-origin>
<runtime-relative-path>ext/google-cloud-translate-2.54.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-cloud-translate-2.54.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-1.41.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-1.41.4.jar</binary-origin>
<runtime-relative-path>ext/google-http-client-1.45.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-1.45.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-apache-v2-1.41.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-apache-v2-1.41.4.jar</binary-origin>
<runtime-relative-path>ext/google-http-client-apache-v2-1.45.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-apache-v2-1.45.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-appengine-1.41.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-appengine-1.41.4.jar</binary-origin>
<runtime-relative-path>ext/google-http-client-appengine-1.45.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-appengine-1.45.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-gson-1.41.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-gson-1.41.4.jar</binary-origin>
<runtime-relative-path>ext/google-http-client-gson-1.45.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-gson-1.45.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-http-client-jackson2-1.41.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-jackson2-1.41.4.jar</binary-origin>
<runtime-relative-path>ext/google-http-client-jackson2-1.45.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-http-client-jackson2-1.45.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/google-oauth-client-1.33.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-oauth-client-1.33.1.jar</binary-origin>
<runtime-relative-path>ext/google-oauth-client-1.36.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/google-oauth-client-1.36.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-alts-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-alts-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-alts-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-alts-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-api-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-api-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-api-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-api-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-auth-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-auth-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-auth-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-auth-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-context-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-context-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-context-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-context-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-core-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-core-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-core-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-core-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-grpclb-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-grpclb-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-googleapis-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-googleapis-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-netty-shaded-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-netty-shaded-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-grpclb-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-grpclb-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-protobuf-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-protobuf-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-inprocess-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-inprocess-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-protobuf-lite-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-protobuf-lite-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-netty-shaded-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-netty-shaded-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-services-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-services-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-protobuf-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-protobuf-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-stub-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-stub-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-protobuf-lite-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-protobuf-lite-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-xds-1.44.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-xds-1.44.1.jar</binary-origin>
<runtime-relative-path>ext/grpc-s2a-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-s2a-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gson-2.9.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gson-2.9.0.jar</binary-origin>
<runtime-relative-path>ext/grpc-services-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-services-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-stub-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-stub-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-util-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-util-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grpc-xds-1.68.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grpc-xds-1.68.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gson-2.11.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gson-2.11.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gst1-java-core-1.4.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gst1-java-core-1.4.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/guava-32.0.1-jre.jar</runtime-relative-path>
<binary-origin>release/modules/ext/guava-32.0.1-jre.jar</binary-origin>
<runtime-relative-path>ext/guava-33.4.0-jre.jar</runtime-relative-path>
<binary-origin>release/modules/ext/guava-33.4.0-jre.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpclient-4.5.13.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpclient-4.5.13.jar</binary-origin>
<runtime-relative-path>ext/httpclient-4.5.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpclient-4.5.14.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpcore-4.4.15.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpcore-4.4.15.jar</binary-origin>
<runtime-relative-path>ext/httpcore-4.4.16.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpcore-4.4.16.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-bmp-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-bmp-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-bmp-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-bmp-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-core-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-core-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-core-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-core-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-icns-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-icns-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-icns-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-icns-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-iff-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-iff-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-iff-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-iff-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-jpeg-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-jpeg-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-jpeg-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-jpeg-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-metadata-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-metadata-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-metadata-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-metadata-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-pcx-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-pcx-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-pcx-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-pcx-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-pict-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-pict-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-pict-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-pict-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-pnm-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-pnm-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-pnm-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-pnm-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-psd-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-psd-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-psd-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-psd-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-sgi-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-sgi-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-sgi-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-sgi-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-tga-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-tga-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-tga-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-tga-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-thumbsdb-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-thumbsdb-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-thumbsdb-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-thumbsdb-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imageio-tiff-3.8.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-tiff-3.8.2.jar</binary-origin>
<runtime-relative-path>ext/imageio-tiff-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imageio-tiff-3.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/imgscalr-lib-4.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/imgscalr-lib-4.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/j2objc-annotations-1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/j2objc-annotations-1.3.jar</binary-origin>
<runtime-relative-path>ext/j2objc-annotations-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/j2objc-annotations-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-annotations-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-annotations-2.15.2.jar</binary-origin>
<runtime-relative-path>ext/jackson-annotations-2.18.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-annotations-2.18.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-core-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-core-2.15.2.jar</binary-origin>
<runtime-relative-path>ext/jackson-core-2.18.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-core-2.18.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-databind-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-databind-2.15.2.jar</binary-origin>
<runtime-relative-path>ext/jackson-databind-2.18.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-databind-2.18.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-dataformat-csv-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-dataformat-csv-2.15.2.jar</binary-origin>
<runtime-relative-path>ext/jackson-dataformat-csv-2.18.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-dataformat-csv-2.18.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-datatype-jsr310-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-datatype-jsr310-2.15.2.jar</binary-origin>
<runtime-relative-path>ext/jackson-datatype-jsr310-2.18.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-datatype-jsr310-2.18.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-base-17.0.7-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.7-linux.jar</binary-origin>
<runtime-relative-path>ext/javafx-base-17.0.14-ea2-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.14-ea2-linux.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-base-17.0.7-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.7-mac.jar</binary-origin>
<runtime-relative-path>ext/javafx-base-17.0.14-ea2-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.14-ea2-mac.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-base-17.0.7-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.7-win.jar</binary-origin>
<runtime-relative-path>ext/javafx-base-17.0.14-ea2-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.14-ea2-win.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-base-17.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.7.jar</binary-origin>
<runtime-relative-path>ext/javafx-base-17.0.14-ea2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-base-17.0.14-ea2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-controls-17.0.7-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.7-linux.jar</binary-origin>
<runtime-relative-path>ext/javafx-controls-17.0.14-ea2-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.14-ea2-linux.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-controls-17.0.7-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.7-mac.jar</binary-origin>
<runtime-relative-path>ext/javafx-controls-17.0.14-ea2-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.14-ea2-mac.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-controls-17.0.7-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.7-win.jar</binary-origin>
<runtime-relative-path>ext/javafx-controls-17.0.14-ea2-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.14-ea2-win.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-controls-17.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.7.jar</binary-origin>
<runtime-relative-path>ext/javafx-controls-17.0.14-ea2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-controls-17.0.14-ea2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-fxml-17.0.7-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.7-linux.jar</binary-origin>
<runtime-relative-path>ext/javafx-fxml-17.0.14-ea2-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.14-ea2-linux.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-fxml-17.0.7-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.7-mac.jar</binary-origin>
<runtime-relative-path>ext/javafx-fxml-17.0.14-ea2-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.14-ea2-mac.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-fxml-17.0.7-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.7-win.jar</binary-origin>
<runtime-relative-path>ext/javafx-fxml-17.0.14-ea2-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.14-ea2-win.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-fxml-17.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.7.jar</binary-origin>
<runtime-relative-path>ext/javafx-fxml-17.0.14-ea2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-fxml-17.0.14-ea2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-graphics-17.0.7-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.7-linux.jar</binary-origin>
<runtime-relative-path>ext/javafx-graphics-17.0.14-ea2-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.14-ea2-linux.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-graphics-17.0.7-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.7-mac.jar</binary-origin>
<runtime-relative-path>ext/javafx-graphics-17.0.14-ea2-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.14-ea2-mac.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-graphics-17.0.7-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.7-win.jar</binary-origin>
<runtime-relative-path>ext/javafx-graphics-17.0.14-ea2-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.14-ea2-win.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-graphics-17.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.7.jar</binary-origin>
<runtime-relative-path>ext/javafx-graphics-17.0.14-ea2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-graphics-17.0.14-ea2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-media-17.0.7-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.7-linux.jar</binary-origin>
<runtime-relative-path>ext/javafx-media-17.0.14-ea2-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.14-ea2-linux.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-media-17.0.7-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.7-mac.jar</binary-origin>
<runtime-relative-path>ext/javafx-media-17.0.14-ea2-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.14-ea2-mac.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-media-17.0.7-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.7-win.jar</binary-origin>
<runtime-relative-path>ext/javafx-media-17.0.14-ea2-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.14-ea2-win.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-media-17.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.7.jar</binary-origin>
<runtime-relative-path>ext/javafx-media-17.0.14-ea2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-media-17.0.14-ea2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-swing-17.0.7-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.7-linux.jar</binary-origin>
<runtime-relative-path>ext/javafx-swing-17.0.14-ea2-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.14-ea2-linux.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-swing-17.0.7-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.7-mac.jar</binary-origin>
<runtime-relative-path>ext/javafx-swing-17.0.14-ea2-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.14-ea2-mac.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-swing-17.0.7-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.7-win.jar</binary-origin>
<runtime-relative-path>ext/javafx-swing-17.0.14-ea2-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.14-ea2-win.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-swing-17.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.7.jar</binary-origin>
<runtime-relative-path>ext/javafx-swing-17.0.14-ea2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-swing-17.0.14-ea2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-web-17.0.7-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.7-linux.jar</binary-origin>
<runtime-relative-path>ext/javafx-web-17.0.14-ea2-linux.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.14-ea2-linux.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-web-17.0.7-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.7-mac.jar</binary-origin>
<runtime-relative-path>ext/javafx-web-17.0.14-ea2-mac.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.14-ea2-mac.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-web-17.0.7-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.7-win.jar</binary-origin>
<runtime-relative-path>ext/javafx-web-17.0.14-ea2-win.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.14-ea2-win.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javafx-web-17.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.7.jar</binary-origin>
<runtime-relative-path>ext/javafx-web-17.0.14-ea2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/javafx-web-17.0.14-ea2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/javax.annotation-api-1.3.2.jar</runtime-relative-path>
@ -1049,8 +1054,8 @@
<binary-origin>release/modules/ext/jna-platform-5.16.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/joda-time-2.10.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/joda-time-2.10.14.jar</binary-origin>
<runtime-relative-path>ext/joda-time-2.13.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/joda-time-2.13.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsr305-3.0.2.jar</runtime-relative-path>
@ -1065,76 +1070,72 @@
<binary-origin>release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/log4j-api-2.17.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/log4j-api-2.17.2.jar</binary-origin>
<runtime-relative-path>ext/log4j-api-2.24.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/log4j-api-2.24.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/log4j-core-2.17.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/log4j-core-2.17.2.jar</binary-origin>
<runtime-relative-path>ext/log4j-core-2.24.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/log4j-core-2.24.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencensus-api-0.31.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencensus-api-0.31.0.jar</binary-origin>
<runtime-relative-path>ext/opencensus-api-0.31.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencensus-api-0.31.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencensus-contrib-http-util-0.31.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencensus-contrib-http-util-0.31.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencensus-proto-0.2.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencensus-proto-0.2.0.jar</binary-origin>
<runtime-relative-path>ext/opencensus-contrib-http-util-0.31.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencensus-contrib-http-util-0.31.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opencv-2413.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opencv-2413.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/perfmark-api-0.23.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/perfmark-api-0.23.0.jar</binary-origin>
<runtime-relative-path>ext/perfmark-api-0.27.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/perfmark-api-0.27.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/proto-google-cloud-translate-v3-2.1.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-cloud-translate-v3-2.1.11.jar</binary-origin>
<runtime-relative-path>ext/proto-google-cloud-translate-v3-2.54.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-cloud-translate-v3-2.54.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/proto-google-cloud-translate-v3beta1-0.83.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-cloud-translate-v3beta1-0.83.11.jar</binary-origin>
<runtime-relative-path>ext/proto-google-cloud-translate-v3beta1-0.136.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-cloud-translate-v3beta1-0.136.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/proto-google-common-protos-2.7.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-common-protos-2.7.4.jar</binary-origin>
<runtime-relative-path>ext/proto-google-common-protos-2.49.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-common-protos-2.49.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/proto-google-iam-v1-1.2.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-iam-v1-1.2.6.jar</binary-origin>
<runtime-relative-path>ext/proto-google-iam-v1-1.44.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/proto-google-iam-v1-1.44.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/protobuf-java-3.19.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/protobuf-java-3.19.4.jar</binary-origin>
<runtime-relative-path>ext/protobuf-java-3.25.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/protobuf-java-3.25.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/protobuf-java-util-3.19.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/protobuf-java-util-3.19.4.jar</binary-origin>
<runtime-relative-path>ext/protobuf-java-util-3.25.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/protobuf-java-util-3.25.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/re2j-1.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/re2j-1.5.jar</binary-origin>
<runtime-relative-path>ext/re2j-1.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/re2j-1.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/reload4j-1.2.19.jar</runtime-relative-path>
<binary-origin>release/modules/ext/reload4j-1.2.19.jar</binary-origin>
<runtime-relative-path>ext/reload4j-1.2.22.jar</runtime-relative-path>
<binary-origin>release/modules/ext/reload4j-1.2.22.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-api-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-api-1.7.36.jar</binary-origin>
<runtime-relative-path>ext/slf4j-api-2.0.16.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-api-2.0.16.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-reload4j-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-reload4j-1.7.36.jar</binary-origin>
<runtime-relative-path>ext/slf4j-reload4j-2.0.16.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-reload4j-2.0.16.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/threetenbp-1.5.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/threetenbp-1.5.2.jar</binary-origin>
<runtime-relative-path>ext/threetenbp-1.7.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/threetenbp-1.7.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/webp-imageio-sejda-0.1.0.jar</runtime-relative-path>

View File

@ -5,9 +5,12 @@
</configurations>
<dependencies >
<dependency conf="coretestlibs->default" org="org.mockito" name="mockito-core" rev="4.8.1"/>
<dependency conf="coretestlibs->default" org="net.bytebuddy" name="byte-buddy" rev="1.12.18"/>
<dependency conf="coretestlibs->default" org="net.bytebuddy" name="byte-buddy-agent" rev="1.12.18"/>
<dependency conf="coretestlibs->default" org="org.objenesis" name="objenesis" rev="3.3"/>
<dependency conf="coretestlibs->default" org="net.bytebuddy" name="byte-buddy" rev="1.15.11"/>
<dependency conf="coretestlibs->default" org="net.bytebuddy" name="byte-buddy-agent" rev="1.15.11"/>
<dependency conf="coretestlibs->default" org="org.objenesis" name="objenesis" rev="3.4"/>
<dependency conf="coretestlibs->default" org="junit" name="junit" rev="4.13.2"/>
<exclude org="*" ext="*" type="javadoc"/>
</dependencies>
</ivy-module>

View File

@ -1,8 +1,8 @@
file.reference.byte-buddy-1.10.13.jar=release/modules/ext/byte-buddy-1.10.13.jar
file.reference.byte-buddy-agent-1.10.13.jar=release/modules/ext/byte-buddy-agent-1.10.13.jar
file.reference.byte-buddy-1.15.11.jar=release/modules/ext/byte-buddy-1.15.11.jar
file.reference.byte-buddy-agent-1.15.11.jar=release/modules/ext/byte-buddy-agent-1.15.11.jar
file.reference.hamcrest-core-1.3.jar=release/modules/ext/hamcrest-core-1.3.jar
file.reference.junit-4.13.2.jar=release/modules/ext/junit-4.13.2.jar
file.reference.mockito-core-4.8.1.jar=release/modules/ext/mockito-core-4.8.1.jar
file.reference.objenesis-3.1.jar=release/modules/ext/objenesis-3.1.jar
javac.source=11
javac.compilerargs=-Xlint -Xlint:-serial
file.reference.objenesis-3.4.jar=release/modules/ext/objenesis-3.4.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17

View File

@ -44,12 +44,12 @@
<package>org.junit.validator</package>
</public-packages>
<class-path-extension>
<runtime-relative-path>ext/byte-buddy-1.12.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/byte-buddy-1.12.18.jar</binary-origin>
<runtime-relative-path>ext/byte-buddy-1.15.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/byte-buddy-1.15.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/byte-buddy-agent-1.12.18.jar</runtime-relative-path>
<binary-origin>release/modules/ext/byte-buddy-agent-1.12.18.jar</binary-origin>
<runtime-relative-path>ext/byte-buddy-agent-1.15.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/byte-buddy-agent-1.15.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/hamcrest-core-1.3.jar</runtime-relative-path>
@ -64,8 +64,8 @@
<binary-origin>release/modules/ext/mockito-core-4.8.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/objenesis-3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/objenesis-3.3.jar</binary-origin>
<runtime-relative-path>ext/objenesis-3.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/objenesis-3.4.jar</binary-origin>
</class-path-extension>
</data>
</configuration>

View File

@ -1,4 +1,4 @@
file.reference.jtidy-r938.jar=release/modules/ext/jtidy-r938.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17
javac.compilerargs=-Xlint -Xlint:-serial
spec.version.base=1.0

View File

@ -105,6 +105,12 @@ final class AutoIngestJob implements Comparable<AutoIngestJob>, IngestProgressSn
* Version 4 fields.
*/
private boolean ocrEnabled;
/**
* Version 5 fields
*/
@GuardedBy("this")
private String password;
/**
* Constructs a new automated ingest job. All job state not specified in the
@ -166,7 +172,7 @@ final class AutoIngestJob implements Comparable<AutoIngestJob>, IngestProgressSn
/*
* Version 0 fields.
*/
this.manifest = new Manifest(nodeData.getManifestFilePath(), nodeData.getManifestFileDate(), nodeData.getCaseName(), nodeData.getDeviceId(), nodeData.getDataSourcePath(), Collections.emptyMap());
this.manifest = new Manifest(nodeData.getManifestFilePath(), nodeData.getManifestFileDate(), nodeData.getCaseName(), nodeData.getDeviceId(), nodeData.getDataSourcePath(), nodeData.getPassword(), Collections.emptyMap());
this.nodeName = nodeData.getProcessingHostName();
this.caseDirectoryPath = nodeData.getCaseDirectoryPath().toString();
this.priority = nodeData.getPriority();
@ -204,6 +210,11 @@ final class AutoIngestJob implements Comparable<AutoIngestJob>, IngestProgressSn
*/
this.ocrEnabled = nodeData.getOcrEnabled();
/**
* Version 5 fields
*/
this.password = nodeData.getPassword();
} catch (Exception ex) {
throw new AutoIngestJobException(String.format("Error creating automated ingest job"), ex);
}
@ -282,6 +293,21 @@ final class AutoIngestJob implements Comparable<AutoIngestJob>, IngestProgressSn
this.ocrEnabled = enabled;
}
/**
* @return The password to decrypt the image.
*/
synchronized String getPassword() {
return password;
}
/**
* @param password The password to decrypt the image.
*/
synchronized void setPassword(String password) {
this.password = password;
}
/**
* Sets the processing stage of the job. The start date/time for the stage
* is set when the stage is set.

View File

@ -24,6 +24,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
import javax.lang.model.type.TypeKind;
import org.apache.commons.lang3.StringUtils;
/**
* An object that converts auto ingest job data for an auto ingest job
@ -31,7 +32,7 @@ import javax.lang.model.type.TypeKind;
*/
final class AutoIngestJobNodeData {
private static final int CURRENT_VERSION = 3;
private static final int CURRENT_VERSION = 4;
private static final int DEFAULT_PRIORITY = 0;
/*
@ -84,6 +85,12 @@ final class AutoIngestJobNodeData {
*/
private boolean ocrEnabled;
/**
* Version 4 fields.
*/
private String password; // password to decrypt the image
/**
* Gets the current version of the auto ingest job coordination service node
* data.
@ -121,6 +128,7 @@ final class AutoIngestJobNodeData {
setProcessingStageDetails(job.getProcessingStageDetails());
setDataSourceSize(job.getDataSourceSize());
setOcrEnabled(job.getOcrEnabled());
setPassword(manifest.getPassword());
}
/**
@ -157,6 +165,7 @@ final class AutoIngestJobNodeData {
this.processingStageDetailsStartDate = 0L;
this.dataSourceSize = 0L;
this.ocrEnabled = false;
this.password = "";
/*
* Get fields from node data.
@ -207,6 +216,13 @@ final class AutoIngestJobNodeData {
int ocrFlag = buffer.getInt();
this.ocrEnabled = (1 == ocrFlag);
}
if (buffer.hasRemaining()) {
/*
* Get version 4 fields.
*/
setPassword(getStringFromBuffer(buffer, TypeKind.SHORT));
}
} catch (BufferUnderflowException ex) {
throw new InvalidDataException("Node data is incomplete", ex);
@ -471,6 +487,22 @@ final class AutoIngestJobNodeData {
}
}
/**
* @return The password to decrypt the image. Empty indicates no password.
*/
public String getPassword() {
return password;
}
/**
* @param password The password to decrypt the image.
*/
public void setPassword(String password) {
this.password = StringUtils.defaultString(password);
}
/**
* Get the processing stage of the job.
*
@ -603,7 +635,11 @@ final class AutoIngestJobNodeData {
if (this.version >= 3) {
buffer.putInt(this.ocrEnabled ? 1 : 0);
}
}
if (this.version >= 4) {
putStringIntoBuffer(this.password, buffer, TypeKind.SHORT);
}
}
// Prepare the array

View File

@ -2573,7 +2573,8 @@ final class AutoIngestManager extends Observable implements PropertyChangeListen
return null;
}
String deviceId = manifest.getDeviceId();
return new AutoIngestDataSource(deviceId, dataSourcePath);
String password = manifest.getPassword();
return new AutoIngestDataSource(deviceId, dataSourcePath, password);
}
/**
@ -2603,7 +2604,7 @@ final class AutoIngestManager extends Observable implements PropertyChangeListen
// Get an ordered list of data source processors to try
List<AutoIngestDataSourceProcessor> validDataSourceProcessors;
try {
validDataSourceProcessors = DataSourceProcessorUtility.getOrderedListOfDataSourceProcessors(dataSource.getPath());
validDataSourceProcessors = DataSourceProcessorUtility.getOrderedListOfDataSourceProcessors(dataSource.getPath(), dataSource.getPassword());
} catch (AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException ex) {
sysLogger.log(Level.SEVERE, "Exception while determining best data source processor for {0}", dataSource.getPath());
// rethrow the exception. It will get caught & handled upstream and will result in AIM auto-pause.
@ -2641,7 +2642,7 @@ final class AutoIngestManager extends Observable implements PropertyChangeListen
jobLogger.logIngestJobSettingsErrors();
throw new AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException("Error(s) in ingest job settings for " + manifestPath);
}
currentIngestStream = selectedProcessor.processWithIngestStream(dataSource.getDeviceId(), dataSource.getPath(), ingestJobSettings, progressMonitor, callBack);
currentIngestStream = selectedProcessor.processWithIngestStream(dataSource.getDeviceId(), dataSource.getPath(), dataSource.getPassword(), null, ingestJobSettings, progressMonitor, callBack);
if (currentIngestStream == null) {
// Either there was a failure to add the data source object to the database or the ingest settings were bad.
// An error in the ingest settings is the more likely scenario.
@ -2651,7 +2652,7 @@ final class AutoIngestManager extends Observable implements PropertyChangeListen
throw new AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException("Error initializing processing for " + manifestPath + ", probably due to an ingest settings error");
}
} else {
selectedProcessor.process(dataSource.getDeviceId(), dataSource.getPath(), progressMonitor, callBack);
selectedProcessor.process(dataSource.getDeviceId(), dataSource.getPath(), dataSource.getPassword(), null, progressMonitor, callBack);
}
ingestLock.wait();

View File

@ -45,6 +45,7 @@ public final class AutopsyManifestFileParser implements ManifestFileParser {
private static final String MANIFEST_FILE_NAME_SIGNATURE = "_MANIFEST.XML";
private static final String ROOT_ELEM_TAG_NAME = "AutopsyManifest";
private static final String CASE_NAME_XPATH = "/AutopsyManifest/CaseName/text()";
private static final String PASSWORD_XPATH = "/AutopsyManifest/Password/text()";
private static final String DEVICE_ID_XPATH = "/AutopsyManifest/DeviceId/text()";
private static final String DATA_SOURCE_NAME_XPATH = "/AutopsyManifest/DataSource/text()";
private static final Logger logger = Logger.getLogger(AutopsyManifestFileParser.class.getName());
@ -102,7 +103,10 @@ public final class AutopsyManifestFileParser implements ManifestFileParser {
}
Path dataSourcePath = filePath.getParent().resolve(dataSourceName);
return new Manifest(filePath, dateFileCreated, caseName, deviceId, dataSourcePath, new HashMap<>());
expr = xpath.compile(PASSWORD_XPATH);
String password = (String) expr.evaluate(doc, XPathConstants.STRING);
return new Manifest(filePath, dateFileCreated, caseName, deviceId, dataSourcePath, password, new HashMap<>());
} catch (Exception ex) {
throw new ManifestFileParserException(String.format("Error parsing manifest %s", filePath), ex);
} finally {

View File

@ -42,9 +42,14 @@ public final class Manifest implements Serializable {
private final String caseName;
private final String deviceId;
private final String dataSourceFileName;
private final String password;
private final Map<String, String> manifestProperties;
public Manifest(Path manifestFilePath, Date dateFileCreated, String caseName, String deviceId, Path dataSourcePath, Map<String, String> manifestProperties) {
this(manifestFilePath, dateFileCreated, caseName, deviceId, dataSourcePath, null, manifestProperties);
}
public Manifest(Path manifestFilePath, Date dateFileCreated, String caseName, String deviceId, Path dataSourcePath, String password, Map<String, String> manifestProperties) {
this.filePathString = manifestFilePath.toString();
this.filePath = Paths.get(filePathString);
@ -60,6 +65,7 @@ public final class Manifest implements Serializable {
this.dataSourcePath = Paths.get("");
dataSourceFileName = "";
}
this.password = password;
this.manifestProperties = new HashMap<>(manifestProperties);
}
@ -91,6 +97,13 @@ public final class Manifest implements Serializable {
return dataSourcePath;
}
/**
* @return The password to decrypt the data source (may be null).
*/
public String getPassword() {
return password;
}
public String getDataSourceFileName() {
return dataSourceFileName;
}

View File

@ -17,45 +17,53 @@
<!-- Solr -->
<dependency conf="solr-war->default" org="org.apache.solr" name="solr" rev="4.10.4" transitive="false" /> <!-- the war file for embedded Solr 4 -->
<dependency conf="solr-libs->default" name="solr-cell" rev="8.11.2" org="org.apache.solr"/>
<dependency conf="solr-libs->default" org="org.apache.solr" name="solr-cell" rev="${solr.version}"/>
<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-core -->
<dependency conf="autopsy->default" org="org.apache.lucene" name="lucene-core" rev="8.11.2"/>
<dependency conf="autopsy->default" org="org.apache.lucene" name="lucene-core" rev="${solr.version}"/>
<!-- Autopsy -->
<dependency conf="autopsy->default" org="org.apache.solr" name="solr-solrj" rev="8.11.2"/>
<dependency conf="autopsy->default" org="org.apache.solr" name="solr-solrj" rev="${solr.version}"/>
<dependency conf="autopsy->default" org="com.optimaize.languagedetector" name="language-detector" rev="0.6"/>
<!-- <dependency conf="autopsy->default" org="org.apache.cxf" name="cxf-rt-rs-client" rev="3.5.1"/> -->
<!-- <dependency conf="autopsy->default" org="org.cleartk" name="cleartk-ml" rev="2.0.0"/> -->
<!-- icu4j for pdfbox bidirectional text support, needs to be defined explicitely (it is optional) -->
<dependency conf="autopsy->default" org="com.ibm.icu" name="icu4j" rev="70.1"/>
<dependency conf="autopsy->default" org="com.ibm.icu" name="icu4j" rev="76.1"/>
<dependency conf="autopsy->default" org="junit" name="junit" rev="4.13.2"/>
<dependency conf="autopsy->default" org="org.eclipse.jetty.http2" name="http2-client" rev="${http2-client.version}"/>
<!-- Jetty -->
<dependency conf="start-solr->default" org="org.eclipse.jetty" name="jetty-start" rev="11.0.15"/>
<dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-server" rev="11.0.15"/>
<dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-deploy" rev="11.0.15"/>
<dependency conf="servlet->default" org="org.eclipse.jetty.orbit" name="javax.servlet" rev="3.0.0.v201112011016"/>
<dependency conf="start-solr->default" org="org.eclipse.jetty" name="jetty-start" rev="${jetty.version}"/>
<dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-server" rev="${jetty.version}"/>
<dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-deploy" rev="${jetty.version}"/>
<dependency conf="servlet->default" org="jakarta.servlet" name="jakarta.servlet-api" rev="6.1.0"/>
<!-- logging -->
<dependency conf="slf4j-libs->default" org="org.slf4j" name="slf4j-log4j12" rev="1.7.36"/>
<dependency conf="slf4j-libs->default" org="org.slf4j" name="jcl-over-slf4j" rev="1.7.36"/>
<dependency conf="slf4j-libs->default" org="org.slf4j" name="jul-to-slf4j" rev="1.7.36"/>
<dependency conf="slf4j-libs->default" org="org.slf4j" name="slf4j-log4j12" rev="${slf4j.version}"/>
<dependency conf="slf4j-libs->default" org="org.slf4j" name="jcl-over-slf4j" rev="${slf4j.version}"/>
<dependency conf="slf4j-libs->default" org="org.slf4j" name="jul-to-slf4j" rev="${slf4j.version}"/>
<exclude org="*" ext="*" type="javadoc"/>
<exclude org="" ext="*" type="javadoc"/>
<override org="commons-io" module="commons-io" rev="2.18.0"/>
<override org="com.google.guava" module="guava" rev="33.4.0-jre"/>
<override org="org.apache.logging.log4j" module="log4j-api" rev="2.17.2"/>
<override org="org.apache.logging.log4j" module="log4j-core" rev="2.17.2"/>
<override org="org.apache.logging.log4j" module="log4j-1.2-api" rev="2.17.2"/>
<override org="org.apache.logging.log4j" module="log4j-layout-template-json" rev="2.17.2"/>
<override org="org.apache.logging.log4j" module="log4j-slf4j-impl" rev="2.17.2"/>
<override org="org.apache.logging.log4j" module="log4j-web" rev="2.17.2"/>
<override org="org.slf4j" module="slf4j-api" rev="1.7.36"/>
<override org="org.apache.logging.log4j" module="log4j-api" rev="${log4j.version}"/>
<override org="org.apache.logging.log4j" module="log4j-core" rev="${log4j.version}"/>
<override org="org.apache.logging.log4j" module="log4j-1.2-api" rev="${log4j.version}"/>
<override org="org.apache.logging.log4j" module="log4j-layout-template-json" rev="${log4j.version}"/>
<override org="org.apache.logging.log4j" module="log4j-slf4j-impl" rev="${log4j.version}"/>
<override org="org.apache.logging.log4j" module="log4j-web" rev="${log4j.version}"/>
<override org="org.eclipse.jetty.http2" module="http2-client" rev="${http2-client.version}"/>
<override org="org.apache.zookeeper" module="zookeeper" rev="3.8.0"/>
<override org="org.apache.zookeeper" module="zookeeper-jute" rev="3.8.0"/>
<override org="com.google.code.gson" module="gson" rev="2.9.0"/>
<override org="com.google.guava" module="guava" rev="31.1-jre"/>
<override org="joda-time" module="joda-time" rev="2.10.14" />
<override org="org.xerial.snappy" module="snappy-java" rev="1.1.10.7"/>
<override org="io.netty" module="netty-transport" rev="${netty.version}"/>
<override org="io.netty" module="netty-common" rev="${netty.version}"/>
<override org="io.netty" module="netty-transport-native-epoll" rev="${netty.version}"/>
<override org="io.netty" module="netty-transport-classes-epoll" rev="${netty.version}"/>
<override org="org.apache.zookeeper" module="zookeeper" rev="${zookeeper.version}"/>
<override org="org.apache.zookeeper" module="zookeeper-jute" rev="${zookeeper.version}"/>
</dependencies>
</ivy-module>

View File

@ -1,4 +1,12 @@
<ivysettings>
<property name="http2-client.version" value="11.0.24"/>
<property name="jetty.version" value="12.0.16"/>
<property name="log4j.version" value="2.24.3"/>
<property name="netty.version" value="4.1.116.Final"/>
<property name="slf4j.version" value="2.0.16"/>
<property name="solr.version" value="8.11.4"/>
<property name="zookeeper.version" value="3.9.3"/>
<settings defaultResolver="main"/>
<resolvers>
<chain name="main">

View File

@ -1,51 +1,55 @@
file.reference.annotations-12.0.jar=release/modules/ext/annotations-12.0.jar
file.reference.commons-io-2.8.0.jar=release/modules/ext/commons-io-2.8.0.jar
file.reference.checker-qual-3.43.0.jar=release/modules/ext/checker-qual-3.43.0.jar
file.reference.commons-io-2.18.0.jar=release/modules/ext/commons-io-2.18.0.jar
file.reference.commons-lang-2.6.jar=release/modules/ext/commons-lang-2.6.jar
file.reference.commons-math3-3.6.1.jar=release/modules/ext/commons-math3-3.6.1.jar
file.reference.guava-31.1-jre.jar=release/modules/ext/guava-31.1-jre.jar
file.reference.error_prone_annotations-2.36.0.jar=release/modules/ext/error_prone_annotations-2.36.0.jar
file.reference.failureaccess-1.0.2.jar=release/modules/ext/failureaccess-1.0.2.jar
file.reference.guava-33.4.0-jre.jar=release/modules/ext/guava-33.4.0-jre.jar
file.reference.hamcrest-core-1.3.jar=release/modules/ext/hamcrest-core-1.3.jar
file.reference.http2-client-9.4.44.v20210927.jar=release/modules/ext/http2-client-9.4.44.v20210927.jar
file.reference.http2-common-9.4.44.v20210927.jar=release/modules/ext/http2-common-9.4.44.v20210927.jar
file.reference.http2-hpack-9.4.44.v20210927.jar=release/modules/ext/http2-hpack-9.4.44.v20210927.jar
file.reference.http2-http-client-transport-9.4.44.v20210927.jar=release/modules/ext/http2-http-client-transport-9.4.44.v20210927.jar
file.reference.http2-client-11.0.24.jar=release/modules/ext/http2-client-11.0.24.jar
file.reference.http2-common-9.4.53.v20231009.jar=release/modules/ext/http2-common-9.4.53.v20231009.jar
file.reference.http2-hpack-9.4.53.v20231009.jar=release/modules/ext/http2-hpack-9.4.53.v20231009.jar
file.reference.http2-http-client-transport-9.4.53.v20231009.jar=release/modules/ext/http2-http-client-transport-9.4.53.v20231009.jar
file.reference.httpclient-4.5.13.jar=release/modules/ext/httpclient-4.5.13.jar
file.reference.httpcore-4.4.14.jar=release/modules/ext/httpcore-4.4.14.jar
file.reference.httpmime-4.5.13.jar=release/modules/ext/httpmime-4.5.13.jar
file.reference.icu4j-70.1.jar=release/modules/ext/icu4j-70.1.jar
file.reference.jcl-over-slf4j-1.7.24.jar=release/modules/ext/jcl-over-slf4j-1.7.24.jar
file.reference.jetty-alpn-client-9.4.44.v20210927.jar=release/modules/ext/jetty-alpn-client-9.4.44.v20210927.jar
file.reference.jetty-alpn-java-client-9.4.44.v20210927.jar=release/modules/ext/jetty-alpn-java-client-9.4.44.v20210927.jar
file.reference.jetty-alpn-openjdk8-client-9.4.44.v20210927.jar=release/modules/ext/jetty-alpn-openjdk8-client-9.4.44.v20210927.jar
file.reference.jetty-client-9.4.44.v20210927.jar=release/modules/ext/jetty-client-9.4.44.v20210927.jar
file.reference.jetty-http-9.4.44.v20210927.jar=release/modules/ext/jetty-http-9.4.44.v20210927.jar
file.reference.jetty-io-9.4.44.v20210927.jar=release/modules/ext/jetty-io-9.4.44.v20210927.jar
file.reference.jetty-util-9.4.44.v20210927.jar=release/modules/ext/jetty-util-9.4.44.v20210927.jar
file.reference.icu4j-76.1.jar=release/modules/ext/icu4j-76.1.jar
file.reference.j2objc-annotations-3.0.0.jar=release/modules/ext/j2objc-annotations-3.0.0.jar
file.reference.jcl-over-slf4j-1.7.36.jar=release/modules/ext/jcl-over-slf4j-1.7.36.jar
file.reference.jetty-alpn-client-9.4.53.v20231009.jar=release/modules/ext/jetty-alpn-client-9.4.53.v20231009.jar
file.reference.jetty-alpn-java-client-9.4.53.v20231009.jar=release/modules/ext/jetty-alpn-java-client-9.4.53.v20231009.jar
file.reference.jetty-client-9.4.53.v20231009.jar=release/modules/ext/jetty-client-9.4.53.v20231009.jar
file.reference.jetty-http-9.4.53.v20231009.jar=release/modules/ext/jetty-http-9.4.53.v20231009.jar
file.reference.jetty-io-9.4.53.v20231009.jar=release/modules/ext/jetty-io-9.4.53.v20231009.jar
file.reference.jetty-util-9.4.53.v20231009.jar=release/modules/ext/jetty-util-9.4.53.v20231009.jar
file.reference.jsonic-1.2.11.jar=release/modules/ext/jsonic-1.2.11.jar
file.reference.jsr305-3.0.2.jar=release/modules/ext/jsr305-3.0.2.jar
file.reference.junit-4.13.2.jar=release/modules/ext/junit-4.13.2.jar
file.reference.language-detector-0.6.jar=release/modules/ext/language-detector-0.6.jar
file.reference.logback-classic-1.2.10.jar=release/modules/ext/logback-classic-1.2.10.jar
file.reference.logback-core-1.2.10.jar=release/modules/ext/logback-core-1.2.10.jar
file.reference.lucene-core-8.11.2.jar=release/modules/ext/lucene-core-8.11.2.jar
file.reference.netty-buffer-4.1.68.Final.jar=release/modules/ext/netty-buffer-4.1.68.Final.jar
file.reference.netty-codec-4.1.68.Final.jar=release/modules/ext/netty-codec-4.1.68.Final.jar
file.reference.netty-common-4.1.68.Final.jar=release/modules/ext/netty-common-4.1.68.Final.jar
file.reference.netty-handler-4.1.68.Final.jar=release/modules/ext/netty-handler-4.1.68.Final.jar
file.reference.netty-resolver-4.1.68.Final.jar=release/modules/ext/netty-resolver-4.1.68.Final.jar
file.reference.netty-tcnative-2.0.48.Final.jar=release/modules/ext/netty-tcnative-2.0.48.Final.jar
file.reference.netty-tcnative-classes-2.0.48.Final.jar=release/modules/ext/netty-tcnative-classes-2.0.48.Final.jar
file.reference.netty-transport-4.1.68.Final.jar=release/modules/ext/netty-transport-4.1.68.Final.jar
file.reference.netty-transport-native-epoll-4.1.68.Final.jar=release/modules/ext/netty-transport-native-epoll-4.1.68.Final.jar
file.reference.netty-transport-native-unix-common-4.1.68.Final.jar=release/modules/ext/netty-transport-native-unix-common-4.1.68.Final.jar
file.reference.listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar=release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
file.reference.lucene-core-8.11.4.jar=release/modules/ext/lucene-core-8.11.4.jar
file.reference.netty-buffer-4.1.99.Final.jar=release/modules/ext/netty-buffer-4.1.99.Final.jar
file.reference.netty-codec-4.1.99.Final.jar=release/modules/ext/netty-codec-4.1.99.Final.jar
file.reference.netty-common-4.1.116.Final.jar=release/modules/ext/netty-common-4.1.116.Final.jar
file.reference.netty-handler-4.1.99.Final.jar=release/modules/ext/netty-handler-4.1.99.Final.jar
file.reference.netty-resolver-4.1.99.Final.jar=release/modules/ext/netty-resolver-4.1.99.Final.jar
file.reference.netty-tcnative-boringssl-static-2.0.66.Final.jar=release/modules/ext/netty-tcnative-boringssl-static-2.0.66.Final.jar
file.reference.netty-tcnative-classes-2.0.66.Final.jar=release/modules/ext/netty-tcnative-classes-2.0.66.Final.jar
file.reference.netty-transport-4.1.116.Final.jar=release/modules/ext/netty-transport-4.1.116.Final.jar
file.reference.netty-transport-classes-epoll-4.1.116.Final.jar=release/modules/ext/netty-transport-classes-epoll-4.1.116.Final.jar
file.reference.netty-transport-native-epoll-4.1.116.Final.jar=release/modules/ext/netty-transport-native-epoll-4.1.116.Final.jar
file.reference.netty-transport-native-unix-common-4.1.99.Final.jar=release/modules/ext/netty-transport-native-unix-common-4.1.99.Final.jar
file.reference.slf4j-api-1.7.36.jar=release/modules/ext/slf4j-api-1.7.36.jar
file.reference.snappy-java-1.1.7.6.jar=release/modules/ext/snappy-java-1.1.7.6.jar
file.reference.solr-solrj-8.11.2.jar=release/modules/ext/solr-solrj-8.11.2.jar
file.reference.snappy-java-1.1.10.7.jar=release/modules/ext/snappy-java-1.1.10.7.jar
file.reference.solr-solrj-8.11.4.jar=release/modules/ext/solr-solrj-8.11.4.jar
file.reference.stax2-api-4.2.1.jar=release/modules/ext/stax2-api-4.2.1.jar
file.reference.woodstox-core-6.2.4.jar=release/modules/ext/woodstox-core-6.2.4.jar
file.reference.zookeeper-3.8.0.jar=release/modules/ext/zookeeper-3.8.0.jar
file.reference.zookeeper-jute-3.8.0.jar=release/modules/ext/zookeeper-jute-3.8.0.jar
file.reference.woodstox-core-6.5.1.jar=release/modules/ext/woodstox-core-6.5.1.jar
file.reference.zookeeper-3.9.3.jar=release/modules/ext/zookeeper-3.9.3.jar
file.reference.zookeeper-jute-3.9.3.jar=release/modules/ext/zookeeper-jute-3.9.3.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17
javac.compilerargs=-Xlint -Xlint:-serial
license.file=../LICENSE-2.0.txt
nbm.homepage=http://www.sleuthkit.org/autopsy/
nbm.homepage=http\://www.sleuthkit.org/autopsy/
nbm.needs.restart=true
spec.version.base=6.7

View File

@ -239,8 +239,12 @@
<binary-origin>release/modules/ext/annotations-12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-io-2.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.8.0.jar</binary-origin>
<runtime-relative-path>ext/checker-qual-3.43.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/checker-qual-3.43.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-io-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.18.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-lang-2.6.jar</runtime-relative-path>
@ -251,28 +255,36 @@
<binary-origin>release/modules/ext/commons-math3-3.6.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/guava-31.1-jre.jar</runtime-relative-path>
<binary-origin>release/modules/ext/guava-31.1-jre.jar</binary-origin>
<runtime-relative-path>ext/error_prone_annotations-2.36.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/error_prone_annotations-2.36.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/failureaccess-1.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/failureaccess-1.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/guava-33.4.0-jre.jar</runtime-relative-path>
<binary-origin>release/modules/ext/guava-33.4.0-jre.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/hamcrest-core-1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/hamcrest-core-1.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/http2-client-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-client-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/http2-client-11.0.24.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-client-11.0.24.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/http2-common-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-common-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/http2-common-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-common-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/http2-hpack-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-hpack-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/http2-hpack-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-hpack-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/http2-http-client-transport-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-http-client-transport-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/http2-http-client-transport-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/http2-http-client-transport-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpclient-4.5.13.jar</runtime-relative-path>
@ -287,45 +299,49 @@
<binary-origin>release/modules/ext/httpmime-4.5.13.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/icu4j-70.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/icu4j-70.1.jar</binary-origin>
<runtime-relative-path>ext/icu4j-76.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/icu4j-76.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jcl-over-slf4j-1.7.24.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jcl-over-slf4j-1.7.24.jar</binary-origin>
<runtime-relative-path>ext/j2objc-annotations-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/j2objc-annotations-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jetty-alpn-client-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-alpn-client-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/jcl-over-slf4j-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jcl-over-slf4j-1.7.36.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jetty-alpn-java-client-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-alpn-java-client-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/jetty-alpn-client-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-alpn-client-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jetty-alpn-openjdk8-client-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-alpn-openjdk8-client-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/jetty-alpn-java-client-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-alpn-java-client-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jetty-client-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-client-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/jetty-client-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-client-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jetty-http-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-http-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/jetty-http-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-http-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jetty-io-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-io-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/jetty-io-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-io-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jetty-util-9.4.44.v20210927.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-util-9.4.44.v20210927.jar</binary-origin>
<runtime-relative-path>ext/jetty-util-9.4.53.v20231009.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jetty-util-9.4.53.v20231009.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsonic-1.2.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jsonic-1.2.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsr305-3.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jsr305-3.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/junit-4.13.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/junit-4.13.2.jar</binary-origin>
@ -335,84 +351,84 @@
<binary-origin>release/modules/ext/language-detector-0.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/logback-classic-1.2.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/logback-classic-1.2.10.jar</binary-origin>
<runtime-relative-path>ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</runtime-relative-path>
<binary-origin>release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/logback-core-1.2.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/logback-core-1.2.10.jar</binary-origin>
<runtime-relative-path>ext/lucene-core-8.11.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/lucene-core-8.11.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/lucene-core-8.11.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/lucene-core-8.11.2.jar</binary-origin>
<runtime-relative-path>ext/netty-buffer-4.1.99.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-buffer-4.1.99.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-buffer-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-buffer-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-codec-4.1.99.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-codec-4.1.99.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-codec-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-codec-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-common-4.1.116.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-common-4.1.116.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-common-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-common-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-handler-4.1.99.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-handler-4.1.99.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-handler-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-handler-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-resolver-4.1.99.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-resolver-4.1.99.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-resolver-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-resolver-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-tcnative-boringssl-static-2.0.66.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-boringssl-static-2.0.66.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-tcnative-2.0.48.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-2.0.48.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-tcnative-classes-2.0.66.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-classes-2.0.66.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-tcnative-classes-2.0.48.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-tcnative-classes-2.0.48.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-4.1.116.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-4.1.116.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-transport-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-classes-epoll-4.1.116.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-classes-epoll-4.1.116.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-transport-native-epoll-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-epoll-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-native-epoll-4.1.116.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-epoll-4.1.116.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netty-transport-native-unix-common-4.1.68.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-unix-common-4.1.68.Final.jar</binary-origin>
<runtime-relative-path>ext/netty-transport-native-unix-common-4.1.99.Final.jar</runtime-relative-path>
<binary-origin>release/modules/ext/netty-transport-native-unix-common-4.1.99.Final.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-api-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-api-1.7.36.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/snappy-java-1.1.7.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/snappy-java-1.1.7.6.jar</binary-origin>
<runtime-relative-path>ext/snappy-java-1.1.10.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/snappy-java-1.1.10.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/solr-solrj-8.11.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/solr-solrj-8.11.2.jar</binary-origin>
<runtime-relative-path>ext/solr-solrj-8.11.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/solr-solrj-8.11.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/stax2-api-4.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/stax2-api-4.2.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/woodstox-core-6.2.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/woodstox-core-6.2.4.jar</binary-origin>
<runtime-relative-path>ext/woodstox-core-6.5.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/woodstox-core-6.5.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/zookeeper-3.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-3.8.0.jar</binary-origin>
<runtime-relative-path>ext/zookeeper-3.9.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-3.9.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/zookeeper-jute-3.8.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-jute-3.8.0.jar</binary-origin>
<runtime-relative-path>ext/zookeeper-jute-3.9.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/zookeeper-jute-3.9.3.jar</binary-origin>
</class-path-extension>
</data>
</configuration>

View File

@ -146,7 +146,7 @@ grant {
permission java.security.SecurityPermission "putProviderProperty.SaslPlainServer";
permission java.security.SecurityPermission "insertProvider";
permission javax.xml.bind.JAXBPermission "setDatatypeConverter";
permission jakarta.xml.bind.JAXBPermission "setDatatypeConverter";
// SSL related properties for Solr tests
permission javax.net.ssl.SSLPermission "setDefaultSSLContext";

View File

@ -19,7 +19,6 @@
package org.sleuthkit.autopsy.keywordsearch;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.CharSource;
import java.io.IOException;
@ -33,10 +32,26 @@ import java.util.HashMap;
import java.util.List;
import static java.util.Locale.US;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
import org.apache.tika.metadata.DublinCore;
import org.apache.tika.metadata.FileSystem;
import org.apache.tika.metadata.IPTC;
import org.apache.tika.metadata.Office;
import org.apache.tika.metadata.OfficeOpenXMLCore;
import org.apache.tika.metadata.OfficeOpenXMLExtended;
import org.apache.tika.metadata.PDF;
import org.apache.tika.metadata.Photoshop;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.metadata.XMP;
import org.apache.tika.metadata.XMPDM;
import org.apache.tika.mime.MimeTypes;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
@ -130,24 +145,69 @@ public final class KeywordSearchIngestModule implements FileIngestModule {
"application/x-z", //NON-NLS
"application/x-compress"); //NON-NLS
private static final List<String> METADATA_DATE_TYPES
= ImmutableList.of(
"Last-Save-Date", //NON-NLS
"Last-Printed", //NON-NLS
"Creation-Date"); //NON-NLS
private static final Map<String, BlackboardAttribute.ATTRIBUTE_TYPE> METADATA_TYPES_MAP = ImmutableMap.<String, BlackboardAttribute.ATTRIBUTE_TYPE>builder()
.put("Last-Save-Date", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_MODIFIED)
.put("Last-Author", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_USER_ID)
.put("Creation-Date", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_CREATED)
.put("Company", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ORGANIZATION)
.put("Author", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_OWNER)
.put("Application-Name", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME)
.put("Last-Printed", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_LAST_PRINTED_DATETIME)
.put("Producer", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME)
.put("Title", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DESCRIPTION)
.put("pdf:PDFVersion", BlackboardAttribute.ATTRIBUTE_TYPE.TSK_VERSION)
.build();
private static final Map<String, Pair<BlackboardAttribute.ATTRIBUTE_TYPE, Integer>> METADATA_TYPES_MAP = Stream.of(
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_MODIFIED, List.of(
"Last-Save-Date",
TikaCoreProperties.MODIFIED.getName(),
FileSystem.MODIFIED.getName(),
DublinCore.MODIFIED.getName(),
PDF.DOC_INFO_MODIFICATION_DATE.getName(),
PDF.PDFVT_MODIFIED.getName(),
XMP.MODIFY_DATE.getName(),
XMPDM.AUDIO_MOD_DATE.getName(),
XMPDM.METADATA_MOD_DATE.getName(),
XMPDM.VIDEO_MOD_DATE.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_USER_ID, List.of(
"Last-Author",
Office.LAST_AUTHOR.getName(),
TikaCoreProperties.MODIFIER.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_CREATED, List.of(
"Creation-Date",
TikaCoreProperties.CREATED.getName(),
FileSystem.CREATED.getName(),
DublinCore.CREATED.getName(),
IPTC.DATE_CREATED.getName(),
Office.CREATION_DATE.getName(),
PDF.DOC_INFO_CREATED.getName(),
Photoshop.DATE_CREATED.getName(),
XMP.CREATE_DATE.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ORGANIZATION, List.of(
"Company",
DublinCore.PUBLISHER.getName(),
IPTC.ORGANISATION_NAME.getName(),
OfficeOpenXMLExtended.COMPANY.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_OWNER, List.of(
"Author",
TikaCoreProperties.CREATOR.getName(),
DublinCore.CREATOR.getName(),
Office.INITIAL_AUTHOR.getName(),
Office.AUTHOR.getName(),
Photoshop.AUTHORS_POSITION.getName(),
PDF.DOC_INFO_CREATOR.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME, List.of(
"Application-Name",
"Producer",
OfficeOpenXMLExtended.APPLICATION.getName(),
org.apache.tika.metadata.RTFMetadata.EMB_APP_VERSION.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_LAST_PRINTED_DATETIME, List.of(
"Last-Printed",
OfficeOpenXMLCore.LAST_PRINTED.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DESCRIPTION, List.of(
"Title",
DublinCore.TITLE.getName(),
IPTC.TITLE.getName(),
PDF.DOC_INFO_TITLE.getName())),
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_VERSION, List.of(
PDF.PDF_VERSION.getName(),
OfficeOpenXMLCore.VERSION.getName())))
.flatMap(pr -> {
BlackboardAttribute.ATTRIBUTE_TYPE attrType = pr.getKey();
List<String> keys = pr.getValue();
return IntStream.range(0, keys.size())
.mapToObj(idx -> Triple.of(keys.get(idx), attrType, idx));
})
.collect(Collectors.toMap(Triple::getLeft, trip -> Pair.of(trip.getMiddle(), trip.getRight()), (v1, v2) -> v1.getRight() < v2.getRight() ? v1 : v2));
private static final String IMAGE_MIME_TYPE_PREFIX = "image/";
@ -624,14 +684,28 @@ public final class KeywordSearchIngestModule implements FileIngestModule {
Collection<BlackboardAttribute> attributes = new ArrayList<>();
Collection<BlackboardArtifact> bbartifacts = new ArrayList<>();
/**
* Get best matched metadata for each attribute type found in metadata map.
*/
Map<BlackboardAttribute.ATTRIBUTE_TYPE, Pair<Integer, String>> intermediateMapping = new HashMap<>();
for (Map.Entry<String, String> entry : metadata.entrySet()) {
if (METADATA_TYPES_MAP.containsKey(entry.getKey())) {
BlackboardAttribute bba = checkAttribute(entry.getKey(), entry.getValue());
if (bba != null) {
attributes.add(bba);
}
Pair<BlackboardAttribute.ATTRIBUTE_TYPE, Integer> attrPair = METADATA_TYPES_MAP.get(entry.getKey());
if (attrPair != null) {
intermediateMapping.compute(attrPair.getKey(), (k, v) -> {
if (v == null || v.getKey() > attrPair.getValue()) {
return Pair.of(attrPair.getValue(), entry.getValue());
} else {
return v;
}
});
}
}
for (Entry<BlackboardAttribute.ATTRIBUTE_TYPE, Pair<Integer, String>> interEntry: intermediateMapping.entrySet()) {
attributes.add(checkAttribute(interEntry.getKey(), interEntry.getValue().getValue()));
}
if (!attributes.isEmpty()) {
try {
BlackboardArtifact bbart = aFile.newDataArtifact(new BlackboardArtifact.Type(BlackboardArtifact.ARTIFACT_TYPE.TSK_METADATA), attributes);
@ -653,24 +727,31 @@ public final class KeywordSearchIngestModule implements FileIngestModule {
}
}
private BlackboardAttribute checkAttribute(String key, String value) {
/**
* Create a metadata blackboard attribute based on specified content.
* @param attrType The attribute type.
* @param key The key for the attribute.
* @param value The value of the attribute.
* @return
*/
private BlackboardAttribute checkAttribute(BlackboardAttribute.ATTRIBUTE_TYPE attrType, String value) {
String moduleName = KeywordSearchIngestModule.class.getName();
if (!value.isEmpty() && value.charAt(0) != ' ') {
if (METADATA_DATE_TYPES.contains(key)) {
if (attrType != null && !value.isEmpty() && value.charAt(0) != ' ') {
if (attrType.getValueType() == BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.DATETIME) {
SimpleDateFormat metadataDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", US);
Long metadataDateTime = Long.valueOf(0);
try {
String metadataDate = value.replaceAll("T", " ").replaceAll("Z", "");
Date usedDate = metadataDateFormat.parse(metadataDate);
metadataDateTime = usedDate.getTime() / 1000;
return new BlackboardAttribute(METADATA_TYPES_MAP.get(key), moduleName, metadataDateTime);
return new BlackboardAttribute(attrType, moduleName, metadataDateTime);
} catch (ParseException ex) {
// catching error and displaying date that could not be parsed then will continue on.
logger.log(Level.WARNING, String.format("Failed to parse date/time %s for metadata attribute %s.", value, key), ex); //NON-NLS
logger.log(Level.WARNING, String.format("Failed to parse date/time %s for metadata attribute %s.", value, attrType == null ? "<null>" : attrType.name()), ex); //NON-NLS
return null;
}
} else {
return new BlackboardAttribute(METADATA_TYPES_MAP.get(key), moduleName, value);
return new BlackboardAttribute(attrType, moduleName, value);
}
}

View File

@ -395,7 +395,6 @@ public class Server {
CloudSolrClient client = new CloudSolrClient.Builder(solrUrls)
.withConnectionTimeout(connectionTimeoutMs)
.withSocketTimeout(connectionTimeoutMs)
.withResponseParser(new XMLResponseParser())
.build();
if (!defaultCollectionName.isEmpty()) {
client.setDefaultCollection(defaultCollectionName);

View File

@ -46,6 +46,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.imageio.ImageIO;
import javax.swing.JDialog;
import javax.swing.SwingUtilities;
import javax.swing.text.JTextComponent;
import javax.swing.tree.TreePath;
import org.apache.commons.io.IOUtils;
@ -64,7 +65,6 @@ import org.netbeans.jemmy.operators.JCheckBoxOperator;
import org.netbeans.jemmy.operators.JComboBoxOperator;
import org.netbeans.jemmy.operators.JDialogOperator;
import org.netbeans.jemmy.operators.JFileChooserOperator;
import org.netbeans.jemmy.operators.JLabelOperator;
import org.netbeans.jemmy.operators.JListOperator;
import org.netbeans.jemmy.operators.JTabbedPaneOperator;
import org.netbeans.jemmy.operators.JTableOperator;
@ -177,13 +177,23 @@ public class AutopsyTestCases {
JToggleButtonOperator jtbo = new JToggleButtonOperator(wo, 0);
jtbo.clickMouse();
wo.btNext().clickMouse();
new Timeout("pausing", 5000).sleep();
JTextFieldOperator jtfo0 = new JTextFieldOperator(wo, 0);
String img_path = getEscapedPath(System.getProperty("img_path"));
String imageDir = img_path;
logger.log(Level.INFO, "setting image path to " + imageDir);
((JTextComponent) jtfo0.getSource()).setText(imageDir);
new Timeout("pausing", 5000).sleep();
JComboBoxOperator comboBoxOperator = new JComboBoxOperator(wo, 0);
logger.log(Level.INFO, "setting time zone");
comboBoxOperator.setSelectedItem("(GMT-5:00) America/New_York");
wo.btNext().clickMouse();
// do in invoke later to allow time for validation to happen.
new Thread(() -> {
new Timeout("pausing", 5000).sleep();
logger.log(Level.INFO, "clicking next button");
wo.btNext().clickMouse();
}).start();
new Timeout("pausing", 8000).sleep();
} catch (TimeoutExpiredException ex) {
logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex);
logSystemDiagnostics();

View File

@ -4,21 +4,27 @@
<conf name="tika"/>
</configurations>
<dependencies >
<dependency conf="tika->default" org="org.apache.tika" name="tika-parsers" rev="1.28.1"/>
<dependency conf="tika->default" org="org.apache.tika" name="tika-parsers-standard-package" rev="${tika.version}"/>
<dependency conf="tika->default" org="org.apache.tika" name="tika-parser-scientific-package" rev="${tika.version}"/>
<dependency conf="tika->default" org="org.apache.tika" name="tika-parser-sqlite3-package" rev="${tika.version}"/>
<dependency conf="tika->default" org="org.apache.tika" name="tika-parser-advancedmedia-package" rev="${tika.version}"/>
<dependency conf="tika->default" org="org.apache.tika" name="tika-core" rev="${tika.version}"/>
<dependency conf="tika->default" org="org.apache.poi" name="ooxml-schemas" rev="1.4"/>
<override org="org.jsoup" module="jsoup" rev="1.16.1"/>
<override org="org.apache.poi" module="poi-ooxml-schemas" rev="4.1.2"/>
<override org="org.slf4j" module="slf4j-api" rev="1.7.36"/>
<override org="com.google.code.gson" module="gson" rev="2.9.0"/>
<override org="com.google.guava" module="guava" rev="32.0.1-jre"/>
<override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/>
<override org="com.fasterxml.jackson.core" module="jackson-databind" rev="2.15.2"/>
<override org="com.fasterxml.jackson.core" module="jackson-annotations" rev="2.15.2"/>
<!-- changes to bouncy castle version may also be reflected in thirdparty/IcePDF 6.2.2 -->
<override org="org.bouncycastle" module="bcmail-jdk15on" rev="1.70"/>
<override org="org.bouncycastle" module="bcprov-jdk15on" rev="1.70"/>
<override org="org.bouncycastle" module="bcpkix-jdk15on" rev="1.70"/>
<dependency conf="tika->default" org="org.bouncycastle" name="bcprov-jdk18on" rev="${bouncycastle.version}"/>
<dependency conf="tika->default" org="org.bouncycastle" name="bcpkix-jdk18on" rev="${bouncycastle.version}"/>
<exclude org="org.bouncycastle" module="bcprov-jdk15on"/>
<exclude org="org.bouncycastle" module="bcpkix-jdk15on"/>
<exclude org="*" ext="*" type="javadoc"/>
<exclude org="*" ext="*" type="tests" />
<override org="org.bouncycastle" module="bcprov-jdk18on" rev="${bouncycastle.version}"/>
<override org="org.bouncycastle" module="bcpkix-jdk18on" rev="${bouncycastle.version}"/>
<override org="com.google.guava" module="guava" rev="33.4.0-jre"/>
<override org="org.apache.logging.log4j" module="log4j-api" rev="${log4j.version}"/>
</dependencies>
</ivy-module>

View File

@ -1,5 +1,9 @@
<ivysettings>
<settings defaultResolver="main"/>
<property name="log4j.version" value="2.24.3"/>
<property name="bouncycastle.version" value="1.79"/>
<property name="tika.version" value="3.0.0"/>
<resolvers>
<chain name="main">
<ibiblio name="central" root="https://repo1.maven.org/maven2" m2compatible="true"/>

View File

@ -1,120 +1,122 @@
file.reference.apache-mime4j-core-0.8.4.jar=release/modules/ext/apache-mime4j-core-0.8.4.jar
file.reference.apache-mime4j-dom-0.8.4.jar=release/modules/ext/apache-mime4j-dom-0.8.4.jar
file.reference.asm-9.2.jar=release/modules/ext/asm-9.2.jar
file.reference.bcmail-jdk15on-1.70.jar=release/modules/ext/bcmail-jdk15on-1.70.jar
file.reference.bcpkix-jdk15on-1.70.jar=release/modules/ext/bcpkix-jdk15on-1.70.jar
file.reference.bcprov-jdk15on-1.70.jar=release/modules/ext/bcprov-jdk15on-1.70.jar
file.reference.bcutil-jdk15on-1.70.jar=release/modules/ext/bcutil-jdk15on-1.70.jar
file.reference.boilerpipe-1.1.0.jar=release/modules/ext/boilerpipe-1.1.0.jar
file.reference.SparseBitSet-1.3.jar=release/modules/ext/SparseBitSet-1.3.jar
file.reference.angus-activation-2.0.2.jar=release/modules/ext/angus-activation-2.0.2.jar
file.reference.apache-mime4j-core-0.8.11.jar=release/modules/ext/apache-mime4j-core-0.8.11.jar
file.reference.apache-mime4j-dom-0.8.11.jar=release/modules/ext/apache-mime4j-dom-0.8.11.jar
file.reference.asm-9.7.1.jar=release/modules/ext/asm-9.7.1.jar
file.reference.bcjmail-jdk18on-1.78.1.jar=release/modules/ext/bcjmail-jdk18on-1.78.1.jar
file.reference.bcpkix-jdk18on-1.79.jar=release/modules/ext/bcpkix-jdk18on-1.79.jar
file.reference.bcprov-jdk18on-1.79.jar=release/modules/ext/bcprov-jdk18on-1.79.jar
file.reference.bcutil-jdk18on-1.78.1.jar=release/modules/ext/bcutil-jdk18on-1.78.1.jar
file.reference.bzip2-0.9.1.jar=release/modules/ext/bzip2-0.9.1.jar
file.reference.c3p0-0.9.5.5.jar=release/modules/ext/c3p0-0.9.5.5.jar
file.reference.cdm-4.5.5.jar=release/modules/ext/cdm-4.5.5.jar
file.reference.checker-qual-3.33.0.jar=release/modules/ext/checker-qual-3.33.0.jar
file.reference.commons-codec-1.15.jar=release/modules/ext/commons-codec-1.15.jar
file.reference.commons-codec-1.17.1.jar=release/modules/ext/commons-codec-1.17.1.jar
file.reference.commons-collections4-4.4.jar=release/modules/ext/commons-collections4-4.4.jar
file.reference.commons-compress-1.21.jar=release/modules/ext/commons-compress-1.21.jar
file.reference.commons-csv-1.9.0.jar=release/modules/ext/commons-csv-1.9.0.jar
file.reference.commons-exec-1.3.jar=release/modules/ext/commons-exec-1.3.jar
file.reference.commons-io-2.11.0.jar=release/modules/ext/commons-io-2.11.0.jar
file.reference.commons-lang3-3.12.0.jar=release/modules/ext/commons-lang3-3.12.0.jar
file.reference.commons-logging-1.2.jar=release/modules/ext/commons-logging-1.2.jar
file.reference.commons-compress-1.27.1.jar=release/modules/ext/commons-compress-1.27.1.jar
file.reference.commons-csv-1.12.0.jar=release/modules/ext/commons-csv-1.12.0.jar
file.reference.commons-exec-1.4.0.jar=release/modules/ext/commons-exec-1.4.0.jar
file.reference.commons-io-2.17.0.jar=release/modules/ext/commons-io-2.17.0.jar
file.reference.commons-lang3-3.17.0.jar=release/modules/ext/commons-lang3-3.17.0.jar
file.reference.commons-logging-1.3.4.jar=release/modules/ext/commons-logging-1.3.4.jar
file.reference.commons-math3-3.6.1.jar=release/modules/ext/commons-math3-3.6.1.jar
file.reference.curvesapi-1.06.jar=release/modules/ext/curvesapi-1.06.jar
file.reference.cxf-core-3.5.0.jar=release/modules/ext/cxf-core-3.5.0.jar
file.reference.cxf-rt-frontend-jaxrs-3.5.0.jar=release/modules/ext/cxf-rt-frontend-jaxrs-3.5.0.jar
file.reference.cxf-rt-rs-client-3.5.0.jar=release/modules/ext/cxf-rt-rs-client-3.5.0.jar
file.reference.cxf-rt-security-3.5.0.jar=release/modules/ext/cxf-rt-security-3.5.0.jar
file.reference.cxf-rt-transports-http-3.5.0.jar=release/modules/ext/cxf-rt-transports-http-3.5.0.jar
file.reference.dd-plist-1.23.jar=release/modules/ext/dd-plist-1.23.jar
file.reference.curvesapi-1.08.jar=release/modules/ext/curvesapi-1.08.jar
file.reference.dd-plist-1.28.jar=release/modules/ext/dd-plist-1.28.jar
file.reference.dec-0.1.2.jar=release/modules/ext/dec-0.1.2.jar
file.reference.ehcache-core-2.6.2.jar=release/modules/ext/ehcache-core-2.6.2.jar
file.reference.error_prone_annotations-2.18.0.jar=release/modules/ext/error_prone_annotations-2.18.0.jar
file.reference.failureaccess-1.0.1.jar=release/modules/ext/failureaccess-1.0.1.jar
file.reference.fontbox-2.0.25.jar=release/modules/ext/fontbox-2.0.25.jar
file.reference.geoapi-3.0.1.jar=release/modules/ext/geoapi-3.0.1.jar
file.reference.fontbox-3.0.3.jar=release/modules/ext/fontbox-3.0.3.jar
file.reference.geoapi-3.0.2.jar=release/modules/ext/geoapi-3.0.2.jar
file.reference.grib-4.5.5.jar=release/modules/ext/grib-4.5.5.jar
file.reference.gson-2.9.0.jar=release/modules/ext/gson-2.9.0.jar
file.reference.guava-32.0.1-jre.jar=release/modules/ext/guava-32.0.1-jre.jar
file.reference.HikariCP-java7-2.4.13.jar=release/modules/ext/HikariCP-java7-2.4.13.jar
file.reference.httpclient-4.5.13.jar=release/modules/ext/httpclient-4.5.13.jar
file.reference.httpcore-4.4.13.jar=release/modules/ext/httpcore-4.4.13.jar
file.reference.httpmime-4.5.13.jar=release/modules/ext/httpmime-4.5.13.jar
file.reference.httpservices-4.5.5.jar=release/modules/ext/httpservices-4.5.5.jar
file.reference.isoparser-1.9.41.7.jar=release/modules/ext/isoparser-1.9.41.7.jar
file.reference.istack-commons-runtime-3.0.12.jar=release/modules/ext/istack-commons-runtime-3.0.12.jar
file.reference.j2objc-annotations-2.8.jar=release/modules/ext/j2objc-annotations-2.8.jar
file.reference.jackcess-4.0.1.jar=release/modules/ext/jackcess-4.0.1.jar
file.reference.jackcess-encrypt-4.0.1.jar=release/modules/ext/jackcess-encrypt-4.0.1.jar
file.reference.jackson-annotations-2.15.2.jar=release/modules/ext/jackson-annotations-2.15.2.jar
file.reference.jackson-core-2.15.2.jar=release/modules/ext/jackson-core-2.15.2.jar
file.reference.jackson-databind-2.15.2.jar=release/modules/ext/jackson-databind-2.15.2.jar
file.reference.httpclient-4.5.14.jar=release/modules/ext/httpclient-4.5.14.jar
file.reference.httpcore-4.4.16.jar=release/modules/ext/httpcore-4.4.16.jar
file.reference.httpmime-4.5.14.jar=release/modules/ext/httpmime-4.5.14.jar
file.reference.istack-commons-runtime-4.1.2.jar=release/modules/ext/istack-commons-runtime-4.1.2.jar
file.reference.jackcess-4.0.7.jar=release/modules/ext/jackcess-4.0.7.jar
file.reference.jackcess-encrypt-4.0.2.jar=release/modules/ext/jackcess-encrypt-4.0.2.jar
file.reference.jackson-annotations-2.18.0.jar=release/modules/ext/jackson-annotations-2.18.0.jar
file.reference.jackson-core-2.18.0.jar=release/modules/ext/jackson-core-2.18.0.jar
file.reference.jackson-databind-2.18.0.jar=release/modules/ext/jackson-databind-2.18.0.jar
file.reference.jai-imageio-core-1.4.0.jar=release/modules/ext/jai-imageio-core-1.4.0.jar
file.reference.jakarta.activation-1.2.2.jar=release/modules/ext/jakarta.activation-1.2.2.jar
file.reference.jakarta.activation-api-1.2.2.jar=release/modules/ext/jakarta.activation-api-1.2.2.jar
file.reference.jakarta.annotation-api-1.3.5.jar=release/modules/ext/jakarta.annotation-api-1.3.5.jar
file.reference.jakarta.ws.rs-api-2.1.6.jar=release/modules/ext/jakarta.ws.rs-api-2.1.6.jar
file.reference.jakarta.xml.bind-api-2.3.3.jar=release/modules/ext/jakarta.xml.bind-api-2.3.3.jar
file.reference.jakarta.activation-api-2.1.3.jar=release/modules/ext/jakarta.activation-api-2.1.3.jar
file.reference.jakarta.ws.rs-api-3.1.0.jar=release/modules/ext/jakarta.ws.rs-api-3.1.0.jar
file.reference.jakarta.xml.bind-api-4.0.2.jar=release/modules/ext/jakarta.xml.bind-api-4.0.2.jar
file.reference.java-libpst-0.9.3.jar=release/modules/ext/java-libpst-0.9.3.jar
file.reference.jaxb-runtime-2.3.5.jar=release/modules/ext/jaxb-runtime-2.3.5.jar
file.reference.jbig2-imageio-3.0.3.jar=release/modules/ext/jbig2-imageio-3.0.3.jar
file.reference.jaxb-core-4.0.5.jar=release/modules/ext/jaxb-core-4.0.5.jar
file.reference.jaxb-runtime-4.0.5.jar=release/modules/ext/jaxb-runtime-4.0.5.jar
file.reference.jbig2-imageio-3.0.4.jar=release/modules/ext/jbig2-imageio-3.0.4.jar
file.reference.jcip-annotations-1.0.jar=release/modules/ext/jcip-annotations-1.0.jar
file.reference.jcl-over-slf4j-1.7.36.jar=release/modules/ext/jcl-over-slf4j-1.7.36.jar
file.reference.jcommander-1.82.jar=release/modules/ext/jcommander-1.82.jar
file.reference.jcl-over-slf4j-2.0.16.jar=release/modules/ext/jcl-over-slf4j-2.0.16.jar
file.reference.jdom2-2.0.6.1.jar=release/modules/ext/jdom2-2.0.6.1.jar
file.reference.jempbox-1.8.16.jar=release/modules/ext/jempbox-1.8.16.jar
file.reference.jhighlight-1.0.3.jar=release/modules/ext/jhighlight-1.0.3.jar
file.reference.jempbox-1.8.17.jar=release/modules/ext/jempbox-1.8.17.jar
file.reference.jhighlight-1.1.0.jar=release/modules/ext/jhighlight-1.1.0.jar
file.reference.jj2000-5.2.jar=release/modules/ext/jj2000-5.2.jar
file.reference.jmatio-1.5.jar=release/modules/ext/jmatio-1.5.jar
file.reference.jna-5.16.0.jar=release/modules/ext/jna-5.16.0.jar
file.reference.joda-time-2.2.jar=release/modules/ext/joda-time-2.2.jar
file.reference.jna-5.15.0.jar=release/modules/ext/jna-5.15.0.jar
file.reference.json-simple-1.1.1.jar=release/modules/ext/json-simple-1.1.1.jar
file.reference.jsr305-3.0.2.jar=release/modules/ext/jsr305-3.0.2.jar
file.reference.jul-to-slf4j-1.7.36.jar=release/modules/ext/jul-to-slf4j-1.7.36.jar
file.reference.juniversalchardet-1.0.3.jar=release/modules/ext/juniversalchardet-1.0.3.jar
file.reference.junrar-7.4.1.jar=release/modules/ext/junrar-7.4.1.jar
file.reference.listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar=release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
file.reference.mchange-commons-java-0.2.19.jar=release/modules/ext/mchange-commons-java-0.2.19.jar
file.reference.metadata-extractor-2.15.0.1.jar=release/modules/ext/metadata-extractor-2.15.0.1.jar
file.reference.jsoup-1.18.1.jar=release/modules/ext/jsoup-1.18.1.jar
file.reference.juniversalchardet-2.5.0.jar=release/modules/ext/juniversalchardet-2.5.0.jar
file.reference.junrar-7.5.5.jar=release/modules/ext/junrar-7.5.5.jar
file.reference.jwarc-0.30.0.jar=release/modules/ext/jwarc-0.30.0.jar
file.reference.log4j-api-2.24.3.jar=release/modules/ext/log4j-api-2.24.3.jar
file.reference.metadata-extractor-2.19.0.jar=release/modules/ext/metadata-extractor-2.19.0.jar
file.reference.netcdf4-4.5.5.jar=release/modules/ext/netcdf4-4.5.5.jar
file.reference.ooxml-schemas-1.4.jar=release/modules/ext/ooxml-schemas-1.4.jar
file.reference.openjson-1.0.12.jar=release/modules/ext/openjson-1.0.12.jar
file.reference.opennlp-tools-1.9.4.jar=release/modules/ext/opennlp-tools-1.9.4.jar
file.reference.openjson-1.0.13.jar=release/modules/ext/openjson-1.0.13.jar
file.reference.parso-2.0.14.jar=release/modules/ext/parso-2.0.14.jar
file.reference.pdfbox-2.0.25.jar=release/modules/ext/pdfbox-2.0.25.jar
file.reference.pdfbox-tools-2.0.25.jar=release/modules/ext/pdfbox-tools-2.0.25.jar
file.reference.poi-4.1.2.jar=release/modules/ext/poi-4.1.2.jar
file.reference.poi-ooxml-4.1.2.jar=release/modules/ext/poi-ooxml-4.1.2.jar
file.reference.poi-ooxml-schemas-4.1.2.jar=release/modules/ext/poi-ooxml-schemas-4.1.2.jar
file.reference.poi-scratchpad-4.1.2.jar=release/modules/ext/poi-scratchpad-4.1.2.jar
file.reference.preflight-2.0.25.jar=release/modules/ext/preflight-2.0.25.jar
file.reference.protobuf-java-3.19.4.jar=release/modules/ext/protobuf-java-3.19.4.jar
file.reference.quartz-2.3.2.jar=release/modules/ext/quartz-2.3.2.jar
file.reference.rome-1.18.0.jar=release/modules/ext/rome-1.18.0.jar
file.reference.rome-utils-1.18.0.jar=release/modules/ext/rome-utils-1.18.0.jar
file.reference.sentiment-analysis-parser-0.1.jar=release/modules/ext/sentiment-analysis-parser-0.1.jar
file.reference.sis-feature-1.1.jar=release/modules/ext/sis-feature-1.1.jar
file.reference.sis-metadata-1.1.jar=release/modules/ext/sis-metadata-1.1.jar
file.reference.sis-netcdf-1.1.jar=release/modules/ext/sis-netcdf-1.1.jar
file.reference.sis-referencing-1.1.jar=release/modules/ext/sis-referencing-1.1.jar
file.reference.sis-storage-1.1.jar=release/modules/ext/sis-storage-1.1.jar
file.reference.sis-utility-1.1.jar=release/modules/ext/sis-utility-1.1.jar
file.reference.slf4j-api-1.7.36.jar=release/modules/ext/slf4j-api-1.7.36.jar
file.reference.SparseBitSet-1.2.jar=release/modules/ext/SparseBitSet-1.2.jar
file.reference.stax2-api-4.2.1.jar=release/modules/ext/stax2-api-4.2.1.jar
file.reference.pdfbox-3.0.3.jar=release/modules/ext/pdfbox-3.0.3.jar
file.reference.pdfbox-io-3.0.3.jar=release/modules/ext/pdfbox-io-3.0.3.jar
file.reference.pdfbox-tools-3.0.3.jar=release/modules/ext/pdfbox-tools-3.0.3.jar
file.reference.picocli-4.7.6.jar=release/modules/ext/picocli-4.7.6.jar
file.reference.poi-5.3.0.jar=release/modules/ext/poi-5.3.0.jar
file.reference.poi-ooxml-5.3.0.jar=release/modules/ext/poi-ooxml-5.3.0.jar
file.reference.poi-ooxml-lite-5.3.0.jar=release/modules/ext/poi-ooxml-lite-5.3.0.jar
file.reference.poi-scratchpad-5.3.0.jar=release/modules/ext/poi-scratchpad-5.3.0.jar
file.reference.protobuf-java-3.25.5.jar=release/modules/ext/protobuf-java-3.25.5.jar
file.reference.rome-2.1.0.jar=release/modules/ext/rome-2.1.0.jar
file.reference.rome-utils-2.1.0.jar=release/modules/ext/rome-utils-2.1.0.jar
file.reference.sis-feature-1.4.jar=release/modules/ext/sis-feature-1.4.jar
file.reference.sis-metadata-1.4.jar=release/modules/ext/sis-metadata-1.4.jar
file.reference.sis-netcdf-1.4.jar=release/modules/ext/sis-netcdf-1.4.jar
file.reference.sis-referencing-1.4.jar=release/modules/ext/sis-referencing-1.4.jar
file.reference.sis-storage-1.4.jar=release/modules/ext/sis-storage-1.4.jar
file.reference.sis-utility-1.4.jar=release/modules/ext/sis-utility-1.4.jar
file.reference.slf4j-api-2.0.16.jar=release/modules/ext/slf4j-api-2.0.16.jar
file.reference.sqlite-jdbc-3.46.1.3.jar=release/modules/ext/sqlite-jdbc-3.46.1.3.jar
file.reference.tagsoup-1.2.1.jar=release/modules/ext/tagsoup-1.2.1.jar
file.reference.tika-core-1.28.1.jar=release/modules/ext/tika-core-1.28.1.jar
file.reference.tika-parsers-1.28.1.jar=release/modules/ext/tika-parsers-1.28.1.jar
file.reference.txw2-2.3.5.jar=release/modules/ext/txw2-2.3.5.jar
file.reference.udunits-4.5.5.jar=release/modules/ext/udunits-4.5.5.jar
file.reference.unit-api-1.0.jar=release/modules/ext/unit-api-1.0.jar
file.reference.tika-core-3.0.0.jar=release/modules/ext/tika-core-3.0.0.jar
file.reference.tika-parser-advancedmedia-module-3.0.0.jar=release/modules/ext/tika-parser-advancedmedia-module-3.0.0.jar
file.reference.tika-parser-advancedmedia-package-3.0.0.jar=release/modules/ext/tika-parser-advancedmedia-package-3.0.0.jar
file.reference.tika-parser-apple-module-3.0.0.jar=release/modules/ext/tika-parser-apple-module-3.0.0.jar
file.reference.tika-parser-audiovideo-module-3.0.0.jar=release/modules/ext/tika-parser-audiovideo-module-3.0.0.jar
file.reference.tika-parser-cad-module-3.0.0.jar=release/modules/ext/tika-parser-cad-module-3.0.0.jar
file.reference.tika-parser-code-module-3.0.0.jar=release/modules/ext/tika-parser-code-module-3.0.0.jar
file.reference.tika-parser-crypto-module-3.0.0.jar=release/modules/ext/tika-parser-crypto-module-3.0.0.jar
file.reference.tika-parser-digest-commons-3.0.0.jar=release/modules/ext/tika-parser-digest-commons-3.0.0.jar
file.reference.tika-parser-font-module-3.0.0.jar=release/modules/ext/tika-parser-font-module-3.0.0.jar
file.reference.tika-parser-html-module-3.0.0.jar=release/modules/ext/tika-parser-html-module-3.0.0.jar
file.reference.tika-parser-image-module-3.0.0.jar=release/modules/ext/tika-parser-image-module-3.0.0.jar
file.reference.tika-parser-jdbc-commons-3.0.0.jar=release/modules/ext/tika-parser-jdbc-commons-3.0.0.jar
file.reference.tika-parser-mail-commons-3.0.0.jar=release/modules/ext/tika-parser-mail-commons-3.0.0.jar
file.reference.tika-parser-mail-module-3.0.0.jar=release/modules/ext/tika-parser-mail-module-3.0.0.jar
file.reference.tika-parser-microsoft-module-3.0.0.jar=release/modules/ext/tika-parser-microsoft-module-3.0.0.jar
file.reference.tika-parser-miscoffice-module-3.0.0.jar=release/modules/ext/tika-parser-miscoffice-module-3.0.0.jar
file.reference.tika-parser-news-module-3.0.0.jar=release/modules/ext/tika-parser-news-module-3.0.0.jar
file.reference.tika-parser-ocr-module-3.0.0.jar=release/modules/ext/tika-parser-ocr-module-3.0.0.jar
file.reference.tika-parser-pdf-module-3.0.0.jar=release/modules/ext/tika-parser-pdf-module-3.0.0.jar
file.reference.tika-parser-pkg-module-3.0.0.jar=release/modules/ext/tika-parser-pkg-module-3.0.0.jar
file.reference.tika-parser-scientific-module-3.0.0.jar=release/modules/ext/tika-parser-scientific-module-3.0.0.jar
file.reference.tika-parser-scientific-package-3.0.0.jar=release/modules/ext/tika-parser-scientific-package-3.0.0.jar
file.reference.tika-parser-sqlite3-module-3.0.0.jar=release/modules/ext/tika-parser-sqlite3-module-3.0.0.jar
file.reference.tika-parser-sqlite3-package-3.0.0.jar=release/modules/ext/tika-parser-sqlite3-package-3.0.0.jar
file.reference.tika-parser-text-module-3.0.0.jar=release/modules/ext/tika-parser-text-module-3.0.0.jar
file.reference.tika-parser-webarchive-module-3.0.0.jar=release/modules/ext/tika-parser-webarchive-module-3.0.0.jar
file.reference.tika-parser-xml-module-3.0.0.jar=release/modules/ext/tika-parser-xml-module-3.0.0.jar
file.reference.tika-parser-xmp-commons-3.0.0.jar=release/modules/ext/tika-parser-xmp-commons-3.0.0.jar
file.reference.tika-parser-zip-commons-3.0.0.jar=release/modules/ext/tika-parser-zip-commons-3.0.0.jar
file.reference.tika-parsers-standard-package-3.0.0.jar=release/modules/ext/tika-parsers-standard-package-3.0.0.jar
file.reference.txw2-4.0.5.jar=release/modules/ext/txw2-4.0.5.jar
file.reference.unit-api-2.2.jar=release/modules/ext/unit-api-2.2.jar
file.reference.vorbis-java-core-0.8.jar=release/modules/ext/vorbis-java-core-0.8.jar
file.reference.vorbis-java-tika-0.8.jar=release/modules/ext/vorbis-java-tika-0.8.jar
file.reference.woodstox-core-6.2.8.jar=release/modules/ext/woodstox-core-6.2.8.jar
file.reference.xercesImpl-2.12.2.jar=release/modules/ext/xercesImpl-2.12.2.jar
file.reference.xml-apis-1.4.01.jar=release/modules/ext/xml-apis-1.4.01.jar
file.reference.xmlbeans-3.1.0.jar=release/modules/ext/xmlbeans-3.1.0.jar
file.reference.xmlschema-core-2.3.0.jar=release/modules/ext/xmlschema-core-2.3.0.jar
file.reference.xmpbox-2.0.25.jar=release/modules/ext/xmpbox-2.0.25.jar
file.reference.xmpcore-shaded-6.1.11.jar=release/modules/ext/xmpcore-shaded-6.1.11.jar
file.reference.xz-1.9.jar=release/modules/ext/xz-1.9.jar
file.reference.xmlbeans-5.2.1.jar=release/modules/ext/xmlbeans-5.2.1.jar
file.reference.xmpbox-3.0.3.jar=release/modules/ext/xmpbox-3.0.3.jar
file.reference.xmpcore-6.1.11.jar=release/modules/ext/xmpcore-6.1.11.jar
file.reference.xz-1.10.jar=release/modules/ext/xz-1.10.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17
javac.compilerargs=-Xlint -Xlint:-serial

View File

@ -356,308 +356,228 @@
<package>schemaorg_apache_xmlbeans.system.sD023D6490046BA0250A839A9AD24C443</package>
</public-packages>
<class-path-extension>
<runtime-relative-path>ext/apache-mime4j-core-0.8.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/apache-mime4j-core-0.8.4.jar</binary-origin>
<runtime-relative-path>ext/angus-activation-2.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/angus-activation-2.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/apache-mime4j-dom-0.8.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/apache-mime4j-dom-0.8.4.jar</binary-origin>
<runtime-relative-path>ext/apache-mime4j-core-0.8.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/apache-mime4j-core-0.8.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/asm-9.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/asm-9.2.jar</binary-origin>
<runtime-relative-path>ext/apache-mime4j-dom-0.8.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/apache-mime4j-dom-0.8.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcmail-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcmail-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/asm-9.7.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/asm-9.7.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcpkix-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcpkix-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/bcjmail-jdk18on-1.78.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcjmail-jdk18on-1.78.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcprov-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcprov-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/bcpkix-jdk18on-1.79.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcpkix-jdk18on-1.79.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bcutil-jdk15on-1.70.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcutil-jdk15on-1.70.jar</binary-origin>
<runtime-relative-path>ext/bcprov-jdk18on-1.79.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcprov-jdk18on-1.79.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/boilerpipe-1.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/boilerpipe-1.1.0.jar</binary-origin>
<runtime-relative-path>ext/bcutil-jdk18on-1.78.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bcutil-jdk18on-1.78.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/bzip2-0.9.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/bzip2-0.9.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/c3p0-0.9.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/c3p0-0.9.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cdm-4.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/cdm-4.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/checker-qual-3.33.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/checker-qual-3.33.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-codec-1.15.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-codec-1.15.jar</binary-origin>
<runtime-relative-path>ext/commons-codec-1.17.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-codec-1.17.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-collections4-4.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-collections4-4.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-compress-1.21.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-compress-1.21.jar</binary-origin>
<runtime-relative-path>ext/commons-compress-1.27.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-compress-1.27.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-csv-1.9.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-csv-1.9.0.jar</binary-origin>
<runtime-relative-path>ext/commons-csv-1.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-csv-1.12.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-exec-1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-exec-1.3.jar</binary-origin>
<runtime-relative-path>ext/commons-exec-1.4.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-exec-1.4.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-io-2.11.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.11.0.jar</binary-origin>
<runtime-relative-path>ext/commons-io-2.17.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-io-2.17.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-lang3-3.12.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-lang3-3.12.0.jar</binary-origin>
<runtime-relative-path>ext/commons-lang3-3.17.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-lang3-3.17.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-logging-1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-logging-1.2.jar</binary-origin>
<runtime-relative-path>ext/commons-logging-1.3.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-logging-1.3.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/commons-math3-3.6.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/commons-math3-3.6.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/curvesapi-1.06.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curvesapi-1.06.jar</binary-origin>
<runtime-relative-path>ext/curvesapi-1.08.jar</runtime-relative-path>
<binary-origin>release/modules/ext/curvesapi-1.08.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cxf-core-3.5.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/cxf-core-3.5.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cxf-rt-frontend-jaxrs-3.5.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/cxf-rt-frontend-jaxrs-3.5.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cxf-rt-rs-client-3.5.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/cxf-rt-rs-client-3.5.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cxf-rt-security-3.5.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/cxf-rt-security-3.5.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/cxf-rt-transports-http-3.5.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/cxf-rt-transports-http-3.5.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/dd-plist-1.23.jar</runtime-relative-path>
<binary-origin>release/modules/ext/dd-plist-1.23.jar</binary-origin>
<runtime-relative-path>ext/dd-plist-1.28.jar</runtime-relative-path>
<binary-origin>release/modules/ext/dd-plist-1.28.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/dec-0.1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/dec-0.1.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/ehcache-core-2.6.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/ehcache-core-2.6.2.jar</binary-origin>
<runtime-relative-path>ext/fontbox-3.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/fontbox-3.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/error_prone_annotations-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/error_prone_annotations-2.18.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/failureaccess-1.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/failureaccess-1.0.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/fontbox-2.0.25.jar</runtime-relative-path>
<binary-origin>release/modules/ext/fontbox-2.0.25.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/geoapi-3.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/geoapi-3.0.1.jar</binary-origin>
<runtime-relative-path>ext/geoapi-3.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/geoapi-3.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/grib-4.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/grib-4.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/gson-2.9.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/gson-2.9.0.jar</binary-origin>
<runtime-relative-path>ext/httpclient-4.5.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpclient-4.5.14.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/guava-32.0.1-jre.jar</runtime-relative-path>
<binary-origin>release/modules/ext/guava-32.0.1-jre.jar</binary-origin>
<runtime-relative-path>ext/httpcore-4.4.16.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpcore-4.4.16.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/HikariCP-java7-2.4.13.jar</runtime-relative-path>
<binary-origin>release/modules/ext/HikariCP-java7-2.4.13.jar</binary-origin>
<runtime-relative-path>ext/httpmime-4.5.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpmime-4.5.14.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpclient-4.5.13.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpclient-4.5.13.jar</binary-origin>
<runtime-relative-path>ext/istack-commons-runtime-4.1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/istack-commons-runtime-4.1.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpcore-4.4.13.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpcore-4.4.13.jar</binary-origin>
<runtime-relative-path>ext/jackcess-4.0.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-4.0.7.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpmime-4.5.13.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpmime-4.5.13.jar</binary-origin>
<runtime-relative-path>ext/jackcess-encrypt-4.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-encrypt-4.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpservices-4.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/httpservices-4.5.5.jar</binary-origin>
<runtime-relative-path>ext/jackson-annotations-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-annotations-2.18.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/isoparser-1.9.41.7.jar</runtime-relative-path>
<binary-origin>release/modules/ext/isoparser-1.9.41.7.jar</binary-origin>
<runtime-relative-path>ext/jackson-core-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-core-2.18.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/istack-commons-runtime-3.0.12.jar</runtime-relative-path>
<binary-origin>release/modules/ext/istack-commons-runtime-3.0.12.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/j2objc-annotations-2.8.jar</runtime-relative-path>
<binary-origin>release/modules/ext/j2objc-annotations-2.8.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackcess-4.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-4.0.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackcess-encrypt-4.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackcess-encrypt-4.0.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-annotations-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-annotations-2.15.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-core-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-core-2.15.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-databind-2.15.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-databind-2.15.2.jar</binary-origin>
<runtime-relative-path>ext/jackson-databind-2.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jackson-databind-2.18.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jai-imageio-core-1.4.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jai-imageio-core-1.4.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.activation-1.2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.activation-1.2.2.jar</binary-origin>
<runtime-relative-path>ext/jakarta.activation-api-2.1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.activation-api-2.1.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.activation-api-1.2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.activation-api-1.2.2.jar</binary-origin>
<runtime-relative-path>ext/jakarta.ws.rs-api-3.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.ws.rs-api-3.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.annotation-api-1.3.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.annotation-api-1.3.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.ws.rs-api-2.1.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.ws.rs-api-2.1.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jakarta.xml.bind-api-2.3.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.xml.bind-api-2.3.3.jar</binary-origin>
<runtime-relative-path>ext/jakarta.xml.bind-api-4.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jakarta.xml.bind-api-4.0.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/java-libpst-0.9.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/java-libpst-0.9.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jaxb-runtime-2.3.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxb-runtime-2.3.5.jar</binary-origin>
<runtime-relative-path>ext/jaxb-core-4.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxb-core-4.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jbig2-imageio-3.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jbig2-imageio-3.0.3.jar</binary-origin>
<runtime-relative-path>ext/jaxb-runtime-4.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jaxb-runtime-4.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jbig2-imageio-3.0.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jbig2-imageio-3.0.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jcip-annotations-1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jcip-annotations-1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jcl-over-slf4j-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jcl-over-slf4j-1.7.36.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jcommander-1.82.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jcommander-1.82.jar</binary-origin>
<runtime-relative-path>ext/jcl-over-slf4j-2.0.16.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jcl-over-slf4j-2.0.16.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jdom2-2.0.6.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom2-2.0.6.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jempbox-1.8.16.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jempbox-1.8.16.jar</binary-origin>
<runtime-relative-path>ext/jempbox-1.8.17.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jempbox-1.8.17.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jhighlight-1.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jhighlight-1.0.3.jar</binary-origin>
<runtime-relative-path>ext/jhighlight-1.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jhighlight-1.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jj2000-5.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jj2000-5.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jmatio-1.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jmatio-1.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jna-5.16.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jna-5.16.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/joda-time-2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/joda-time-2.2.jar</binary-origin>
<runtime-relative-path>ext/jna-5.15.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jna-5.15.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/json-simple-1.1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/json-simple-1.1.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jsr305-3.0.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jsr305-3.0.2.jar</binary-origin>
<runtime-relative-path>ext/jsoup-1.18.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jsoup-1.18.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jul-to-slf4j-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jul-to-slf4j-1.7.36.jar</binary-origin>
<runtime-relative-path>ext/juniversalchardet-2.5.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/juniversalchardet-2.5.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/juniversalchardet-1.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/juniversalchardet-1.0.3.jar</binary-origin>
<runtime-relative-path>ext/junrar-7.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/junrar-7.5.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/junrar-7.4.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/junrar-7.4.1.jar</binary-origin>
<runtime-relative-path>ext/jwarc-0.30.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jwarc-0.30.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</runtime-relative-path>
<binary-origin>release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</binary-origin>
<runtime-relative-path>ext/log4j-api-2.24.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/log4j-api-2.24.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/mchange-commons-java-0.2.19.jar</runtime-relative-path>
<binary-origin>release/modules/ext/mchange-commons-java-0.2.19.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/metadata-extractor-2.15.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/metadata-extractor-2.15.0.1.jar</binary-origin>
<runtime-relative-path>ext/metadata-extractor-2.19.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/metadata-extractor-2.19.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/netcdf4-4.5.5.jar</runtime-relative-path>
@ -668,124 +588,228 @@
<binary-origin>release/modules/ext/ooxml-schemas-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/openjson-1.0.12.jar</runtime-relative-path>
<binary-origin>release/modules/ext/openjson-1.0.12.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/opennlp-tools-1.9.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/opennlp-tools-1.9.4.jar</binary-origin>
<runtime-relative-path>ext/openjson-1.0.13.jar</runtime-relative-path>
<binary-origin>release/modules/ext/openjson-1.0.13.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/parso-2.0.14.jar</runtime-relative-path>
<binary-origin>release/modules/ext/parso-2.0.14.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/pdfbox-2.0.25.jar</runtime-relative-path>
<binary-origin>release/modules/ext/pdfbox-2.0.25.jar</binary-origin>
<runtime-relative-path>ext/pdfbox-3.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/pdfbox-3.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/pdfbox-tools-2.0.25.jar</runtime-relative-path>
<binary-origin>release/modules/ext/pdfbox-tools-2.0.25.jar</binary-origin>
<runtime-relative-path>ext/pdfbox-io-3.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/pdfbox-io-3.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/poi-4.1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-4.1.2.jar</binary-origin>
<runtime-relative-path>ext/pdfbox-tools-3.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/pdfbox-tools-3.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/poi-ooxml-4.1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-ooxml-4.1.2.jar</binary-origin>
<runtime-relative-path>ext/picocli-4.7.6.jar</runtime-relative-path>
<binary-origin>release/modules/ext/picocli-4.7.6.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/poi-ooxml-schemas-4.1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-ooxml-schemas-4.1.2.jar</binary-origin>
<runtime-relative-path>ext/poi-5.3.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-5.3.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/poi-scratchpad-4.1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-scratchpad-4.1.2.jar</binary-origin>
<runtime-relative-path>ext/poi-ooxml-5.3.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-ooxml-5.3.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/preflight-2.0.25.jar</runtime-relative-path>
<binary-origin>release/modules/ext/preflight-2.0.25.jar</binary-origin>
<runtime-relative-path>ext/poi-ooxml-lite-5.3.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-ooxml-lite-5.3.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/protobuf-java-3.19.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/protobuf-java-3.19.4.jar</binary-origin>
<runtime-relative-path>ext/poi-scratchpad-5.3.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/poi-scratchpad-5.3.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/quartz-2.3.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/quartz-2.3.2.jar</binary-origin>
<runtime-relative-path>ext/protobuf-java-3.25.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/protobuf-java-3.25.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/rome-1.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/rome-1.18.0.jar</binary-origin>
<runtime-relative-path>ext/rome-2.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/rome-2.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/rome-utils-1.18.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/rome-utils-1.18.0.jar</binary-origin>
<runtime-relative-path>ext/rome-utils-2.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/rome-utils-2.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sentiment-analysis-parser-0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sentiment-analysis-parser-0.1.jar</binary-origin>
<runtime-relative-path>ext/sis-feature-1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-feature-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-feature-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-feature-1.1.jar</binary-origin>
<runtime-relative-path>ext/sis-metadata-1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-metadata-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-metadata-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-metadata-1.1.jar</binary-origin>
<runtime-relative-path>ext/sis-netcdf-1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-netcdf-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-netcdf-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-netcdf-1.1.jar</binary-origin>
<runtime-relative-path>ext/sis-referencing-1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-referencing-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-referencing-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-referencing-1.1.jar</binary-origin>
<runtime-relative-path>ext/sis-storage-1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-storage-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-storage-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-storage-1.1.jar</binary-origin>
<runtime-relative-path>ext/sis-utility-1.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-utility-1.4.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sis-utility-1.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sis-utility-1.1.jar</binary-origin>
<runtime-relative-path>ext/slf4j-api-2.0.16.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-api-2.0.16.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/slf4j-api-1.7.36.jar</runtime-relative-path>
<binary-origin>release/modules/ext/slf4j-api-1.7.36.jar</binary-origin>
<runtime-relative-path>ext/SparseBitSet-1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/SparseBitSet-1.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/SparseBitSet-1.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/SparseBitSet-1.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/stax2-api-4.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/stax2-api-4.2.1.jar</binary-origin>
<runtime-relative-path>ext/sqlite-jdbc-3.46.1.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sqlite-jdbc-3.46.1.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tagsoup-1.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tagsoup-1.2.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-core-1.28.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-core-1.28.1.jar</binary-origin>
<runtime-relative-path>ext/tika-core-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-core-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parsers-1.28.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parsers-1.28.1.jar</binary-origin>
<runtime-relative-path>ext/tika-parser-advancedmedia-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-advancedmedia-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/txw2-2.3.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/txw2-2.3.5.jar</binary-origin>
<runtime-relative-path>ext/tika-parser-advancedmedia-package-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-advancedmedia-package-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/udunits-4.5.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/udunits-4.5.5.jar</binary-origin>
<runtime-relative-path>ext/tika-parser-apple-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-apple-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/unit-api-1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/unit-api-1.0.jar</binary-origin>
<runtime-relative-path>ext/tika-parser-audiovideo-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-audiovideo-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-cad-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-cad-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-code-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-code-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-crypto-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-crypto-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-digest-commons-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-digest-commons-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-font-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-font-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-html-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-html-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-image-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-image-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-jdbc-commons-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-jdbc-commons-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-mail-commons-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-mail-commons-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-mail-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-mail-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-microsoft-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-microsoft-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-miscoffice-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-miscoffice-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-news-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-news-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-ocr-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-ocr-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-pdf-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-pdf-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-pkg-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-pkg-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-scientific-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-scientific-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-scientific-package-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-scientific-package-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-sqlite3-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-sqlite3-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-sqlite3-package-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-sqlite3-package-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-text-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-text-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-webarchive-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-webarchive-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-xml-module-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-xml-module-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-xmp-commons-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-xmp-commons-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parser-zip-commons-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parser-zip-commons-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tika-parsers-standard-package-3.0.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tika-parsers-standard-package-3.0.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/txw2-4.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/txw2-4.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/unit-api-2.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/unit-api-2.2.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/vorbis-java-core-0.8.jar</runtime-relative-path>
@ -796,36 +820,20 @@
<binary-origin>release/modules/ext/vorbis-java-tika-0.8.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/woodstox-core-6.2.8.jar</runtime-relative-path>
<binary-origin>release/modules/ext/woodstox-core-6.2.8.jar</binary-origin>
<runtime-relative-path>ext/xmlbeans-5.2.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmlbeans-5.2.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xercesImpl-2.12.2.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xercesImpl-2.12.2.jar</binary-origin>
<runtime-relative-path>ext/xmpbox-3.0.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmpbox-3.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xml-apis-1.4.01.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xml-apis-1.4.01.jar</binary-origin>
<runtime-relative-path>ext/xmpcore-6.1.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmpcore-6.1.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmlbeans-3.1.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmlbeans-3.1.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmlschema-core-2.3.0.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmlschema-core-2.3.0.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmpbox-2.0.25.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmpbox-2.0.25.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xmpcore-shaded-6.1.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xmpcore-shaded-6.1.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/xz-1.9.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xz-1.9.jar</binary-origin>
<runtime-relative-path>ext/xz-1.10.jar</runtime-relative-path>
<binary-origin>release/modules/ext/xz-1.10.jar</binary-origin>
</class-path-extension>
</data>
</configuration>

View File

@ -6,15 +6,17 @@ cache:
- C:\ProgramData\chocolatey\lib
- '%APPVEYOR_BUILD_FOLDER%\Core\test\qa-functional\data'
image: Visual Studio 2015
image: Visual Studio 2019
platform: x64
environment:
global:
TSK_HOME: "C:\\sleuthkit"
JDK_HOME: "C:\\Program Files\\Java\\jdk13"
JAVA_HOME: "C:\\Program Files\\Java\\jdk13"
JDK_HOME: "C:\\Program Files\\Java\\jdk17"
JAVA_HOME: "C:\\Program Files\\Java\\jdk17"
PYTHON: "C:\\Python36-x64"
PLATFORM_REL_DIR: "netbeans-plat/15"
HARNESS_REL_DIR: "netbeans-plat/15/harness"
install:
- ps: choco install nuget.commandline
@ -27,7 +29,7 @@ install:
- python setupSleuthkitBranch.py
services:
- postgresql95
- postgresql96
build_script:
- cd %TSK_HOME%
@ -41,8 +43,9 @@ build_script:
- cmd: ant -q
- ps: popd
- cd %APPVEYOR_BUILD_FOLDER%
- cmd: ant -q build
- cmd: ant -q -Dnbplatform.active.dir="%APPVEYOR_BUILD_FOLDER%/%PLATFORM_REL_DIR%" -Dnbplatform.default.harness.dir="%APPVEYOR_BUILD_FOLDER%/%HARNESS_REL_DIR%" build
test_script:
- cd %APPVEYOR_BUILD_FOLDER%
- cmd: ant -q test-no-regression
- cmd: ant -f "%APPVEYOR_BUILD_FOLDER%/Core/build.xml" -Dnbplatform.active.dir="%APPVEYOR_BUILD_FOLDER%/%PLATFORM_REL_DIR%" -Dnbplatform.default.harness.dir="%APPVEYOR_BUILD_FOLDER%/%HARNESS_REL_DIR%" test-unit
- cmd: ant -f "%APPVEYOR_BUILD_FOLDER%/KeywordSearch/build.xml" -Dnbplatform.active.dir="%APPVEYOR_BUILD_FOLDER%/%PLATFORM_REL_DIR%" -Dnbplatform.default.harness.dir="%APPVEYOR_BUILD_FOLDER%/%HARNESS_REL_DIR%" test-unit

View File

@ -1,5 +1,5 @@
#Updated by build script
#Thu, 20 Jul 2023 19:55:04 -0400
#Fri, 03 Jan 2025 17:15:38 -0500
LBL_splash_window_title=Starting Autopsy
SPLASH_HEIGHT=314
SPLASH_WIDTH=538
@ -8,4 +8,4 @@ SplashRunningTextBounds=0,289,538,18
SplashRunningTextColor=0x0
SplashRunningTextFontSize=19
currentVersion=Autopsy 4.20.0
currentVersion=Autopsy 4.21.0

View File

@ -1,4 +1,4 @@
#Updated by build script
#Thu, 20 Jul 2023 19:55:04 -0400
CTL_MainWindow_Title=Autopsy 4.20.0
CTL_MainWindow_Title_No_Project=Autopsy 4.20.0
#Fri, 03 Jan 2025 17:15:38 -0500
CTL_MainWindow_Title=Autopsy 4.21.0
CTL_MainWindow_Title_No_Project=Autopsy 4.21.0

29
dependency-check.xml Normal file
View File

@ -0,0 +1,29 @@
<project name="AutopsyDependencyCheck">
<!-- after downloading dependency-check from https://jeremylong.github.io/DependencyCheck and building Autopsy, can be run with a command like
`ant dependency-check -f dependency-check.xml -Ddependency-check-dir=/path/to/dir -Ddependency-check-out=/path/to/dir -Djar-dir=%AUTOPSY_SRC_PATH%\build\cluster\modules\ext` -->
<!--set up dependency check: https://jeremylong.github.io/DependencyCheck/dependency-check-ant/ -->
<path id="dependency-check.path">
<pathelement location="${dependency-check-dir}/dependency-check-ant.jar"/>
<fileset dir="${dependency-check-dir}/lib">
<include name="*.jar"/>
</fileset>
</path>
<taskdef resource="dependency-check-taskdefs.properties">
<classpath refid="dependency-check.path" />
</taskdef>
<property name="jar-dir" value="${basedir}/build/cluster/modules/ext"/>
<!--runs dependency check as an ant task: https://jeremylong.github.io/DependencyCheck/dependency-check-ant/configuration.html -->
<target name="dependency-check" description="Dependency-Check Analysis">
<dependency-check projectname="Autopsy"
reportoutputdirectory="${dependency-check-out}"
reportformat="ALL">
<!--<suppressionfile path="${basedir}/path/to/suppression.xml" />-->
<fileset dir="${jar-dir}">
<include name="**/*.jar"/>
</fileset>
</dependency-check>
</target>
</project>

View File

@ -7,9 +7,9 @@
</configurations>
<dependencies>
<dependency conf="autopsy->default" org="org.apache.james" name="apache-mime4j-mbox-iterator" rev="0.8.4"/>
<dependency conf="autopsy->default" org="com.googlecode.ez-vcard" name="ez-vcard" rev="0.11.3"/>
<override org="org.jsoup" module="jsoup" rev="1.16.1"/>
<override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/>
<dependency conf="autopsy->default" org="org.apache.james" name="apache-mime4j-mbox-iterator" rev="0.8.11"/>
<dependency conf="autopsy->default" org="com.googlecode.ez-vcard" name="ez-vcard" rev="0.12.1"/>
<!-- <override org="org.jsoup" module="jsoup" rev="1.16.1"/>
<override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/> -->
</dependencies>
</ivy-module>

View File

@ -1,13 +1,13 @@
file.reference.apache-mime4j-mbox-iterator-0.8.4.jar=release/modules/ext/apache-mime4j-mbox-iterator-0.8.4.jar
file.reference.ez-vcard-0.11.3.jar=release/modules/ext/ez-vcard-0.11.3.jar
file.reference.freemarker-2.3.31.jar=release/modules/ext/freemarker-2.3.31.jar
file.reference.apache-mime4j-mbox-iterator-0.8.11.jar=release/modules/ext/apache-mime4j-mbox-iterator-0.8.11.jar
file.reference.ez-vcard-0.12.1.jar=release/modules/ext/ez-vcard-0.12.1.jar
file.reference.freemarker-2.3.32.jar=release/modules/ext/freemarker-2.3.32.jar
file.reference.jackson-core-2.15.2.jar=release/modules/ext/jackson-core-2.15.2.jar
file.reference.java-libpst-0.9.5-SNAPSHOT.jar=release/modules/ext/java-libpst-0.9.5-SNAPSHOT.jar
file.reference.jsoup-1.16.1.jar=release/modules/ext/jsoup-1.16.1.jar
file.reference.vinnie-2.0.2.jar=release/modules/ext/vinnie-2.0.2.jar
javac.compilerargs=-Xlint -Xlint\:-serial
javac.source=17
javac.compilerargs=-Xlint -Xlint:-serial
license.file=../LICENSE-2.0.txt
nbm.homepage=http://www.sleuthkit.org/autopsy/
nbm.homepage=http\://www.sleuthkit.org/autopsy/
nbm.needs.restart=true
spec.version.base=4.0

View File

@ -78,16 +78,16 @@
</module-dependencies>
<public-packages/>
<class-path-extension>
<runtime-relative-path>ext/apache-mime4j-mbox-iterator-0.8.4.jar</runtime-relative-path>
<binary-origin>release/modules/ext/apache-mime4j-mbox-iterator-0.8.4.jar</binary-origin>
<runtime-relative-path>ext/apache-mime4j-mbox-iterator-0.8.11.jar</runtime-relative-path>
<binary-origin>release/modules/ext/apache-mime4j-mbox-iterator-0.8.11.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/ez-vcard-0.11.3.jar</runtime-relative-path>
<binary-origin>release/modules/ext/ez-vcard-0.11.3.jar</binary-origin>
<runtime-relative-path>ext/ez-vcard-0.12.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/ez-vcard-0.12.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/freemarker-2.3.31.jar</runtime-relative-path>
<binary-origin>release/modules/ext/freemarker-2.3.31.jar</binary-origin>
<runtime-relative-path>ext/freemarker-2.3.32.jar</runtime-relative-path>
<binary-origin>release/modules/ext/freemarker-2.3.32.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jackson-core-2.15.2.jar</runtime-relative-path>