mirror of
https://github.com/ysoftdevs/DependencyCheck.git
synced 2026-03-23 17:41:28 +01:00
Moved some of the utility classes from core to a new utils module
Former-commit-id: 6c2ba353e41c6a43fef326896ea77ede300591ec
This commit is contained in:
@@ -439,6 +439,11 @@ Copyright (c) 2013 - Jeremy Long. All Rights Reserved.
|
|||||||
<artifactId>dependency-check-core</artifactId>
|
<artifactId>dependency-check-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.owasp</groupId>
|
||||||
|
<artifactId>dependency-check-utils</artifactId>
|
||||||
|
<version>${project.parent.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.owasp</groupId>
|
<groupId>org.owasp</groupId>
|
||||||
<artifactId>dependency-check-core</artifactId>
|
<artifactId>dependency-check-core</artifactId>
|
||||||
|
|||||||
@@ -341,5 +341,10 @@ Copyright (c) 2012 - Jeremy Long. All Rights Reserved.
|
|||||||
<artifactId>dependency-check-core</artifactId>
|
<artifactId>dependency-check-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.owasp</groupId>
|
||||||
|
<artifactId>dependency-check-utils</artifactId>
|
||||||
|
<version>${project.parent.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -220,6 +220,11 @@ Copyright (c) 2012 Jeremy Long. All Rights Reserved.
|
|||||||
<name>data.directory</name>
|
<name>data.directory</name>
|
||||||
<value>${project.build.directory}/data</value>
|
<value>${project.build.directory}/data</value>
|
||||||
</property>
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>temp.directory</name>
|
||||||
|
<value>${project.build.directory}/temp</value>
|
||||||
|
</property>
|
||||||
|
|
||||||
</systemProperties>
|
</systemProperties>
|
||||||
<includes>
|
<includes>
|
||||||
<include>**/*IntegrationTest.java</include>
|
<include>**/*IntegrationTest.java</include>
|
||||||
@@ -399,6 +404,11 @@ Copyright (c) 2012 Jeremy Long. All Rights Reserved.
|
|||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.owasp</groupId>
|
||||||
|
<artifactId>dependency-check-utils</artifactId>
|
||||||
|
<version>${project.parent.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.lucene</groupId>
|
<groupId>org.apache.lucene</groupId>
|
||||||
<artifactId>lucene-test-framework</artifactId>
|
<artifactId>lucene-test-framework</artifactId>
|
||||||
|
|||||||
@@ -0,0 +1,145 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 OWASP.
|
||||||
|
*
|
||||||
|
* 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.owasp.dependencycheck.utils;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipInputStream;
|
||||||
|
import org.owasp.dependencycheck.Engine;
|
||||||
|
import static org.owasp.dependencycheck.utils.FileUtils.getFileExtension;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jeremy Long <jeremy.long@owasp.org>
|
||||||
|
*/
|
||||||
|
public class ExtractionUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The logger.
|
||||||
|
*/
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(ExtractionUtil.class.getName());
|
||||||
|
/**
|
||||||
|
* The buffer size to use when extracting files from the archive.
|
||||||
|
*/
|
||||||
|
private static final int BUFFER_SIZE = 4096;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private constructor for a utility class.
|
||||||
|
*/
|
||||||
|
private ExtractionUtil() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts the contents of an archive into the specified directory.
|
||||||
|
*
|
||||||
|
* @param archive an archive file such as a WAR or EAR
|
||||||
|
* @param extractTo a directory to extract the contents to
|
||||||
|
* @throws ExtractionException thrown if an exception occurs while extracting the files
|
||||||
|
*/
|
||||||
|
public static void extractFiles(File archive, File extractTo) throws ExtractionException {
|
||||||
|
extractFiles(archive, extractTo, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts the contents of an archive into the specified directory. The files are only extracted if they are
|
||||||
|
* supported by the analyzers loaded into the specified engine. If the engine is specified as null then all files
|
||||||
|
* are extracted.
|
||||||
|
*
|
||||||
|
* @param archive an archive file such as a WAR or EAR
|
||||||
|
* @param extractTo a directory to extract the contents to
|
||||||
|
* @param engine the scanning engine
|
||||||
|
* @throws ExtractionException thrown if there is an error extracting the files
|
||||||
|
*/
|
||||||
|
public static void extractFiles(File archive, File extractTo, Engine engine) throws ExtractionException {
|
||||||
|
if (archive == null || extractTo == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileInputStream fis = null;
|
||||||
|
ZipInputStream zis = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
fis = new FileInputStream(archive);
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
LOGGER.log(Level.FINE, null, ex);
|
||||||
|
throw new ExtractionException("Archive file was not found.", ex);
|
||||||
|
}
|
||||||
|
zis = new ZipInputStream(new BufferedInputStream(fis));
|
||||||
|
ZipEntry entry;
|
||||||
|
try {
|
||||||
|
while ((entry = zis.getNextEntry()) != null) {
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
final File d = new File(extractTo, entry.getName());
|
||||||
|
if (!d.exists() && !d.mkdirs()) {
|
||||||
|
final String msg = String.format("Unable to create '%s'.", d.getAbsolutePath());
|
||||||
|
throw new ExtractionException(msg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
final File file = new File(extractTo, entry.getName());
|
||||||
|
final String ext = getFileExtension(file.getName());
|
||||||
|
if (engine == null || engine.supportsExtension(ext)) {
|
||||||
|
BufferedOutputStream bos = null;
|
||||||
|
FileOutputStream fos;
|
||||||
|
try {
|
||||||
|
fos = new FileOutputStream(file);
|
||||||
|
bos = new BufferedOutputStream(fos, BUFFER_SIZE);
|
||||||
|
int count;
|
||||||
|
final byte data[] = new byte[BUFFER_SIZE];
|
||||||
|
while ((count = zis.read(data, 0, BUFFER_SIZE)) != -1) {
|
||||||
|
bos.write(data, 0, count);
|
||||||
|
}
|
||||||
|
bos.flush();
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
LOGGER.log(Level.FINE, null, ex);
|
||||||
|
final String msg = String.format("Unable to find file '%s'.", file.getName());
|
||||||
|
throw new ExtractionException(msg, ex);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
LOGGER.log(Level.FINE, null, ex);
|
||||||
|
final String msg = String.format("IO Exception while parsing file '%s'.", file.getName());
|
||||||
|
throw new ExtractionException(msg, ex);
|
||||||
|
} finally {
|
||||||
|
if (bos != null) {
|
||||||
|
try {
|
||||||
|
bos.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
LOGGER.log(Level.FINEST, null, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
final String msg = String.format("Exception reading archive '%s'.", archive.getName());
|
||||||
|
LOGGER.log(Level.FINE, msg, ex);
|
||||||
|
throw new ExtractionException(msg, ex);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
zis.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
LOGGER.log(Level.FINEST, null, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -277,6 +277,11 @@ Copyright (c) 2013 Jeremy Long. All Rights Reserved.
|
|||||||
<artifactId>dependency-check-core</artifactId>
|
<artifactId>dependency-check-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.owasp</groupId>
|
||||||
|
<artifactId>dependency-check-utils</artifactId>
|
||||||
|
<version>${project.parent.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-plugin-api</artifactId>
|
<artifactId>maven-plugin-api</artifactId>
|
||||||
|
|||||||
280
dependency-check-utils/pom.xml
Normal file
280
dependency-check-utils/pom.xml
Normal file
@@ -0,0 +1,280 @@
|
|||||||
|
<!--
|
||||||
|
This file is part of dependency-check-utils.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Copyright (c) 2014 - Jeremy Long. All Rights Reserved.
|
||||||
|
-->
|
||||||
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.owasp</groupId>
|
||||||
|
<artifactId>dependency-check-parent</artifactId>
|
||||||
|
<version>1.2.2-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>dependency-check-utils</artifactId>
|
||||||
|
<name>Dependency-Check Utils</name>
|
||||||
|
<description>Dependency-check-utils a collection of common utlity classs used within dependency-check.</description>
|
||||||
|
<!-- begin copy from http://minds.coremedia.com/2012/09/11/problem-solved-deploy-multi-module-maven-project-site-as-github-pages/ -->
|
||||||
|
<distributionManagement>
|
||||||
|
<site>
|
||||||
|
<id>github-pages-site</id>
|
||||||
|
<name>Deployment through GitHub's site deployment plugin</name>
|
||||||
|
<url>${basedir}/../target/site/${project.version}/dependency-check-ant</url>
|
||||||
|
</site>
|
||||||
|
</distributionManagement>
|
||||||
|
<!-- end copy -->
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>cobertura-maven-plugin</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
<configuration>
|
||||||
|
<instrumentation>
|
||||||
|
<ignoreTrivial>true</ignoreTrivial>
|
||||||
|
</instrumentation>
|
||||||
|
<check>
|
||||||
|
<branchRate>85</branchRate>
|
||||||
|
<lineRate>85</lineRate>
|
||||||
|
<haltOnFailure>false</haltOnFailure>
|
||||||
|
<totalBranchRate>85</totalBranchRate>
|
||||||
|
<totalLineRate>85</totalLineRate>
|
||||||
|
<packageLineRate>85</packageLineRate>
|
||||||
|
<packageBranchRate>85</packageBranchRate>
|
||||||
|
<regexes>
|
||||||
|
<regex>
|
||||||
|
<pattern>.*\$.*</pattern>
|
||||||
|
<branchRate>0</branchRate>
|
||||||
|
<lineRate>0</lineRate>
|
||||||
|
</regex>
|
||||||
|
</regexes>
|
||||||
|
</check>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>clean</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.16</version>
|
||||||
|
<configuration>
|
||||||
|
<systemProperties>
|
||||||
|
<property>
|
||||||
|
<name>temp.directory</name>
|
||||||
|
<value>${project.build.directory}/temp</value>
|
||||||
|
</property>
|
||||||
|
</systemProperties>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/*IntegrationTest.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-failsafe-plugin</artifactId>
|
||||||
|
<version>2.16</version>
|
||||||
|
<configuration>
|
||||||
|
<systemProperties>
|
||||||
|
<property>
|
||||||
|
<name>temp.directory</name>
|
||||||
|
<value>${project.build.directory}/temp</value>
|
||||||
|
</property>
|
||||||
|
</systemProperties>
|
||||||
|
<includes>
|
||||||
|
<include>**/*IntegrationTest.java</include>
|
||||||
|
</includes>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>integration-test</goal>
|
||||||
|
<goal>verify</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.1</version>
|
||||||
|
<configuration>
|
||||||
|
<showDeprecation>false</showDeprecation>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-site-plugin</artifactId>
|
||||||
|
<version>3.3</version>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.doxia</groupId>
|
||||||
|
<artifactId>doxia-module-markdown</artifactId>
|
||||||
|
<version>1.5</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<configuration>
|
||||||
|
<skipDeploy>true</skipDeploy>
|
||||||
|
<reportPlugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||||
|
<version>2.7</version>
|
||||||
|
<reportSets>
|
||||||
|
<reportSet>
|
||||||
|
<reports>
|
||||||
|
<report>index</report>
|
||||||
|
<report>summary</report>
|
||||||
|
<report>license</report>
|
||||||
|
<report>help</report>
|
||||||
|
</reports>
|
||||||
|
</reportSet>
|
||||||
|
</reportSets>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>2.9.1</version>
|
||||||
|
<reportSets>
|
||||||
|
<reportSet>
|
||||||
|
<id>default</id>
|
||||||
|
<reports>
|
||||||
|
<report>javadoc</report>
|
||||||
|
</reports>
|
||||||
|
</reportSet>
|
||||||
|
</reportSets>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>versions-maven-plugin</artifactId>
|
||||||
|
<version>2.1</version>
|
||||||
|
<reportSets>
|
||||||
|
<reportSet>
|
||||||
|
<reports>
|
||||||
|
<report>dependency-updates-report</report>
|
||||||
|
<report>plugin-updates-report</report>
|
||||||
|
</reports>
|
||||||
|
</reportSet>
|
||||||
|
</reportSets>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-jxr-plugin</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>cobertura-maven-plugin</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-report-plugin</artifactId>
|
||||||
|
<version>2.16</version>
|
||||||
|
<reportSets>
|
||||||
|
<reportSet>
|
||||||
|
<reports>
|
||||||
|
<report>report-only</report>
|
||||||
|
</reports>
|
||||||
|
</reportSet>
|
||||||
|
</reportSets>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>taglist-maven-plugin</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
<configuration>
|
||||||
|
<tagListOptions>
|
||||||
|
<tagClasses>
|
||||||
|
<tagClass>
|
||||||
|
<displayName>Todo Work</displayName>
|
||||||
|
<tags>
|
||||||
|
<tag>
|
||||||
|
<matchString>todo</matchString>
|
||||||
|
<matchType>ignoreCase</matchType>
|
||||||
|
</tag>
|
||||||
|
<tag>
|
||||||
|
<matchString>FIXME</matchString>
|
||||||
|
<matchType>exact</matchType>
|
||||||
|
</tag>
|
||||||
|
</tags>
|
||||||
|
</tagClass>
|
||||||
|
</tagClasses>
|
||||||
|
</tagListOptions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
|
<version>2.11</version>
|
||||||
|
<configuration>
|
||||||
|
<enableRulesSummary>false</enableRulesSummary>
|
||||||
|
<configLocation>${basedir}/../src/main/config/checkstyle-checks.xml</configLocation>
|
||||||
|
<headerLocation>${basedir}/../src/main/config/checkstyle-header.txt</headerLocation>
|
||||||
|
<suppressionsLocation>${basedir}/../src/main/config/checkstyle-suppressions.xml</suppressionsLocation>
|
||||||
|
<suppressionsFileExpression>checkstyle.suppressions.file</suppressionsFileExpression>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-pmd-plugin</artifactId>
|
||||||
|
<version>3.0.1</version>
|
||||||
|
<configuration>
|
||||||
|
<targetJdk>1.6</targetJdk>
|
||||||
|
<linkXref>true</linkXref>
|
||||||
|
<sourceEncoding>utf-8</sourceEncoding>
|
||||||
|
<rulesets>
|
||||||
|
<ruleset>../src/main/config/dcrules.xml</ruleset>
|
||||||
|
<ruleset>/rulesets/java/basic.xml</ruleset>
|
||||||
|
<ruleset>/rulesets/java/imports.xml</ruleset>
|
||||||
|
<ruleset>/rulesets/java/unusedcode.xml</ruleset>
|
||||||
|
</rulesets>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>findbugs-maven-plugin</artifactId>
|
||||||
|
<version>2.5.3</version>
|
||||||
|
</plugin>
|
||||||
|
</reportPlugins>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.11</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
@@ -17,21 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.owasp.dependencycheck.utils;
|
package org.owasp.dependencycheck.utils;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedOutputStream;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import java.util.zip.ZipEntry;
|
|
||||||
import java.util.zip.ZipInputStream;
|
|
||||||
import org.owasp.dependencycheck.Engine;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A collection of utilities for processing information about files.
|
* A collection of utilities for processing information about files.
|
||||||
@@ -54,11 +46,6 @@ public final class FileUtils {
|
|||||||
*/
|
*/
|
||||||
private static final String BIT_BUCKET_WIN = "NUL";
|
private static final String BIT_BUCKET_WIN = "NUL";
|
||||||
|
|
||||||
/**
|
|
||||||
* The buffer size to use when extracting files from the archive.
|
|
||||||
*/
|
|
||||||
private static final int BUFFER_SIZE = 4096;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private constructor for a utility class.
|
* Private constructor for a utility class.
|
||||||
*/
|
*/
|
||||||
@@ -155,99 +142,6 @@ public final class FileUtils {
|
|||||||
return jarPath.getParentFile();
|
return jarPath.getParentFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the contents of an archive into the specified directory.
|
|
||||||
*
|
|
||||||
* @param archive an archive file such as a WAR or EAR
|
|
||||||
* @param extractTo a directory to extract the contents to
|
|
||||||
* @throws ExtractionException thrown if an exception occurs while extracting the files
|
|
||||||
*/
|
|
||||||
public static void extractFiles(File archive, File extractTo) throws ExtractionException {
|
|
||||||
extractFiles(archive, extractTo, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the contents of an archive into the specified directory. The files are only extracted if they are
|
|
||||||
* supported by the analyzers loaded into the specified engine. If the engine is specified as null then all files
|
|
||||||
* are extracted.
|
|
||||||
*
|
|
||||||
* @param archive an archive file such as a WAR or EAR
|
|
||||||
* @param extractTo a directory to extract the contents to
|
|
||||||
* @param engine the scanning engine
|
|
||||||
* @throws ExtractionException thrown if there is an error extracting the files
|
|
||||||
*/
|
|
||||||
public static void extractFiles(File archive, File extractTo, Engine engine) throws ExtractionException {
|
|
||||||
if (archive == null || extractTo == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FileInputStream fis = null;
|
|
||||||
ZipInputStream zis = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
fis = new FileInputStream(archive);
|
|
||||||
} catch (FileNotFoundException ex) {
|
|
||||||
LOGGER.log(Level.FINE, null, ex);
|
|
||||||
throw new ExtractionException("Archive file was not found.", ex);
|
|
||||||
}
|
|
||||||
zis = new ZipInputStream(new BufferedInputStream(fis));
|
|
||||||
ZipEntry entry;
|
|
||||||
try {
|
|
||||||
while ((entry = zis.getNextEntry()) != null) {
|
|
||||||
if (entry.isDirectory()) {
|
|
||||||
final File d = new File(extractTo, entry.getName());
|
|
||||||
if (!d.exists() && !d.mkdirs()) {
|
|
||||||
final String msg = String.format("Unable to create '%s'.", d.getAbsolutePath());
|
|
||||||
throw new ExtractionException(msg);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
final File file = new File(extractTo, entry.getName());
|
|
||||||
final String ext = getFileExtension(file.getName());
|
|
||||||
if (engine == null || engine.supportsExtension(ext)) {
|
|
||||||
BufferedOutputStream bos = null;
|
|
||||||
FileOutputStream fos;
|
|
||||||
try {
|
|
||||||
fos = new FileOutputStream(file);
|
|
||||||
bos = new BufferedOutputStream(fos, BUFFER_SIZE);
|
|
||||||
int count;
|
|
||||||
final byte data[] = new byte[BUFFER_SIZE];
|
|
||||||
while ((count = zis.read(data, 0, BUFFER_SIZE)) != -1) {
|
|
||||||
bos.write(data, 0, count);
|
|
||||||
}
|
|
||||||
bos.flush();
|
|
||||||
} catch (FileNotFoundException ex) {
|
|
||||||
LOGGER.log(Level.FINE, null, ex);
|
|
||||||
final String msg = String.format("Unable to find file '%s'.", file.getName());
|
|
||||||
throw new ExtractionException(msg, ex);
|
|
||||||
} catch (IOException ex) {
|
|
||||||
LOGGER.log(Level.FINE, null, ex);
|
|
||||||
final String msg = String.format("IO Exception while parsing file '%s'.", file.getName());
|
|
||||||
throw new ExtractionException(msg, ex);
|
|
||||||
} finally {
|
|
||||||
if (bos != null) {
|
|
||||||
try {
|
|
||||||
bos.close();
|
|
||||||
} catch (IOException ex) {
|
|
||||||
LOGGER.log(Level.FINEST, null, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException ex) {
|
|
||||||
final String msg = String.format("Exception reading archive '%s'.", archive.getName());
|
|
||||||
LOGGER.log(Level.FINE, msg, ex);
|
|
||||||
throw new ExtractionException(msg, ex);
|
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
zis.close();
|
|
||||||
} catch (IOException ex) {
|
|
||||||
LOGGER.log(Level.FINEST, null, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the bit bucket for the OS. '/dev/null' for Unix and 'NUL' for Windows
|
* Return the bit bucket for the OS. '/dev/null' for Unix and 'NUL' for Windows
|
||||||
*
|
*
|
||||||
@@ -30,6 +30,7 @@ import java.util.Enumeration;
|
|||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import org.owasp.dependencycheck.utils.FileUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple settings container that wraps the dependencycheck.properties file.
|
* A simple settings container that wraps the dependencycheck.properties file.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* <html>
|
||||||
|
* <head>
|
||||||
|
* <title>org.owasp.dependencycheck.utils</title>
|
||||||
|
* </head>
|
||||||
|
* <body>
|
||||||
|
* Includes various utility classes such as a Settings wrapper, utilities to make URL Connections, etc.
|
||||||
|
* </body>
|
||||||
|
* </html>
|
||||||
|
*/
|
||||||
|
package org.owasp.dependencycheck.utils;
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 OWASP.
|
||||||
|
*
|
||||||
|
* 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.owasp.dependencycheck.utils;
|
||||||
|
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jeremy Long <jeremy.long@owasp.org>
|
||||||
|
*/
|
||||||
|
public class BaseTest {
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void setUpClass() throws Exception {
|
||||||
|
Settings.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void tearDownClass() throws Exception {
|
||||||
|
Settings.cleanup(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,7 +21,6 @@ import java.io.File;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.owasp.dependencycheck.BaseTest;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -19,12 +19,9 @@ package org.owasp.dependencycheck.utils;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.AfterClass;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.owasp.dependencycheck.utils.Downloader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -32,25 +29,9 @@ import org.junit.Test;
|
|||||||
*/
|
*/
|
||||||
public class DownloaderTest {
|
public class DownloaderTest {
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void setUpClass() throws Exception {
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterClass
|
|
||||||
public static void tearDownClass() throws Exception {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void tearDown() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetLastModified_file() throws Exception {
|
public void testGetLastModified_file() throws Exception {
|
||||||
File f = new File("target/test-classes/nvdcve-2.0-2012.xml");
|
File f = new File("target/test-classes/dependencycheck.properties");
|
||||||
URL url = new URL("file:///" + f.getCanonicalPath());
|
URL url = new URL("file:///" + f.getCanonicalPath());
|
||||||
long timestamp = Downloader.getLastModified(url);
|
long timestamp = Downloader.getLastModified(url);
|
||||||
assertTrue("timestamp equal to zero?", timestamp > 0);
|
assertTrue("timestamp equal to zero?", timestamp > 0);
|
||||||
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertFalse;
|
|||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.owasp.dependencycheck.BaseTest;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -22,7 +22,6 @@ import java.io.IOException;
|
|||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.owasp.dependencycheck.BaseTest;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
application.name=${pom.name}
|
||||||
|
application.version=${pom.version}
|
||||||
|
autoupdate=true
|
||||||
|
max.download.threads=3
|
||||||
|
|
||||||
|
#temp.directory defaults to System.getProperty("java.io.tmpdir")
|
||||||
|
#temp.directory=[path to temp directory]
|
||||||
|
|
||||||
|
# the path to the data directory; the [JAR] signifies to use the relative path
|
||||||
|
# to the dependency-check-core JAR file. This path is only used to construct
|
||||||
|
# the connection string for the H2 driver (or other drivers that require a file path
|
||||||
|
# to be supplied. If you are using another database (MySQL, Oracle, etc.) this property
|
||||||
|
# will not be used. The data.directory will be resolved and if the connection string
|
||||||
|
# below contains a %s then the data.directory will replace the %s.
|
||||||
|
data.directory=[JAR]/data
|
||||||
|
data.connection_string=jdbc:h2:file:%s;FILE_LOCK=SERIALIZED;AUTOCOMMIT=ON;
|
||||||
|
#data.connection_string=jdbc:h2:file:%s;AUTO_SERVER=TRUE;AUTOCOMMIT=ON;
|
||||||
|
#data.connection_string=jdbc:mysql://localhost:3306/dependencycheck
|
||||||
|
|
||||||
|
# user name and password for the database connection. The inherent case is to use H2.
|
||||||
|
# As such, this unsecure username/password exist.
|
||||||
|
data.user=dcuser
|
||||||
|
data.password=DC-Pass1337!
|
||||||
|
# The following are only used if the DB Driver is not JDBC4 compliant and/or the driver
|
||||||
|
# is not in the current classpath. Setting these properties will add the give path(s) to
|
||||||
|
# the class loader and then register the driver with the DriverManager. If the class is
|
||||||
|
# not in the path you must specify both the driver name (aka the fully qualified driver name)
|
||||||
|
# and the driver path. The driver path can be a semi-colon separated list of files/directories
|
||||||
|
# to ensure any and all needed files can be added to the classpath to load the driver.
|
||||||
|
# For non-JDBC4 drivers in the classpath only the driver_name needs to be set.
|
||||||
|
# For MOST situations these properties likely do not need to be set.
|
||||||
|
data.driver_name=org.h2.Driver
|
||||||
|
data.driver_path=
|
||||||
|
|
||||||
|
# the path to the cpe xml file
|
||||||
|
cpe.url=http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.2.xml.gz
|
||||||
|
# the path to the cpe meta data file.
|
||||||
|
cpe.meta.url=http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.2.meta
|
||||||
|
|
||||||
|
# the number of days that the modified nvd cve data holds data for. We don't need
|
||||||
|
# to update the other files if we are within this timespan. Per NIST this file
|
||||||
|
# holds 8 days of updates, we are using 7 just to be safe.
|
||||||
|
cve.url.modified.validfordays=7
|
||||||
|
|
||||||
|
# the path to the modified nvd cve xml file.
|
||||||
|
cve.url-1.2.modified=http://nvd.nist.gov/download/nvdcve-modified.xml
|
||||||
|
cve.url-2.0.modified=http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-modified.xml
|
||||||
|
cve.startyear=2014
|
||||||
|
cve.url-2.0.base=http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-%d.xml
|
||||||
|
cve.url-1.2.base=http://nvd.nist.gov/download/nvdcve-%d.xml
|
||||||
|
|
||||||
|
# the URL for searching Nexus for SHA-1 hashes and whether it's enabled
|
||||||
|
analyzer.nexus.enabled=true
|
||||||
|
analyzer.nexus.url=https://repository.sonatype.org/service/local/
|
||||||
|
# If set to true, the proxy will still ONLY be used if the proxy properties (proxy.url, proxy.port)
|
||||||
|
# are configured
|
||||||
|
analyzer.nexus.proxy=true
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
proxy.port=80
|
||||||
5
pom.xml
5
pom.xml
@@ -1,3 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
This file is part of Dependency-Check.
|
This file is part of Dependency-Check.
|
||||||
|
|
||||||
@@ -14,8 +15,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
|
|
||||||
Copyright (c) 2012 - Jeremy Long
|
Copyright (c) 2012 - Jeremy Long
|
||||||
-->
|
--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>org.owasp</groupId>
|
<groupId>org.owasp</groupId>
|
||||||
@@ -29,6 +29,7 @@ Copyright (c) 2012 - Jeremy Long
|
|||||||
<module>dependency-check-ant</module>
|
<module>dependency-check-ant</module>
|
||||||
<module>dependency-check-maven</module>
|
<module>dependency-check-maven</module>
|
||||||
<module>dependency-check-jenkins</module>
|
<module>dependency-check-jenkins</module>
|
||||||
|
<module>dependency-check-utils</module>
|
||||||
</modules>
|
</modules>
|
||||||
<name>Dependency-Check</name>
|
<name>Dependency-Check</name>
|
||||||
<url>https://github.com/jeremylong/DependencyCheck.git</url>
|
<url>https://github.com/jeremylong/DependencyCheck.git</url>
|
||||||
|
|||||||
Reference in New Issue
Block a user