mirror of
https://github.com/ysoftdevs/DependencyCheck.git
synced 2026-01-14 15:53:36 +01:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91a137ab95 | ||
|
|
efd4b8ec11 | ||
|
|
9803c75fbd | ||
|
|
509bbc7743 | ||
|
|
f7a2428ba9 | ||
|
|
c79a9f2ce3 | ||
|
|
685569e131 | ||
|
|
0e28c8e0d5 | ||
|
|
cb25fc03f9 | ||
|
|
7a64b84c5f | ||
|
|
1cac8a857d | ||
|
|
f6e02aec2a | ||
|
|
78f7152f6c | ||
|
|
1f4746c90a | ||
|
|
c5f95e79d6 | ||
|
|
bd4cbc54fb | ||
|
|
17e3e51607 | ||
|
|
b9f5799c1b | ||
|
|
8b6e9b7f76 | ||
|
|
4a02c87c27 |
@@ -21,7 +21,7 @@ Copyright (c) 2013 - Jeremy Long. All Rights Reserved.
|
||||
<parent>
|
||||
<groupId>org.owasp</groupId>
|
||||
<artifactId>dependency-check-parent</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<version>1.1.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dependency-check-ant</artifactId>
|
||||
|
||||
@@ -21,7 +21,7 @@ Copyright (c) 2012 - Jeremy Long. All Rights Reserved.
|
||||
<parent>
|
||||
<groupId>org.owasp</groupId>
|
||||
<artifactId>dependency-check-parent</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<version>1.1.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dependency-check-cli</artifactId>
|
||||
|
||||
@@ -21,7 +21,7 @@ Copyright (c) 2012 Jeremy Long. All Rights Reserved.
|
||||
<parent>
|
||||
<groupId>org.owasp</groupId>
|
||||
<artifactId>dependency-check-parent</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<version>1.1.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dependency-check-core</artifactId>
|
||||
|
||||
@@ -81,10 +81,17 @@ public class ArchiveAnalyzer extends AbstractAnalyzer implements Analyzer {
|
||||
* The phase that this analyzer is intended to run in.
|
||||
*/
|
||||
private static final AnalysisPhase ANALYSIS_PHASE = AnalysisPhase.INITIAL;
|
||||
/**
|
||||
* The set of things we can handle with Zip methods
|
||||
*/
|
||||
private static final Set<String> ZIPPABLES = newHashSet("zip", "ear", "war", "nupkg");
|
||||
/**
|
||||
* The set of file extensions supported by this analyzer.
|
||||
*/
|
||||
private static final Set<String> EXTENSIONS = newHashSet("zip", "ear", "war", "tar", "gz", "tgz");
|
||||
private static final Set<String> EXTENSIONS = newHashSet("tar", "gz", "tgz");
|
||||
static {
|
||||
EXTENSIONS.addAll(ZIPPABLES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of file EXTENSIONS supported by this analyzer.
|
||||
@@ -251,7 +258,7 @@ public class ArchiveAnalyzer extends AbstractAnalyzer implements Analyzer {
|
||||
}
|
||||
final String archiveExt = org.owasp.dependencycheck.utils.FileUtils.getFileExtension(archive.getName()).toLowerCase();
|
||||
try {
|
||||
if ("zip".equals(archiveExt) || "war".equals(archiveExt) || "ear".equals(archiveExt)) {
|
||||
if (ZIPPABLES.contains(archiveExt)) {
|
||||
extractArchive(new ZipArchiveInputStream(new BufferedInputStream(fis)), destination, engine);
|
||||
} else if ("tar".equals(archiveExt)) {
|
||||
extractArchive(new TarArchiveInputStream(new BufferedInputStream(fis)), destination, engine);
|
||||
|
||||
@@ -13,20 +13,27 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Copyright (c) 2012 Jeremy Long. All Rights Reserved.
|
||||
* Copyright (c) 2014 Jeremy Long. All Rights Reserved.
|
||||
*/
|
||||
package org.owasp.dependencycheck.analyzer;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
import org.owasp.dependencycheck.Engine;
|
||||
import org.owasp.dependencycheck.dependency.Dependency;
|
||||
|
||||
/**
|
||||
*
|
||||
* Used to load a JAR file and collect information that can be used to determine the associated CPE.
|
||||
* Used to analyze a JavaScript file to gather information to aid in identification of a CPE identifier.
|
||||
*
|
||||
* @author Jeremy Long <jeremy.long@owasp.org>
|
||||
* @author Jeremy Long (jeremy.long@owasp.org)
|
||||
*/
|
||||
public class JavaScriptAnalyzer extends AbstractAnalyzer implements Analyzer {
|
||||
|
||||
@@ -49,6 +56,7 @@ public class JavaScriptAnalyzer extends AbstractAnalyzer implements Analyzer {
|
||||
*
|
||||
* @return a list of file EXTENSIONS supported by this analyzer.
|
||||
*/
|
||||
@Override
|
||||
public Set<String> getSupportedExtensions() {
|
||||
return EXTENSIONS;
|
||||
}
|
||||
@@ -58,6 +66,7 @@ public class JavaScriptAnalyzer extends AbstractAnalyzer implements Analyzer {
|
||||
*
|
||||
* @return the name of the analyzer.
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return ANALYZER_NAME;
|
||||
}
|
||||
@@ -68,6 +77,7 @@ public class JavaScriptAnalyzer extends AbstractAnalyzer implements Analyzer {
|
||||
* @param extension the file extension to test for support.
|
||||
* @return whether or not the specified file extension is supported by this analyzer.
|
||||
*/
|
||||
@Override
|
||||
public boolean supportsExtension(String extension) {
|
||||
return EXTENSIONS.contains(extension);
|
||||
}
|
||||
@@ -77,42 +87,45 @@ public class JavaScriptAnalyzer extends AbstractAnalyzer implements Analyzer {
|
||||
*
|
||||
* @return the phase that the analyzer is intended to run in.
|
||||
*/
|
||||
@Override
|
||||
public AnalysisPhase getAnalysisPhase() {
|
||||
return ANALYSIS_PHASE;
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
/**
|
||||
* Loads a specified JAR file and collects information from the manifest and checksums to identify the correct CPE
|
||||
* information.
|
||||
* Loads a specified JavaScript file and collects information from the copyright information contained within.
|
||||
*
|
||||
* @param dependency the dependency to analyze.
|
||||
* @param engine the engine that is scanning the dependencies
|
||||
* @throws AnalysisException is thrown if there is an error reading the JAR file.
|
||||
* @throws AnalysisException is thrown if there is an error reading the JavaScript file.
|
||||
*/
|
||||
@Override
|
||||
public void analyze(Dependency dependency, Engine engine) throws AnalysisException {
|
||||
final Pattern extractComments = Pattern.compile("(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/)|(//.*)");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The initialize method does nothing for this Analyzer.
|
||||
*
|
||||
* @throws Exception thrown if there is an exception
|
||||
*/
|
||||
@Override
|
||||
public void initialize() throws Exception {
|
||||
//do nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* The close method does nothing for this Analyzer.
|
||||
*
|
||||
* @throws Exception thrown if there is an exception
|
||||
*/
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
//do nothing
|
||||
BufferedReader fin = null;;
|
||||
try {
|
||||
// /\*([^\*][^/]|[\r\n\f])+?\*/
|
||||
final Pattern extractComments = Pattern.compile("(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/)|(//.*)", Pattern.MULTILINE);
|
||||
File file = dependency.getActualFile();
|
||||
fin = new BufferedReader(new FileReader(file));
|
||||
StringBuilder sb = new StringBuilder(2000);
|
||||
String text;
|
||||
while ((text = fin.readLine()) != null) {
|
||||
sb.append(text);
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
final String msg = String.format("Dependency file not found: '%s'", dependency.getActualFilePath());
|
||||
throw new AnalysisException(msg, ex);
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(JavaScriptAnalyzer.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} finally {
|
||||
if (fin != null) {
|
||||
try {
|
||||
fin.close();
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(JavaScriptAnalyzer.class.getName()).log(Level.FINEST, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.owasp.dependencycheck.analyzer;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.owasp.dependencycheck.Engine;
|
||||
import org.owasp.dependencycheck.data.nuget.NugetPackage;
|
||||
import org.owasp.dependencycheck.data.nuget.NuspecParser;
|
||||
import org.owasp.dependencycheck.data.nuget.XPathNuspecParser;
|
||||
import org.owasp.dependencycheck.dependency.Confidence;
|
||||
import org.owasp.dependencycheck.dependency.Dependency;
|
||||
|
||||
/**
|
||||
* Analyzer which will parse a Nuspec file to gather module information.
|
||||
*
|
||||
* @author colezlaw
|
||||
*/
|
||||
public class NuspecAnalyzer extends AbstractAnalyzer {
|
||||
|
||||
/**
|
||||
* The logger
|
||||
*/
|
||||
private static final Logger LOGGER = Logger.getLogger(NuspecAnalyzer.class.getName());
|
||||
|
||||
/**
|
||||
* The name of the analyzer
|
||||
*/
|
||||
private static final String ANALYZER_NAME = "Nuspec Analyzer";
|
||||
|
||||
/**
|
||||
* The phase in which the analyzer runs
|
||||
*/
|
||||
private static final AnalysisPhase ANALYSIS_PHASE = AnalysisPhase.INFORMATION_COLLECTION;
|
||||
|
||||
/**
|
||||
* The types of files on which this will work.
|
||||
*/
|
||||
private static final Set<String> SUPPORTED_EXTENSIONS = newHashSet("nuspec");
|
||||
|
||||
/**
|
||||
* Initializes the analyzer once before any analysis is performed.
|
||||
*
|
||||
* @throws Exception if there's an error during initialization
|
||||
*/
|
||||
@Override
|
||||
public void initialize() throws Exception {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the analyzer's name.
|
||||
*
|
||||
* @return the name of the analyzer
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return ANALYZER_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the analysis phase under which the analyzer runs.
|
||||
*
|
||||
* @return the phase under which this analyzer runs
|
||||
*/
|
||||
@Override
|
||||
public AnalysisPhase getAnalysisPhase() {
|
||||
return ANALYSIS_PHASE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the extensions for which this Analyzer runs.
|
||||
*
|
||||
* @return the extensions for which this Analyzer runs
|
||||
*/
|
||||
@Override
|
||||
public Set<String> getSupportedExtensions() {
|
||||
return SUPPORTED_EXTENSIONS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the incoming extension is supported.
|
||||
*
|
||||
* @param extension the extension to check for support
|
||||
* @return whether the extension is supported
|
||||
*/
|
||||
@Override
|
||||
public boolean supportsExtension(String extension) {
|
||||
return SUPPORTED_EXTENSIONS.contains(extension);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the analysis.
|
||||
*
|
||||
* @param dependency the dependency to analyze
|
||||
* @param engine the engine
|
||||
* @throws AnalysisException when there's an exception during analysis
|
||||
*/
|
||||
@Override
|
||||
public void analyze(Dependency dependency, Engine engine) throws AnalysisException {
|
||||
LOGGER.log(Level.INFO, "Checking Nuspec file {0}", dependency.toString());
|
||||
try {
|
||||
final NuspecParser parser = new XPathNuspecParser();
|
||||
NugetPackage np = null;
|
||||
FileInputStream fis = null;
|
||||
try {
|
||||
fis = new FileInputStream(dependency.getActualFilePath());
|
||||
np = parser.parse(fis);
|
||||
} finally {
|
||||
if (fis != null) {
|
||||
try { fis.close(); } catch (Exception e) { }
|
||||
}
|
||||
}
|
||||
|
||||
if (np.getOwners() != null) {
|
||||
dependency.getVendorEvidence().addEvidence("nuspec", "owners", np.getOwners(), Confidence.HIGHEST);
|
||||
}
|
||||
dependency.getVendorEvidence().addEvidence("nuspec", "authors", np.getAuthors(), Confidence.HIGH);
|
||||
dependency.getVersionEvidence().addEvidence("nuspec", "version", np.getVersion(), Confidence.HIGHEST);
|
||||
dependency.getProductEvidence().addEvidence("nuspec", "id", np.getId(), Confidence.HIGHEST);
|
||||
if (np.getTitle() != null) {
|
||||
dependency.getProductEvidence().addEvidence("nuspec", "title", np.getTitle(), Confidence.MEDIUM);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new AnalysisException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// vim: cc=120:sw=4:ts=4:sts=4
|
||||
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.owasp.dependencycheck.data.nuget;
|
||||
|
||||
/**
|
||||
* Represents the contents of a Nuspec manifest.
|
||||
*
|
||||
* @author colezlaw
|
||||
*/
|
||||
public class NugetPackage {
|
||||
/**
|
||||
* The id.
|
||||
*/
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* The version.
|
||||
*/
|
||||
private String version;
|
||||
|
||||
/**
|
||||
* The title.
|
||||
*/
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* The authors.
|
||||
*/
|
||||
private String authors;
|
||||
|
||||
/**
|
||||
* The owners.
|
||||
*/
|
||||
private String owners;
|
||||
|
||||
/**
|
||||
* The licenseUrl.
|
||||
*/
|
||||
private String licenseUrl;
|
||||
|
||||
/**
|
||||
* Creates an empty NugetPackage.
|
||||
*/
|
||||
public NugetPackage() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the id.
|
||||
* @param id the id
|
||||
*/
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the id.
|
||||
* @return the id
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the version.
|
||||
* @param version the version
|
||||
*/
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the version.
|
||||
* @return the version
|
||||
*/
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the title.
|
||||
* @param title the title
|
||||
*/
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the title.
|
||||
* @return the title
|
||||
*/
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the authors.
|
||||
* @param authors the authors
|
||||
*/
|
||||
public void setAuthors(String authors) {
|
||||
this.authors = authors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the authors.
|
||||
* @return the authors
|
||||
*/
|
||||
public String getAuthors() {
|
||||
return authors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the owners.
|
||||
* @param owners the owners
|
||||
*/
|
||||
public void setOwners(String owners) {
|
||||
this.owners = owners;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the owners.
|
||||
* @return the owners
|
||||
*/
|
||||
public String getOwners() {
|
||||
return owners;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the licenseUrl.
|
||||
* @param licenseUrl the licenseUrl
|
||||
*/
|
||||
public void setLicenseUrl(String licenseUrl) {
|
||||
this.licenseUrl = licenseUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the licenseUrl.
|
||||
* @return the licenseUrl
|
||||
*/
|
||||
public String getLicenseUrl() {
|
||||
return licenseUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (this == other) {
|
||||
return true;
|
||||
}
|
||||
if (other == null || other.getClass() != this.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final NugetPackage o = (NugetPackage) other;
|
||||
return o.getId().equals(id)
|
||||
&& o.getVersion().equals(version)
|
||||
&& o.getTitle().equals(title)
|
||||
&& o.getAuthors().equals(authors)
|
||||
&& o.getOwners().equals(owners)
|
||||
&& o.getLicenseUrl().equals(licenseUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 31 * hash + (null == id ? 0 : id.hashCode());
|
||||
hash = 31 * hash + (null == version ? 0 : version.hashCode());
|
||||
hash = 31 * hash + (null == title ? 0 : title.hashCode());
|
||||
hash = 31 * hash + (null == authors ? 0 : authors.hashCode());
|
||||
hash = 31 * hash + (null == owners ? 0 : owners.hashCode());
|
||||
hash = 31 * hash + (null == licenseUrl ? 0 : licenseUrl.hashCode());
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.owasp.dependencycheck.data.nuget;
|
||||
|
||||
/**
|
||||
* Exception during the parsing of a Nuspec file.
|
||||
*
|
||||
* @author colezlaw
|
||||
*/
|
||||
public class NuspecParseException extends Exception {
|
||||
/**
|
||||
* The serialVersionUID
|
||||
*/
|
||||
private static final long serialVersionUID = 1;
|
||||
|
||||
/**
|
||||
* Constructs a new exception with <code>null</code> as its detail message.
|
||||
*
|
||||
* The cause is not initialized, and may subsequently be initialized by a call
|
||||
* to {@link java.lang.Throwable#initCause(java.lang.Throwable)}.
|
||||
*/
|
||||
public NuspecParseException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new exception with the specified detail message. The cause is
|
||||
* not initialized, and may subsequently be initialized by a call to
|
||||
* {@link java.lang.Throwable#initCause(java.lang.Throwable).
|
||||
*
|
||||
* @param message the detail message. The detail message is saved for later retrieval
|
||||
* by the {@link java.lang.Throwable#getMessage()} method.
|
||||
*/
|
||||
public NuspecParseException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new exception with the specified detail message and cause.
|
||||
*
|
||||
* Note that the detail message associated with <code>cause</code> is <em>not</em>
|
||||
* automatically incorporated in this exception's detail message.
|
||||
*
|
||||
* @param message the detail message (whcih is saved for later retrieval by the
|
||||
* {@link java.lang.Throwable#getMessage()} method.
|
||||
* @param cause the cause (which is saved for later retrieval by the
|
||||
* {@link java.lang.Throwable#getCause()} method). (A <code>null</code> value is permitted,
|
||||
* and indicates that the cause is nonexistent or unknown).
|
||||
*/
|
||||
public NuspecParseException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.owasp.dependencycheck.data.nuget;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* Interface defining methods for parsing a Nuspec file.
|
||||
*
|
||||
* @author willstranathan
|
||||
*
|
||||
*/
|
||||
public interface NuspecParser {
|
||||
/**
|
||||
* Parse an input stream and return the resulting {@link NugetPackage}.
|
||||
*
|
||||
* @param stream the input stream to parse
|
||||
* @return the populated bean
|
||||
* @throws NuspecParseException when an exception occurs
|
||||
*/
|
||||
NugetPackage parse(InputStream stream) throws NuspecParseException;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.owasp.dependencycheck.data.nuget;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.xpath.XPath;
|
||||
import javax.xml.xpath.XPathConstants;
|
||||
import javax.xml.xpath.XPathFactory;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
/**
|
||||
* Parse a Nuspec file using XPath.
|
||||
*
|
||||
* @author willstranathan
|
||||
*/
|
||||
public class XPathNuspecParser implements NuspecParser {
|
||||
/**
|
||||
* Gets the string value of a node or null if it's not present
|
||||
*
|
||||
* @param n the node to test
|
||||
* @return the string content of the node, or null if the node itself is null
|
||||
*/
|
||||
private String getOrNull(Node n) {
|
||||
if (n != null) {
|
||||
return n.getTextContent();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse an input stream and return the resulting {@link NugetPackage}.
|
||||
*
|
||||
* @param stream the input stream to parse
|
||||
* @return the populated bean
|
||||
* @throws NuspecParseException when an exception occurs
|
||||
*/
|
||||
@Override
|
||||
public NugetPackage parse(InputStream stream) throws NuspecParseException {
|
||||
try {
|
||||
final Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(stream);
|
||||
final XPath xpath = XPathFactory.newInstance().newXPath();
|
||||
final NugetPackage nuspec = new NugetPackage();
|
||||
|
||||
if (xpath.evaluate("/package/metadata/id", d, XPathConstants.NODE) == null
|
||||
|| xpath.evaluate("/package/metadata/version", d, XPathConstants.NODE) == null
|
||||
|| xpath.evaluate("/package/metadata/authors", d, XPathConstants.NODE) == null
|
||||
|| xpath.evaluate("/package/metadata/description", d, XPathConstants.NODE) == null) {
|
||||
throw new NuspecParseException("Invalid Nuspec format");
|
||||
}
|
||||
|
||||
nuspec.setId(xpath.evaluate("/package/metadata/id", d));
|
||||
nuspec.setVersion(xpath.evaluate("/package/metadata/version", d));
|
||||
nuspec.setAuthors(xpath.evaluate("/package/metadata/authors", d));
|
||||
nuspec.setOwners(getOrNull((Node) xpath.evaluate("/package/metadata/owners", d, XPathConstants.NODE)));
|
||||
nuspec.setLicenseUrl(getOrNull((Node) xpath.evaluate("/package/metadata/licenseUrl", d, XPathConstants.NODE)));
|
||||
nuspec.setTitle(getOrNull((Node) xpath.evaluate("/package/metadata/title", d, XPathConstants.NODE)));
|
||||
return nuspec;
|
||||
} catch (Exception e) {
|
||||
throw new NuspecParseException("Unable to parse nuspec", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* <html>
|
||||
* <head>
|
||||
* <title>org.owasp.dependencycheck.data.nuget</title>
|
||||
* </head>
|
||||
* <body>
|
||||
* <p>
|
||||
* Contains classes related to parsing Nuget related files</p>
|
||||
* <p>
|
||||
* These are used to abstract away Nuget-related handling from Dependency Check
|
||||
* so they can be used elsewhere.</p>
|
||||
* </body>
|
||||
* </html>
|
||||
*/
|
||||
package org.owasp.dependencycheck.data.nuget;
|
||||
@@ -145,6 +145,15 @@ public class Dependency implements Comparable<Dependency> {
|
||||
return this.actualFilePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a reference to the File object.
|
||||
*
|
||||
* @return the File object.
|
||||
*/
|
||||
public File getActualFile() {
|
||||
return new File(this.actualFilePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file path of the dependency.
|
||||
*
|
||||
|
||||
@@ -184,13 +184,21 @@ public class VulnerableSoftware extends IndexEntry implements Serializable, Comp
|
||||
if (subMax > 0) {
|
||||
for (int x = 0; result == 0 && x < subMax; x++) {
|
||||
if (isPositiveInteger(subLeft[x]) && isPositiveInteger(subRight[x])) {
|
||||
final int iLeft = Integer.parseInt(subLeft[x]);
|
||||
final int iRight = Integer.parseInt(subRight[x]);
|
||||
if (iLeft != iRight) {
|
||||
if (iLeft > iRight) {
|
||||
result = 2;
|
||||
} else {
|
||||
result = -2;
|
||||
try {
|
||||
result = Long.valueOf(subLeft[x]).compareTo(Long.valueOf(subRight[x]));
|
||||
// final long iLeft = Long.parseLong(subLeft[x]);
|
||||
// final long iRight = Long.parseLong(subRight[x]);
|
||||
// if (iLeft != iRight) {
|
||||
// if (iLeft > iRight) {
|
||||
// result = 2;
|
||||
// } else {
|
||||
// result = -2;
|
||||
// }
|
||||
// }
|
||||
} catch (NumberFormatException ex) {
|
||||
//ignore the exception - they obviously aren't numbers
|
||||
if (!subLeft[x].equalsIgnoreCase(subRight[x])) {
|
||||
result = subLeft[x].compareToIgnoreCase(subRight[x]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -9,3 +9,4 @@ org.owasp.dependencycheck.analyzer.DependencyBundlingAnalyzer
|
||||
org.owasp.dependencycheck.analyzer.NvdCveAnalyzer
|
||||
org.owasp.dependencycheck.analyzer.VulnerabilitySuppressionAnalyzer
|
||||
org.owasp.dependencycheck.analyzer.NexusAnalyzer
|
||||
org.owasp.dependencycheck.analyzer.NuspecAnalyzer
|
||||
|
||||
@@ -69,6 +69,7 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
expResult.add("zip");
|
||||
expResult.add("war");
|
||||
expResult.add("ear");
|
||||
expResult.add("nupkg");
|
||||
expResult.add("tar");
|
||||
expResult.add("gz");
|
||||
expResult.add("tgz");
|
||||
@@ -110,6 +111,10 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
extension = "zip"; //supported
|
||||
result = instance.supportsExtension(extension);
|
||||
assertEquals(expResult, result);
|
||||
|
||||
extension = "nupkg"; //supported
|
||||
result = instance.supportsExtension(extension);
|
||||
assertEquals(expResult, result);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,6 +153,7 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
File file = new File(this.getClass().getClassLoader().getResource("daytrader-ear-2.1.7.ear").getPath());
|
||||
Dependency dependency = new Dependency(file);
|
||||
Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, false);
|
||||
Settings.setBoolean(Settings.KEYS.ANALYZER_NEXUS_ENABLED, false);
|
||||
Engine engine = new Engine();
|
||||
|
||||
int initial_size = engine.getDependencies().size();
|
||||
@@ -174,6 +180,7 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
File file = new File(this.getClass().getClassLoader().getResource("stagedhttp-modified.tar").getPath());
|
||||
Dependency dependency = new Dependency(file);
|
||||
Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, false);
|
||||
Settings.setBoolean(Settings.KEYS.ANALYZER_NEXUS_ENABLED, false);
|
||||
Engine engine = new Engine();
|
||||
|
||||
int initial_size = engine.getDependencies().size();
|
||||
@@ -199,6 +206,7 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
File file = new File(this.getClass().getClassLoader().getResource("file.tar.gz").getPath());
|
||||
//Dependency dependency = new Dependency(file);
|
||||
Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, false);
|
||||
Settings.setBoolean(Settings.KEYS.ANALYZER_NEXUS_ENABLED, false);
|
||||
Engine engine = new Engine();
|
||||
|
||||
int initial_size = engine.getDependencies().size();
|
||||
@@ -214,6 +222,27 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Test of analyze method, of class ArchiveAnalyzer.
|
||||
// */
|
||||
// @Test
|
||||
// public void testNestedZipFolder() throws Exception {
|
||||
// ArchiveAnalyzer instance = new ArchiveAnalyzer();
|
||||
// try {
|
||||
// instance.initialize();
|
||||
//
|
||||
// File file = new File(this.getClass().getClassLoader().getResource("nested.zip").getPath());
|
||||
// Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, false);
|
||||
// Settings.setBoolean(Settings.KEYS.ANALYZER_NEXUS_ENABLED, false);
|
||||
// Engine engine = new Engine();
|
||||
//
|
||||
// engine.scan(file);
|
||||
// engine.analyzeDependencies();
|
||||
//
|
||||
// } finally {
|
||||
// instance.close();
|
||||
// }
|
||||
// }
|
||||
/**
|
||||
* Test of analyze method, of class ArchiveAnalyzer.
|
||||
*/
|
||||
@@ -225,6 +254,7 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
|
||||
File file = new File(this.getClass().getClassLoader().getResource("file.tgz").getPath());
|
||||
Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, false);
|
||||
Settings.setBoolean(Settings.KEYS.ANALYZER_NEXUS_ENABLED, false);
|
||||
Engine engine = new Engine();
|
||||
|
||||
int initial_size = engine.getDependencies().size();
|
||||
@@ -251,6 +281,7 @@ public class ArchiveAnalyzerTest extends BaseIndexTestCase {
|
||||
File file = new File(this.getClass().getClassLoader().getResource("test.zip").getPath());
|
||||
Dependency dependency = new Dependency(file);
|
||||
Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, false);
|
||||
Settings.setBoolean(Settings.KEYS.ANALYZER_NEXUS_ENABLED, false);
|
||||
Engine engine = new Engine();
|
||||
int initial_size = engine.getDependencies().size();
|
||||
// boolean failed = false;
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.owasp.dependencycheck.analyzer;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.owasp.dependencycheck.Engine;
|
||||
import org.owasp.dependencycheck.dependency.Dependency;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jeremy Long (jeremy.long@owasp.org)
|
||||
*/
|
||||
public class JavaScriptAnalyzerTest {
|
||||
|
||||
public JavaScriptAnalyzerTest() {
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpClass() {
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDownClass() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getSupportedExtensions method, of class JavaScriptAnalyzer.
|
||||
*/
|
||||
@Test
|
||||
public void testGetSupportedExtensions() {
|
||||
JavaScriptAnalyzer instance = new JavaScriptAnalyzer();
|
||||
Set expResult = new HashSet<String>();
|
||||
expResult.add("js");
|
||||
Set result = instance.getSupportedExtensions();
|
||||
assertEquals(expResult, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getName method, of class JavaScriptAnalyzer.
|
||||
*/
|
||||
@Test
|
||||
public void testGetName() {
|
||||
System.out.println("getName");
|
||||
JavaScriptAnalyzer instance = new JavaScriptAnalyzer();
|
||||
String expResult = "JavaScript Analyzer";
|
||||
String result = instance.getName();
|
||||
assertEquals(expResult, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of supportsExtension method, of class JavaScriptAnalyzer.
|
||||
*/
|
||||
@Test
|
||||
public void testSupportsExtension() {
|
||||
String extension = "js";
|
||||
JavaScriptAnalyzer instance = new JavaScriptAnalyzer();
|
||||
boolean expResult = true;
|
||||
boolean result = instance.supportsExtension(extension);
|
||||
assertEquals(expResult, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getAnalysisPhase method, of class JavaScriptAnalyzer.
|
||||
*/
|
||||
@Test
|
||||
public void testGetAnalysisPhase() {
|
||||
JavaScriptAnalyzer instance = new JavaScriptAnalyzer();
|
||||
AnalysisPhase expResult = AnalysisPhase.INFORMATION_COLLECTION;
|
||||
AnalysisPhase result = instance.getAnalysisPhase();
|
||||
assertEquals(expResult, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of analyze method, of class JavaScriptAnalyzer.
|
||||
*/
|
||||
@Test
|
||||
public void testAnalyze() throws Exception {
|
||||
File jq6 = new File(this.getClass().getClassLoader().getResource("jquery-1.6.2.min.js").getPath());
|
||||
File jq10 = new File(this.getClass().getClassLoader().getResource("jquery-1.10.2.js").getPath());
|
||||
File jq10min = new File(this.getClass().getClassLoader().getResource("jquery-1.10.2.min.js").getPath());
|
||||
Dependency depJQ6 = new Dependency(jq6);
|
||||
Dependency depJQ10 = new Dependency(jq10);
|
||||
Dependency depJQ10min = new Dependency(jq10min);
|
||||
Engine engine = null;
|
||||
JavaScriptAnalyzer instance = new JavaScriptAnalyzer();
|
||||
|
||||
// assertTrue(depJQ6.getEvidence().size() == 0);
|
||||
// assertTrue(depJQ10.getEvidence().size() == 0);
|
||||
// assertTrue(depJQ10min.getEvidence().size() == 0);
|
||||
//
|
||||
// instance.analyze(depJQ6, engine);
|
||||
// instance.analyze(depJQ10, engine);
|
||||
// instance.analyze(depJQ10min, engine);
|
||||
// //TODO improve the assertions
|
||||
// assertTrue(depJQ6.getEvidence().size() > 0);
|
||||
// assertTrue(depJQ10.getEvidence().size() > 0);
|
||||
// assertTrue(depJQ10min.getEvidence().size() > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of initialize method, of class JavaScriptAnalyzer.
|
||||
*/
|
||||
@Test
|
||||
public void testInitialize() throws Exception {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of close method, of class JavaScriptAnalyzer.
|
||||
*/
|
||||
@Test
|
||||
public void testClose() throws Exception {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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) 2013 Jeremy Long. All Rights Reserved.
|
||||
*/
|
||||
package org.owasp.dependencycheck.analyzer;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class NuspecAnalyzerTest {
|
||||
private NuspecAnalyzer instance;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
instance = new NuspecAnalyzer();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAnalyzerName() {
|
||||
assertEquals("Nuspec Analyzer", instance.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSupportedExtensions() {
|
||||
assertTrue(instance.getSupportedExtensions().contains("nuspec"));
|
||||
assertFalse(instance.getSupportedExtensions().contains("nupkg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSupportsExtension() {
|
||||
assertTrue(instance.supportsExtension("nuspec"));
|
||||
assertFalse(instance.supportsExtension("nupkg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAnalysisPhaze() {
|
||||
assertEquals(AnalysisPhase.INFORMATION_COLLECTION, instance.getAnalysisPhase());
|
||||
}
|
||||
}
|
||||
|
||||
// vim: cc=120:sw=4:ts=4:sts=4
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* This file is part of dependency-check-core.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.owasp.dependencycheck.data.nuget;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author willstranathan
|
||||
*
|
||||
*/
|
||||
public class XPathNuspecParserTest {
|
||||
/**
|
||||
* Test all the valid components.
|
||||
*
|
||||
* @throws Exception if anything goes sideways.
|
||||
*/
|
||||
@Test
|
||||
public void testGoodDocument() throws Exception {
|
||||
NuspecParser parser = new XPathNuspecParser();
|
||||
InputStream is = XPathNuspecParserTest.class.getClassLoader().getResourceAsStream("log4net.2.0.3.nuspec");
|
||||
NugetPackage np = parser.parse(is);
|
||||
assertEquals("log4net", np.getId());
|
||||
assertEquals("2.0.3", np.getVersion());
|
||||
assertEquals("log4net [1.2.13]", np.getTitle());
|
||||
assertEquals("Apache Software Foundation", np.getAuthors());
|
||||
assertEquals("Apache Software Foundation", np.getOwners());
|
||||
assertEquals("http://logging.apache.org/log4net/license.html", np.getLicenseUrl());
|
||||
}
|
||||
|
||||
/**
|
||||
* Expect a NuspecParseException when what we pass isn't even XML.
|
||||
*
|
||||
* @throws Exception we expect this.
|
||||
*/
|
||||
@Test(expected=NuspecParseException.class)
|
||||
public void testMissingDocument() throws Exception {
|
||||
NuspecParser parser = new XPathNuspecParser();
|
||||
InputStream is = XPathNuspecParserTest.class.getClassLoader().getResourceAsStream("dependencycheck.properties");
|
||||
NugetPackage np = parser.parse(is);
|
||||
}
|
||||
|
||||
/**
|
||||
* Expect a NuspecParseException when it's valid XML, but not a Nuspec.
|
||||
*
|
||||
* @throws Exception we expect this.
|
||||
*/
|
||||
@Test(expected=NuspecParseException.class)
|
||||
public void testNotNuspec() throws Exception {
|
||||
NuspecParser parser = new XPathNuspecParser();
|
||||
InputStream is = XPathNuspecParserTest.class.getClassLoader().getResourceAsStream("suppressions.xml");
|
||||
NugetPackage np = parser.parse(is);
|
||||
}
|
||||
}
|
||||
@@ -87,5 +87,13 @@ public class VulnerableSoftwareTest {
|
||||
int expResult = -2;
|
||||
int result = instance.compareTo(vs);
|
||||
assertEquals(expResult, result);
|
||||
|
||||
vs = new VulnerableSoftware();
|
||||
vs.setCpe("cpe:/a:yahoo:toolbar:3.1.0.20130813024103");
|
||||
instance = new VulnerableSoftware();
|
||||
instance.setCpe("cpe:/a:yahoo:toolbar:3.1.0.20130813024104");
|
||||
expResult = 1;
|
||||
result = instance.compareTo(vs);
|
||||
assertEquals(expResult, result);
|
||||
}
|
||||
}
|
||||
|
||||
9789
dependency-check-core/src/test/resources/jquery-1.10.2.js
vendored
Normal file
9789
dependency-check-core/src/test/resources/jquery-1.10.2.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
dependency-check-core/src/test/resources/jquery-1.10.2.min.js
vendored
Normal file
6
dependency-check-core/src/test/resources/jquery-1.10.2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
18
dependency-check-core/src/test/resources/jquery-1.6.2.min.js
vendored
Normal file
18
dependency-check-core/src/test/resources/jquery-1.6.2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
911
dependency-check-core/src/test/resources/jquery.prettyPhoto.js
Normal file
911
dependency-check-core/src/test/resources/jquery.prettyPhoto.js
Normal file
@@ -0,0 +1,911 @@
|
||||
/* ------------------------------------------------------------------------
|
||||
Class: prettyPhoto
|
||||
Use: Lightbox clone for jQuery
|
||||
Author: Stephane Caron (http://www.no-margin-for-errors.com)
|
||||
Version: 3.1.5
|
||||
------------------------------------------------------------------------- */
|
||||
(function($) {
|
||||
$.prettyPhoto = {version: '3.1.5'};
|
||||
|
||||
$.fn.prettyPhoto = function(pp_settings) {
|
||||
pp_settings = jQuery.extend({
|
||||
hook: 'rel', /* the attribute tag to use for prettyPhoto hooks. default: 'rel'. For HTML5, use "data-rel" or similar. */
|
||||
animation_speed: 'fast', /* fast/slow/normal */
|
||||
ajaxcallback: function() {},
|
||||
slideshow: 5000, /* false OR interval time in ms */
|
||||
autoplay_slideshow: false, /* true/false */
|
||||
opacity: 0.80, /* Value between 0 and 1 */
|
||||
show_title: true, /* true/false */
|
||||
allow_resize: true, /* Resize the photos bigger than viewport. true/false */
|
||||
allow_expand: true, /* Allow the user to expand a resized image. true/false */
|
||||
default_width: 500,
|
||||
default_height: 344,
|
||||
counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
|
||||
theme: 'pp_default', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
|
||||
horizontal_padding: 20, /* The padding on each side of the picture */
|
||||
hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */
|
||||
wmode: 'opaque', /* Set the flash wmode attribute */
|
||||
autoplay: true, /* Automatically start videos: True/False */
|
||||
modal: false, /* If set to true, only the close button will close the window */
|
||||
deeplinking: true, /* Allow prettyPhoto to update the url to enable deeplinking. */
|
||||
overlay_gallery: true, /* If set to true, a gallery will overlay the fullscreen image on mouse over */
|
||||
overlay_gallery_max: 30, /* Maximum number of pictures in the overlay gallery */
|
||||
keyboard_shortcuts: true, /* Set to false if you open forms inside prettyPhoto */
|
||||
changepicturecallback: function(){}, /* Called everytime an item is shown/changed */
|
||||
callback: function(){}, /* Called when prettyPhoto is closed */
|
||||
ie6_fallback: true,
|
||||
markup: '<div class="pp_pic_holder"> \
|
||||
<div class="ppt"> </div> \
|
||||
<div class="pp_top"> \
|
||||
<div class="pp_left"></div> \
|
||||
<div class="pp_middle"></div> \
|
||||
<div class="pp_right"></div> \
|
||||
</div> \
|
||||
<div class="pp_content_container"> \
|
||||
<div class="pp_left"> \
|
||||
<div class="pp_right"> \
|
||||
<div class="pp_content"> \
|
||||
<div class="pp_loaderIcon"></div> \
|
||||
<div class="pp_fade"> \
|
||||
<a href="#" class="pp_expand" title="Expand the image">Expand</a> \
|
||||
<div class="pp_hoverContainer"> \
|
||||
<a class="pp_next" href="#">next</a> \
|
||||
<a class="pp_previous" href="#">previous</a> \
|
||||
</div> \
|
||||
<div id="pp_full_res"></div> \
|
||||
<div class="pp_details"> \
|
||||
<div class="pp_nav"> \
|
||||
<a href="#" class="pp_arrow_previous">Previous</a> \
|
||||
<p class="currentTextHolder">0/0</p> \
|
||||
<a href="#" class="pp_arrow_next">Next</a> \
|
||||
</div> \
|
||||
<p class="pp_description"></p> \
|
||||
<div class="pp_social">{pp_social}</div> \
|
||||
<a class="pp_close" href="#">Close</a> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
<div class="pp_bottom"> \
|
||||
<div class="pp_left"></div> \
|
||||
<div class="pp_middle"></div> \
|
||||
<div class="pp_right"></div> \
|
||||
</div> \
|
||||
</div> \
|
||||
<div class="pp_overlay"></div>',
|
||||
gallery_markup: '<div class="pp_gallery"> \
|
||||
<a href="#" class="pp_arrow_previous">Previous</a> \
|
||||
<div> \
|
||||
<ul> \
|
||||
{gallery} \
|
||||
</ul> \
|
||||
</div> \
|
||||
<a href="#" class="pp_arrow_next">Next</a> \
|
||||
</div>',
|
||||
image_markup: '<img id="fullResImage" src="{path}" />',
|
||||
flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
|
||||
quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
|
||||
iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
|
||||
inline_markup: '<div class="pp_inline">{content}</div>',
|
||||
custom_markup: '',
|
||||
social_tools: '<div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&layout=button_count&show_faces=true&width=500&action=like&font&colorscheme=light&height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>' /* html or false to disable */
|
||||
}, pp_settings);
|
||||
|
||||
// Global variables accessible only by prettyPhoto
|
||||
var matchedObjects = this, percentBased = false, pp_dimensions, pp_open,
|
||||
|
||||
// prettyPhoto container specific
|
||||
pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,
|
||||
|
||||
// Window size
|
||||
windowHeight = $(window).height(), windowWidth = $(window).width(),
|
||||
|
||||
// Global elements
|
||||
pp_slideshow;
|
||||
|
||||
doresize = true, scroll_pos = _get_scroll();
|
||||
|
||||
// Window/Keyboard events
|
||||
$(window).unbind('resize.prettyphoto').bind('resize.prettyphoto',function(){ _center_overlay(); _resize_overlay(); });
|
||||
|
||||
if(pp_settings.keyboard_shortcuts) {
|
||||
$(document).unbind('keydown.prettyphoto').bind('keydown.prettyphoto',function(e){
|
||||
if(typeof $pp_pic_holder != 'undefined'){
|
||||
if($pp_pic_holder.is(':visible')){
|
||||
switch(e.keyCode){
|
||||
case 37:
|
||||
$.prettyPhoto.changePage('previous');
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 39:
|
||||
$.prettyPhoto.changePage('next');
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 27:
|
||||
if(!settings.modal)
|
||||
$.prettyPhoto.close();
|
||||
e.preventDefault();
|
||||
break;
|
||||
};
|
||||
// return false;
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize prettyPhoto.
|
||||
*/
|
||||
$.prettyPhoto.initialize = function() {
|
||||
|
||||
settings = pp_settings;
|
||||
|
||||
if(settings.theme == 'pp_default') settings.horizontal_padding = 16;
|
||||
|
||||
// Find out if the picture is part of a set
|
||||
theRel = $(this).attr(settings.hook);
|
||||
galleryRegExp = /\[(?:.*)\]/;
|
||||
isSet = (galleryRegExp.exec(theRel)) ? true : false;
|
||||
|
||||
// Put the SRCs, TITLEs, ALTs into an array.
|
||||
pp_images = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return $(n).attr('href'); }) : $.makeArray($(this).attr('href'));
|
||||
pp_titles = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return ($(n).find('img').attr('alt')) ? $(n).find('img').attr('alt') : ""; }) : $.makeArray($(this).find('img').attr('alt'));
|
||||
pp_descriptions = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return ($(n).attr('title')) ? $(n).attr('title') : ""; }) : $.makeArray($(this).attr('title'));
|
||||
|
||||
if(pp_images.length > settings.overlay_gallery_max) settings.overlay_gallery = false;
|
||||
|
||||
set_position = jQuery.inArray($(this).attr('href'), pp_images); // Define where in the array the clicked item is positionned
|
||||
rel_index = (isSet) ? set_position : $("a["+settings.hook+"^='"+theRel+"']").index($(this));
|
||||
|
||||
_build_overlay(this); // Build the overlay {this} being the caller
|
||||
|
||||
if(settings.allow_resize)
|
||||
$(window).bind('scroll.prettyphoto',function(){ _center_overlay(); });
|
||||
|
||||
|
||||
$.prettyPhoto.open();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Opens the prettyPhoto modal box.
|
||||
* @param image {String,Array} Full path to the image to be open, can also be an array containing full images paths.
|
||||
* @param title {String,Array} The title to be displayed with the picture, can also be an array containing all the titles.
|
||||
* @param description {String,Array} The description to be displayed with the picture, can also be an array containing all the descriptions.
|
||||
*/
|
||||
$.prettyPhoto.open = function(event) {
|
||||
if(typeof settings == "undefined"){ // Means it's an API call, need to manually get the settings and set the variables
|
||||
settings = pp_settings;
|
||||
pp_images = $.makeArray(arguments[0]);
|
||||
pp_titles = (arguments[1]) ? $.makeArray(arguments[1]) : $.makeArray("");
|
||||
pp_descriptions = (arguments[2]) ? $.makeArray(arguments[2]) : $.makeArray("");
|
||||
isSet = (pp_images.length > 1) ? true : false;
|
||||
set_position = (arguments[3])? arguments[3]: 0;
|
||||
_build_overlay(event.target); // Build the overlay {this} being the caller
|
||||
}
|
||||
|
||||
if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','hidden'); // Hide the flash
|
||||
|
||||
_checkPosition($(pp_images).size()); // Hide the next/previous links if on first or last images.
|
||||
|
||||
$('.pp_loaderIcon').show();
|
||||
|
||||
if(settings.deeplinking)
|
||||
setHashtag();
|
||||
|
||||
// Rebuild Facebook Like Button with updated href
|
||||
if(settings.social_tools){
|
||||
facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
|
||||
$pp_pic_holder.find('.pp_social').html(facebook_like_link);
|
||||
}
|
||||
|
||||
// Fade the content in
|
||||
if($ppt.is(':hidden')) $ppt.css('opacity',0).show();
|
||||
$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);
|
||||
|
||||
// Display the current position
|
||||
$pp_pic_holder.find('.currentTextHolder').text((set_position+1) + settings.counter_separator_label + $(pp_images).size());
|
||||
|
||||
// Set the description
|
||||
if(typeof pp_descriptions[set_position] != 'undefined' && pp_descriptions[set_position] != ""){
|
||||
$pp_pic_holder.find('.pp_description').show().html(unescape(pp_descriptions[set_position]));
|
||||
}else{
|
||||
$pp_pic_holder.find('.pp_description').hide();
|
||||
}
|
||||
|
||||
// Get the dimensions
|
||||
movie_width = ( parseFloat(getParam('width',pp_images[set_position])) ) ? getParam('width',pp_images[set_position]) : settings.default_width.toString();
|
||||
movie_height = ( parseFloat(getParam('height',pp_images[set_position])) ) ? getParam('height',pp_images[set_position]) : settings.default_height.toString();
|
||||
|
||||
// If the size is % based, calculate according to window dimensions
|
||||
percentBased=false;
|
||||
if(movie_height.indexOf('%') != -1) { movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 150); percentBased = true; }
|
||||
if(movie_width.indexOf('%') != -1) { movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 150); percentBased = true; }
|
||||
|
||||
// Fade the holder
|
||||
$pp_pic_holder.fadeIn(function(){
|
||||
// Set the title
|
||||
(settings.show_title && pp_titles[set_position] != "" && typeof pp_titles[set_position] != "undefined") ? $ppt.html(unescape(pp_titles[set_position])) : $ppt.html(' ');
|
||||
|
||||
imgPreloader = "";
|
||||
skipInjection = false;
|
||||
|
||||
// Inject the proper content
|
||||
switch(_getFileType(pp_images[set_position])){
|
||||
case 'image':
|
||||
imgPreloader = new Image();
|
||||
|
||||
// Preload the neighbour images
|
||||
nextImage = new Image();
|
||||
if(isSet && set_position < $(pp_images).size() -1) nextImage.src = pp_images[set_position + 1];
|
||||
prevImage = new Image();
|
||||
if(isSet && pp_images[set_position - 1]) prevImage.src = pp_images[set_position - 1];
|
||||
|
||||
$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup.replace(/{path}/g,pp_images[set_position]);
|
||||
|
||||
imgPreloader.onload = function(){
|
||||
// Fit item to viewport
|
||||
pp_dimensions = _fitToViewport(imgPreloader.width,imgPreloader.height);
|
||||
|
||||
_showContent();
|
||||
};
|
||||
|
||||
imgPreloader.onerror = function(){
|
||||
alert('Image cannot be loaded. Make sure the path is correct and image exist.');
|
||||
$.prettyPhoto.close();
|
||||
};
|
||||
|
||||
imgPreloader.src = pp_images[set_position];
|
||||
break;
|
||||
|
||||
case 'youtube':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
// Regular youtube link
|
||||
movie_id = getParam('v',pp_images[set_position]);
|
||||
|
||||
// youtu.be link
|
||||
if(movie_id == ""){
|
||||
movie_id = pp_images[set_position].split('youtu.be/');
|
||||
movie_id = movie_id[1];
|
||||
if(movie_id.indexOf('?') > 0)
|
||||
movie_id = movie_id.substr(0,movie_id.indexOf('?')); // Strip anything after the ?
|
||||
|
||||
if(movie_id.indexOf('&') > 0)
|
||||
movie_id = movie_id.substr(0,movie_id.indexOf('&')); // Strip anything after the &
|
||||
}
|
||||
|
||||
movie = 'http://www.youtube.com/embed/'+movie_id;
|
||||
(getParam('rel',pp_images[set_position])) ? movie+="?rel="+getParam('rel',pp_images[set_position]) : movie+="?rel=1";
|
||||
|
||||
if(settings.autoplay) movie += "&autoplay=1";
|
||||
|
||||
toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);
|
||||
break;
|
||||
|
||||
case 'vimeo':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
movie_id = pp_images[set_position];
|
||||
var regExp = /http(s?):\/\/(www\.)?vimeo.com\/(\d+)/;
|
||||
var match = movie_id.match(regExp);
|
||||
|
||||
movie = 'http://player.vimeo.com/video/'+ match[3] +'?title=0&byline=0&portrait=0';
|
||||
if(settings.autoplay) movie += "&autoplay=1;";
|
||||
|
||||
vimeo_width = pp_dimensions['width'] + '/embed/?moog_width='+ pp_dimensions['width'];
|
||||
|
||||
toInject = settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,movie);
|
||||
break;
|
||||
|
||||
case 'quicktime':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
pp_dimensions['height']+=15; pp_dimensions['contentHeight']+=15; pp_dimensions['containerHeight']+=15; // Add space for the control bar
|
||||
|
||||
toInject = settings.quicktime_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);
|
||||
break;
|
||||
|
||||
case 'flash':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
flash_vars = pp_images[set_position];
|
||||
flash_vars = flash_vars.substring(pp_images[set_position].indexOf('flashvars') + 10,pp_images[set_position].length);
|
||||
|
||||
filename = pp_images[set_position];
|
||||
filename = filename.substring(0,filename.indexOf('?'));
|
||||
|
||||
toInject = settings.flash_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);
|
||||
break;
|
||||
|
||||
case 'iframe':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
frame_url = pp_images[set_position];
|
||||
frame_url = frame_url.substr(0,frame_url.indexOf('iframe')-1);
|
||||
|
||||
toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,frame_url);
|
||||
break;
|
||||
|
||||
case 'ajax':
|
||||
doresize = false; // Make sure the dimensions are not resized.
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height);
|
||||
doresize = true; // Reset the dimensions
|
||||
|
||||
skipInjection = true;
|
||||
$.get(pp_images[set_position],function(responseHTML){
|
||||
toInject = settings.inline_markup.replace(/{content}/g,responseHTML);
|
||||
$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
|
||||
_showContent();
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case 'custom':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
toInject = settings.custom_markup;
|
||||
break;
|
||||
|
||||
case 'inline':
|
||||
// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
|
||||
myClone = $(pp_images[set_position]).clone().append('<br clear="all" />').css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline"></div></div>').appendTo($('body')).show();
|
||||
doresize = false; // Make sure the dimensions are not resized.
|
||||
pp_dimensions = _fitToViewport($(myClone).width(),$(myClone).height());
|
||||
doresize = true; // Reset the dimensions
|
||||
$(myClone).remove();
|
||||
toInject = settings.inline_markup.replace(/{content}/g,$(pp_images[set_position]).html());
|
||||
break;
|
||||
};
|
||||
|
||||
if(!imgPreloader && !skipInjection){
|
||||
$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
|
||||
|
||||
// Show content
|
||||
_showContent();
|
||||
};
|
||||
});
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Change page in the prettyPhoto modal box
|
||||
* @param direction {String} Direction of the paging, previous or next.
|
||||
*/
|
||||
$.prettyPhoto.changePage = function(direction){
|
||||
currentGalleryPage = 0;
|
||||
|
||||
if(direction == 'previous') {
|
||||
set_position--;
|
||||
if (set_position < 0) set_position = $(pp_images).size()-1;
|
||||
}else if(direction == 'next'){
|
||||
set_position++;
|
||||
if(set_position > $(pp_images).size()-1) set_position = 0;
|
||||
}else{
|
||||
set_position=direction;
|
||||
};
|
||||
|
||||
rel_index = set_position;
|
||||
|
||||
if(!doresize) doresize = true; // Allow the resizing of the images
|
||||
if(settings.allow_expand) {
|
||||
$('.pp_contract').removeClass('pp_contract').addClass('pp_expand');
|
||||
}
|
||||
|
||||
_hideContent(function(){ $.prettyPhoto.open(); });
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Change gallery page in the prettyPhoto modal box
|
||||
* @param direction {String} Direction of the paging, previous or next.
|
||||
*/
|
||||
$.prettyPhoto.changeGalleryPage = function(direction){
|
||||
if(direction=='next'){
|
||||
currentGalleryPage ++;
|
||||
|
||||
if(currentGalleryPage > totalPage) currentGalleryPage = 0;
|
||||
}else if(direction=='previous'){
|
||||
currentGalleryPage --;
|
||||
|
||||
if(currentGalleryPage < 0) currentGalleryPage = totalPage;
|
||||
}else{
|
||||
currentGalleryPage = direction;
|
||||
};
|
||||
|
||||
slide_speed = (direction == 'next' || direction == 'previous') ? settings.animation_speed : 0;
|
||||
|
||||
slide_to = currentGalleryPage * (itemsPerPage * itemWidth);
|
||||
|
||||
$pp_gallery.find('ul').animate({left:-slide_to},slide_speed);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Start the slideshow...
|
||||
*/
|
||||
$.prettyPhoto.startSlideshow = function(){
|
||||
if(typeof pp_slideshow == 'undefined'){
|
||||
$pp_pic_holder.find('.pp_play').unbind('click').removeClass('pp_play').addClass('pp_pause').click(function(){
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
pp_slideshow = setInterval($.prettyPhoto.startSlideshow,settings.slideshow);
|
||||
}else{
|
||||
$.prettyPhoto.changePage('next');
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Stop the slideshow...
|
||||
*/
|
||||
$.prettyPhoto.stopSlideshow = function(){
|
||||
$pp_pic_holder.find('.pp_pause').unbind('click').removeClass('pp_pause').addClass('pp_play').click(function(){
|
||||
$.prettyPhoto.startSlideshow();
|
||||
return false;
|
||||
});
|
||||
clearInterval(pp_slideshow);
|
||||
pp_slideshow=undefined;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Closes prettyPhoto.
|
||||
*/
|
||||
$.prettyPhoto.close = function(){
|
||||
if($pp_overlay.is(":animated")) return;
|
||||
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
|
||||
$pp_pic_holder.stop().find('object,embed').css('visibility','hidden');
|
||||
|
||||
$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animation_speed,function(){ $(this).remove(); });
|
||||
|
||||
$pp_overlay.fadeOut(settings.animation_speed, function(){
|
||||
|
||||
if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','visible'); // Show the flash
|
||||
|
||||
$(this).remove(); // No more need for the prettyPhoto markup
|
||||
|
||||
$(window).unbind('scroll.prettyphoto');
|
||||
|
||||
clearHashtag();
|
||||
|
||||
settings.callback();
|
||||
|
||||
doresize = true;
|
||||
|
||||
pp_open = false;
|
||||
|
||||
delete settings;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the proper sizes on the containers and animate the content in.
|
||||
*/
|
||||
function _showContent(){
|
||||
$('.pp_loaderIcon').hide();
|
||||
|
||||
// Calculate the opened top position of the pic holder
|
||||
projectedTop = scroll_pos['scrollTop'] + ((windowHeight/2) - (pp_dimensions['containerHeight']/2));
|
||||
if(projectedTop < 0) projectedTop = 0;
|
||||
|
||||
$ppt.fadeTo(settings.animation_speed,1);
|
||||
|
||||
// Resize the content holder
|
||||
$pp_pic_holder.find('.pp_content')
|
||||
.animate({
|
||||
height:pp_dimensions['contentHeight'],
|
||||
width:pp_dimensions['contentWidth']
|
||||
},settings.animation_speed);
|
||||
|
||||
// Resize picture the holder
|
||||
$pp_pic_holder.animate({
|
||||
'top': projectedTop,
|
||||
'left': ((windowWidth/2) - (pp_dimensions['containerWidth']/2) < 0) ? 0 : (windowWidth/2) - (pp_dimensions['containerWidth']/2),
|
||||
width:pp_dimensions['containerWidth']
|
||||
},settings.animation_speed,function(){
|
||||
$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(pp_dimensions['height']).width(pp_dimensions['width']);
|
||||
|
||||
$pp_pic_holder.find('.pp_fade').fadeIn(settings.animation_speed); // Fade the new content
|
||||
|
||||
// Show the nav
|
||||
if(isSet && _getFileType(pp_images[set_position])=="image") { $pp_pic_holder.find('.pp_hoverContainer').show(); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }
|
||||
|
||||
if(settings.allow_expand) {
|
||||
if(pp_dimensions['resized']){ // Fade the resizing link if the image is resized
|
||||
$('a.pp_expand,a.pp_contract').show();
|
||||
}else{
|
||||
$('a.pp_expand').hide();
|
||||
}
|
||||
}
|
||||
|
||||
if(settings.autoplay_slideshow && !pp_slideshow && !pp_open) $.prettyPhoto.startSlideshow();
|
||||
|
||||
settings.changepicturecallback(); // Callback!
|
||||
|
||||
pp_open = true;
|
||||
});
|
||||
|
||||
_insert_gallery();
|
||||
pp_settings.ajaxcallback();
|
||||
};
|
||||
|
||||
/**
|
||||
* Hide the content...DUH!
|
||||
*/
|
||||
function _hideContent(callback){
|
||||
// Fade out the current picture
|
||||
$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');
|
||||
$pp_pic_holder.find('.pp_fade').fadeOut(settings.animation_speed,function(){
|
||||
$('.pp_loaderIcon').show();
|
||||
|
||||
callback();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Check the item position in the gallery array, hide or show the navigation links
|
||||
* @param setCount {integer} The total number of items in the set
|
||||
*/
|
||||
function _checkPosition(setCount){
|
||||
(setCount > 1) ? $('.pp_nav').show() : $('.pp_nav').hide(); // Hide the bottom nav if it's not a set.
|
||||
};
|
||||
|
||||
/**
|
||||
* Resize the item dimensions if it's bigger than the viewport
|
||||
* @param width {integer} Width of the item to be opened
|
||||
* @param height {integer} Height of the item to be opened
|
||||
* @return An array containin the "fitted" dimensions
|
||||
*/
|
||||
function _fitToViewport(width,height){
|
||||
resized = false;
|
||||
|
||||
_getDimensions(width,height);
|
||||
|
||||
// Define them in case there's no resize needed
|
||||
imageWidth = width, imageHeight = height;
|
||||
|
||||
if( ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allow_resize && !percentBased) {
|
||||
resized = true, fitting = false;
|
||||
|
||||
while (!fitting){
|
||||
if((pp_containerWidth > windowWidth)){
|
||||
imageWidth = (windowWidth - 200);
|
||||
imageHeight = (height/width) * imageWidth;
|
||||
}else if((pp_containerHeight > windowHeight)){
|
||||
imageHeight = (windowHeight - 200);
|
||||
imageWidth = (width/height) * imageHeight;
|
||||
}else{
|
||||
fitting = true;
|
||||
};
|
||||
|
||||
pp_containerHeight = imageHeight, pp_containerWidth = imageWidth;
|
||||
};
|
||||
|
||||
|
||||
|
||||
if((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)){
|
||||
_fitToViewport(pp_containerWidth,pp_containerHeight)
|
||||
};
|
||||
|
||||
_getDimensions(imageWidth,imageHeight);
|
||||
};
|
||||
|
||||
return {
|
||||
width:Math.floor(imageWidth),
|
||||
height:Math.floor(imageHeight),
|
||||
containerHeight:Math.floor(pp_containerHeight),
|
||||
containerWidth:Math.floor(pp_containerWidth) + (settings.horizontal_padding * 2),
|
||||
contentHeight:Math.floor(pp_contentHeight),
|
||||
contentWidth:Math.floor(pp_contentWidth),
|
||||
resized:resized
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the containers dimensions according to the item size
|
||||
* @param width {integer} Width of the item to be opened
|
||||
* @param height {integer} Height of the item to be opened
|
||||
*/
|
||||
function _getDimensions(width,height){
|
||||
width = parseFloat(width);
|
||||
height = parseFloat(height);
|
||||
|
||||
// Get the details height, to do so, I need to clone it since it's invisible
|
||||
$pp_details = $pp_pic_holder.find('.pp_details');
|
||||
$pp_details.width(width);
|
||||
detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
|
||||
|
||||
$pp_details = $pp_details.clone().addClass(settings.theme).width(width).appendTo($('body')).css({
|
||||
'position':'absolute',
|
||||
'top':-10000
|
||||
});
|
||||
detailsHeight += $pp_details.height();
|
||||
detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details
|
||||
$pp_details.remove();
|
||||
|
||||
// Get the titles height, to do so, I need to clone it since it's invisible
|
||||
$pp_title = $pp_pic_holder.find('.ppt');
|
||||
$pp_title.width(width);
|
||||
titleHeight = parseFloat($pp_title.css('marginTop')) + parseFloat($pp_title.css('marginBottom'));
|
||||
$pp_title = $pp_title.clone().appendTo($('body')).css({
|
||||
'position':'absolute',
|
||||
'top':-10000
|
||||
});
|
||||
titleHeight += $pp_title.height();
|
||||
$pp_title.remove();
|
||||
|
||||
// Get the container size, to resize the holder to the right dimensions
|
||||
pp_contentHeight = height + detailsHeight;
|
||||
pp_contentWidth = width;
|
||||
pp_containerHeight = pp_contentHeight + titleHeight + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
|
||||
pp_containerWidth = width;
|
||||
}
|
||||
|
||||
function _getFileType(itemSrc){
|
||||
if (itemSrc.match(/youtube\.com\/watch/i) || itemSrc.match(/youtu\.be/i)) {
|
||||
return 'youtube';
|
||||
}else if (itemSrc.match(/vimeo\.com/i)) {
|
||||
return 'vimeo';
|
||||
}else if(itemSrc.match(/\b.mov\b/i)){
|
||||
return 'quicktime';
|
||||
}else if(itemSrc.match(/\b.swf\b/i)){
|
||||
return 'flash';
|
||||
}else if(itemSrc.match(/\biframe=true\b/i)){
|
||||
return 'iframe';
|
||||
}else if(itemSrc.match(/\bajax=true\b/i)){
|
||||
return 'ajax';
|
||||
}else if(itemSrc.match(/\bcustom=true\b/i)){
|
||||
return 'custom';
|
||||
}else if(itemSrc.substr(0,1) == '#'){
|
||||
return 'inline';
|
||||
}else{
|
||||
return 'image';
|
||||
};
|
||||
};
|
||||
|
||||
function _center_overlay(){
|
||||
if(doresize && typeof $pp_pic_holder != 'undefined') {
|
||||
scroll_pos = _get_scroll();
|
||||
contentHeight = $pp_pic_holder.height(), contentwidth = $pp_pic_holder.width();
|
||||
|
||||
projectedTop = (windowHeight/2) + scroll_pos['scrollTop'] - (contentHeight/2);
|
||||
if(projectedTop < 0) projectedTop = 0;
|
||||
|
||||
if(contentHeight > windowHeight)
|
||||
return;
|
||||
|
||||
$pp_pic_holder.css({
|
||||
'top': projectedTop,
|
||||
'left': (windowWidth/2) + scroll_pos['scrollLeft'] - (contentwidth/2)
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
function _get_scroll(){
|
||||
if (self.pageYOffset) {
|
||||
return {scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};
|
||||
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
|
||||
return {scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};
|
||||
} else if (document.body) {// all other Explorers
|
||||
return {scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};
|
||||
};
|
||||
};
|
||||
|
||||
function _resize_overlay() {
|
||||
windowHeight = $(window).height(), windowWidth = $(window).width();
|
||||
|
||||
if(typeof $pp_overlay != "undefined") $pp_overlay.height($(document).height()).width(windowWidth);
|
||||
};
|
||||
|
||||
function _insert_gallery(){
|
||||
if(isSet && settings.overlay_gallery && _getFileType(pp_images[set_position])=="image") {
|
||||
itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
|
||||
navWidth = (settings.theme == "facebook" || settings.theme == "pp_default") ? 50 : 30; // Define the arrow width depending on the theme
|
||||
|
||||
itemsPerPage = Math.floor((pp_dimensions['containerWidth'] - 100 - navWidth) / itemWidth);
|
||||
itemsPerPage = (itemsPerPage < pp_images.length) ? itemsPerPage : pp_images.length;
|
||||
totalPage = Math.ceil(pp_images.length / itemsPerPage) - 1;
|
||||
|
||||
// Hide the nav in the case there's no need for links
|
||||
if(totalPage == 0){
|
||||
navWidth = 0; // No nav means no width!
|
||||
$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').hide();
|
||||
}else{
|
||||
$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').show();
|
||||
};
|
||||
|
||||
galleryWidth = itemsPerPage * itemWidth;
|
||||
fullGalleryWidth = pp_images.length * itemWidth;
|
||||
|
||||
// Set the proper width to the gallery items
|
||||
$pp_gallery
|
||||
.css('margin-left',-((galleryWidth/2) + (navWidth/2)))
|
||||
.find('div:first').width(galleryWidth+5)
|
||||
.find('ul').width(fullGalleryWidth)
|
||||
.find('li.selected').removeClass('selected');
|
||||
|
||||
goToPage = (Math.floor(set_position/itemsPerPage) < totalPage) ? Math.floor(set_position/itemsPerPage) : totalPage;
|
||||
|
||||
$.prettyPhoto.changeGalleryPage(goToPage);
|
||||
|
||||
$pp_gallery_li.filter(':eq('+set_position+')').addClass('selected');
|
||||
}else{
|
||||
$pp_pic_holder.find('.pp_content').unbind('mouseenter mouseleave');
|
||||
// $pp_gallery.hide();
|
||||
}
|
||||
}
|
||||
|
||||
function _build_overlay(caller){
|
||||
// Inject Social Tool markup into General markup
|
||||
if(settings.social_tools)
|
||||
facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
|
||||
|
||||
settings.markup = settings.markup.replace('{pp_social}','');
|
||||
|
||||
$('body').append(settings.markup); // Inject the markup
|
||||
|
||||
$pp_pic_holder = $('.pp_pic_holder') , $ppt = $('.ppt'), $pp_overlay = $('div.pp_overlay'); // Set my global selectors
|
||||
|
||||
// Inject the inline gallery!
|
||||
if(isSet && settings.overlay_gallery) {
|
||||
currentGalleryPage = 0;
|
||||
toInject = "";
|
||||
for (var i=0; i < pp_images.length; i++) {
|
||||
if(!pp_images[i].match(/\b(jpg|jpeg|png|gif)\b/gi)){
|
||||
classname = 'default';
|
||||
img_src = '';
|
||||
}else{
|
||||
classname = '';
|
||||
img_src = pp_images[i];
|
||||
}
|
||||
toInject += "<li class='"+classname+"'><a href='#'><img src='" + img_src + "' width='50' alt='' /></a></li>";
|
||||
};
|
||||
|
||||
toInject = settings.gallery_markup.replace(/{gallery}/g,toInject);
|
||||
|
||||
$pp_pic_holder.find('#pp_full_res').after(toInject);
|
||||
|
||||
$pp_gallery = $('.pp_pic_holder .pp_gallery'), $pp_gallery_li = $pp_gallery.find('li'); // Set the gallery selectors
|
||||
|
||||
$pp_gallery.find('.pp_arrow_next').click(function(){
|
||||
$.prettyPhoto.changeGalleryPage('next');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
$pp_gallery.find('.pp_arrow_previous').click(function(){
|
||||
$.prettyPhoto.changeGalleryPage('previous');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
$pp_pic_holder.find('.pp_content').hover(
|
||||
function(){
|
||||
$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeIn();
|
||||
},
|
||||
function(){
|
||||
$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeOut();
|
||||
});
|
||||
|
||||
itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
|
||||
$pp_gallery_li.each(function(i){
|
||||
$(this)
|
||||
.find('a')
|
||||
.click(function(){
|
||||
$.prettyPhoto.changePage(i);
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// Inject the play/pause if it's a slideshow
|
||||
if(settings.slideshow){
|
||||
$pp_pic_holder.find('.pp_nav').prepend('<a href="#" class="pp_play">Play</a>')
|
||||
$pp_pic_holder.find('.pp_nav .pp_play').click(function(){
|
||||
$.prettyPhoto.startSlideshow();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
$pp_pic_holder.attr('class','pp_pic_holder ' + settings.theme); // Set the proper theme
|
||||
|
||||
$pp_overlay
|
||||
.css({
|
||||
'opacity':0,
|
||||
'height':$(document).height(),
|
||||
'width':$(window).width()
|
||||
})
|
||||
.bind('click',function(){
|
||||
if(!settings.modal) $.prettyPhoto.close();
|
||||
});
|
||||
|
||||
$('a.pp_close').bind('click',function(){ $.prettyPhoto.close(); return false; });
|
||||
|
||||
|
||||
if(settings.allow_expand) {
|
||||
$('a.pp_expand').bind('click',function(e){
|
||||
// Expand the image
|
||||
if($(this).hasClass('pp_expand')){
|
||||
$(this).removeClass('pp_expand').addClass('pp_contract');
|
||||
doresize = false;
|
||||
}else{
|
||||
$(this).removeClass('pp_contract').addClass('pp_expand');
|
||||
doresize = true;
|
||||
};
|
||||
|
||||
_hideContent(function(){ $.prettyPhoto.open(); });
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
$pp_pic_holder.find('.pp_previous, .pp_nav .pp_arrow_previous').bind('click',function(){
|
||||
$.prettyPhoto.changePage('previous');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
$pp_pic_holder.find('.pp_next, .pp_nav .pp_arrow_next').bind('click',function(){
|
||||
$.prettyPhoto.changePage('next');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
_center_overlay(); // Center it
|
||||
};
|
||||
|
||||
if(!pp_alreadyInitialized && getHashtag()){
|
||||
pp_alreadyInitialized = true;
|
||||
|
||||
// Grab the rel index to trigger the click on the correct element
|
||||
hashIndex = getHashtag();
|
||||
hashRel = hashIndex;
|
||||
hashIndex = hashIndex.substring(hashIndex.indexOf('/')+1,hashIndex.length-1);
|
||||
hashRel = hashRel.substring(0,hashRel.indexOf('/'));
|
||||
|
||||
// Little timeout to make sure all the prettyPhoto initialize scripts has been run.
|
||||
// Useful in the event the page contain several init scripts.
|
||||
setTimeout(function(){ $("a["+pp_settings.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger('click'); },50);
|
||||
}
|
||||
|
||||
return this.unbind('click.prettyphoto').bind('click.prettyphoto',$.prettyPhoto.initialize); // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
|
||||
};
|
||||
|
||||
function getHashtag(){
|
||||
var url = location.href;
|
||||
hashtag = (url.indexOf('#prettyPhoto') !== -1) ? decodeURI(url.substring(url.indexOf('#prettyPhoto')+1,url.length)) : false;
|
||||
|
||||
return hashtag;
|
||||
};
|
||||
|
||||
function setHashtag(){
|
||||
if(typeof theRel == 'undefined') return; // theRel is set on normal calls, it's impossible to deeplink using the API
|
||||
location.hash = theRel + '/'+rel_index+'/';
|
||||
};
|
||||
|
||||
function clearHashtag(){
|
||||
if ( location.href.indexOf('#prettyPhoto') !== -1 ) location.hash = "prettyPhoto";
|
||||
}
|
||||
|
||||
function getParam(name,url){
|
||||
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
|
||||
var regexS = "[\\?&]"+name+"=([^&#]*)";
|
||||
var regex = new RegExp( regexS );
|
||||
var results = regex.exec( url );
|
||||
return ( results == null ) ? "" : results[1];
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
|
||||
var pp_alreadyInitialized = false; // Used for the deep linking to make sure not to call the same function several times.
|
||||
905
dependency-check-core/src/test/resources/jquery.prettyPhoto_.js
Normal file
905
dependency-check-core/src/test/resources/jquery.prettyPhoto_.js
Normal file
@@ -0,0 +1,905 @@
|
||||
/* ------------------------------------------------------------------------
|
||||
Class: prettyPhoto
|
||||
Use: Lightbox clone for jQuery
|
||||
Author: Stephane Caron (http://www.no-margin-for-errors.com)
|
||||
Version: 3.1.3
|
||||
------------------------------------------------------------------------- */
|
||||
(function($) {
|
||||
$.prettyPhoto = {version: '3.1.3'};
|
||||
|
||||
$.fn.prettyPhoto = function(pp_settings) {
|
||||
pp_settings = jQuery.extend({
|
||||
animation_speed: 'fast', /* fast/slow/normal */
|
||||
slideshow: 5000, /* false OR interval time in ms */
|
||||
autoplay_slideshow: false, /* true/false */
|
||||
opacity: 0.80, /* Value between 0 and 1 */
|
||||
show_title: true, /* true/false */
|
||||
allow_resize: true, /* Resize the photos bigger than viewport. true/false */
|
||||
default_width: 500,
|
||||
default_height: 344,
|
||||
counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
|
||||
theme: 'pp_default', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
|
||||
horizontal_padding: 20, /* The padding on each side of the picture */
|
||||
hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */
|
||||
wmode: 'opaque', /* Set the flash wmode attribute */
|
||||
autoplay: true, /* Automatically start videos: True/False */
|
||||
modal: false, /* If set to true, only the close button will close the window */
|
||||
deeplinking: true, /* Allow prettyPhoto to update the url to enable deeplinking. */
|
||||
overlay_gallery: true, /* If set to true, a gallery will overlay the fullscreen image on mouse over */
|
||||
keyboard_shortcuts: true, /* Set to false if you open forms inside prettyPhoto */
|
||||
changepicturecallback: function(){}, /* Called everytime an item is shown/changed */
|
||||
callback: function(){}, /* Called when prettyPhoto is closed */
|
||||
ie6_fallback: true,
|
||||
markup: '<div class="pp_pic_holder"> \
|
||||
<div class="ppt"> </div> \
|
||||
<div class="pp_top"> \
|
||||
<div class="pp_left"></div> \
|
||||
<div class="pp_middle"></div> \
|
||||
<div class="pp_right"></div> \
|
||||
</div> \
|
||||
<div class="pp_content_container"> \
|
||||
<div class="pp_left"> \
|
||||
<div class="pp_right"> \
|
||||
<div class="pp_content"> \
|
||||
<div class="pp_loaderIcon"></div> \
|
||||
<div class="pp_fade"> \
|
||||
<a href="#" class="pp_expand" title="Expand the image">Expand</a> \
|
||||
<div class="pp_hoverContainer"> \
|
||||
<a class="pp_next" href="#">next</a> \
|
||||
<a class="pp_previous" href="#">previous</a> \
|
||||
</div> \
|
||||
<div id="pp_full_res"></div> \
|
||||
<div class="pp_details"> \
|
||||
<div class="pp_nav"> \
|
||||
<a href="#" class="pp_arrow_previous">Previous</a> \
|
||||
<p class="currentTextHolder">0/0</p> \
|
||||
<a href="#" class="pp_arrow_next">Next</a> \
|
||||
</div> \
|
||||
<p class="pp_description"></p> \
|
||||
<div class="pp_social">{pp_social}</div> \
|
||||
<a class="pp_close" href="#">Close</a> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
<div class="pp_bottom"> \
|
||||
<div class="pp_left"></div> \
|
||||
<div class="pp_middle"></div> \
|
||||
<div class="pp_right"></div> \
|
||||
</div> \
|
||||
</div> \
|
||||
<div class="pp_overlay"></div>',
|
||||
gallery_markup: '<div class="pp_gallery"> \
|
||||
<a href="#" class="pp_arrow_previous">Previous</a> \
|
||||
<div> \
|
||||
<ul> \
|
||||
{gallery} \
|
||||
</ul> \
|
||||
</div> \
|
||||
<a href="#" class="pp_arrow_next">Next</a> \
|
||||
</div>',
|
||||
image_markup: '<img id="fullResImage" src="{path}" />',
|
||||
flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
|
||||
quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
|
||||
iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
|
||||
inline_markup: '<div class="pp_inline">{content}</div>',
|
||||
custom_markup: '',
|
||||
social_tools: '<div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="http://www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&layout=button_count&show_faces=true&width=500&action=like&font&colorscheme=light&height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>' /* html or false to disable */
|
||||
}, pp_settings);
|
||||
|
||||
// Global variables accessible only by prettyPhoto
|
||||
var matchedObjects = this, percentBased = false, pp_dimensions, pp_open,
|
||||
|
||||
// prettyPhoto container specific
|
||||
pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,
|
||||
|
||||
// Window size
|
||||
windowHeight = $(window).height(), windowWidth = $(window).width(),
|
||||
|
||||
// Global elements
|
||||
pp_slideshow;
|
||||
|
||||
doresize = true, scroll_pos = _get_scroll();
|
||||
|
||||
// Window/Keyboard events
|
||||
$(window).unbind('resize.prettyphoto').bind('resize.prettyphoto',function(){ _center_overlay(); _resize_overlay(); });
|
||||
|
||||
if(pp_settings.keyboard_shortcuts) {
|
||||
$(document).unbind('keydown.prettyphoto').bind('keydown.prettyphoto',function(e){
|
||||
if(typeof $pp_pic_holder != 'undefined'){
|
||||
if($pp_pic_holder.is(':visible')){
|
||||
switch(e.keyCode){
|
||||
case 37:
|
||||
$.prettyPhoto.changePage('previous');
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 39:
|
||||
$.prettyPhoto.changePage('next');
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 27:
|
||||
if(!settings.modal)
|
||||
$.prettyPhoto.close();
|
||||
e.preventDefault();
|
||||
break;
|
||||
};
|
||||
// return false;
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize prettyPhoto.
|
||||
*/
|
||||
$.prettyPhoto.initialize = function() {
|
||||
|
||||
settings = pp_settings;
|
||||
|
||||
if(settings.theme == 'pp_default') settings.horizontal_padding = 16;
|
||||
if(settings.ie6_fallback && $.browser.msie && parseInt($.browser.version) == 6) settings.theme = "light_square"; // Fallback to a supported theme for IE6
|
||||
|
||||
// Find out if the picture is part of a set
|
||||
theRel = $(this).attr('rel');
|
||||
galleryRegExp = /\[(?:.*)\]/;
|
||||
isSet = (galleryRegExp.exec(theRel)) ? true : false;
|
||||
|
||||
// Put the SRCs, TITLEs, ALTs into an array.
|
||||
pp_images = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr('rel').indexOf(theRel) != -1) return $(n).attr('href'); }) : $.makeArray($(this).attr('href'));
|
||||
pp_titles = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr('rel').indexOf(theRel) != -1) return ($(n).find('img').attr('alt')) ? $(n).find('img').attr('alt') : ""; }) : $.makeArray($(this).find('img').attr('alt'));
|
||||
pp_descriptions = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr('rel').indexOf(theRel) != -1) return ($(n).attr('title')) ? $(n).attr('title') : ""; }) : $.makeArray($(this).attr('title'));
|
||||
|
||||
if(pp_images.length > 30) settings.overlay_gallery = false;
|
||||
|
||||
set_position = jQuery.inArray($(this).attr('href'), pp_images); // Define where in the array the clicked item is positionned
|
||||
rel_index = (isSet) ? set_position : $("a[rel^='"+theRel+"']").index($(this));
|
||||
|
||||
_build_overlay(this); // Build the overlay {this} being the caller
|
||||
|
||||
if(settings.allow_resize)
|
||||
$(window).bind('scroll.prettyphoto',function(){ _center_overlay(); });
|
||||
|
||||
|
||||
$.prettyPhoto.open();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Opens the prettyPhoto modal box.
|
||||
* @param image {String,Array} Full path to the image to be open, can also be an array containing full images paths.
|
||||
* @param title {String,Array} The title to be displayed with the picture, can also be an array containing all the titles.
|
||||
* @param description {String,Array} The description to be displayed with the picture, can also be an array containing all the descriptions.
|
||||
*/
|
||||
$.prettyPhoto.open = function(event) {
|
||||
if(typeof settings == "undefined"){ // Means it's an API call, need to manually get the settings and set the variables
|
||||
settings = pp_settings;
|
||||
if($.browser.msie && $.browser.version == 6) settings.theme = "light_square"; // Fallback to a supported theme for IE6
|
||||
pp_images = $.makeArray(arguments[0]);
|
||||
pp_titles = (arguments[1]) ? $.makeArray(arguments[1]) : $.makeArray("");
|
||||
pp_descriptions = (arguments[2]) ? $.makeArray(arguments[2]) : $.makeArray("");
|
||||
isSet = (pp_images.length > 1) ? true : false;
|
||||
set_position = 0;
|
||||
_build_overlay(event.target); // Build the overlay {this} being the caller
|
||||
}
|
||||
|
||||
if($.browser.msie && $.browser.version == 6) $('select').css('visibility','hidden'); // To fix the bug with IE select boxes
|
||||
|
||||
if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','hidden'); // Hide the flash
|
||||
|
||||
_checkPosition($(pp_images).size()); // Hide the next/previous links if on first or last images.
|
||||
|
||||
$('.pp_loaderIcon').show();
|
||||
|
||||
if(settings.deeplinking)
|
||||
setHashtag();
|
||||
|
||||
// Rebuild Facebook Like Button with updated href
|
||||
if(settings.social_tools){
|
||||
facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
|
||||
$pp_pic_holder.find('.pp_social').html(facebook_like_link);
|
||||
}
|
||||
|
||||
// Fade the content in
|
||||
if($ppt.is(':hidden')) $ppt.css('opacity',0).show();
|
||||
$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);
|
||||
|
||||
// Display the current position
|
||||
$pp_pic_holder.find('.currentTextHolder').text((set_position+1) + settings.counter_separator_label + $(pp_images).size());
|
||||
|
||||
// Set the description
|
||||
if(pp_descriptions[set_position] != ""){
|
||||
$pp_pic_holder.find('.pp_description').show().html(unescape(pp_descriptions[set_position]));
|
||||
}else{
|
||||
$pp_pic_holder.find('.pp_description').hide();
|
||||
}
|
||||
|
||||
// Get the dimensions
|
||||
movie_width = ( parseFloat(getParam('width',pp_images[set_position])) ) ? getParam('width',pp_images[set_position]) : settings.default_width.toString();
|
||||
movie_height = ( parseFloat(getParam('height',pp_images[set_position])) ) ? getParam('height',pp_images[set_position]) : settings.default_height.toString();
|
||||
|
||||
// If the size is % based, calculate according to window dimensions
|
||||
percentBased=false;
|
||||
if(movie_height.indexOf('%') != -1) { movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 150); percentBased = true; }
|
||||
if(movie_width.indexOf('%') != -1) { movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 150); percentBased = true; }
|
||||
|
||||
// Fade the holder
|
||||
$pp_pic_holder.fadeIn(function(){
|
||||
// Set the title
|
||||
(settings.show_title && pp_titles[set_position] != "" && typeof pp_titles[set_position] != "undefined") ? $ppt.html(unescape(pp_titles[set_position])) : $ppt.html(' ');
|
||||
|
||||
imgPreloader = "";
|
||||
skipInjection = false;
|
||||
|
||||
// Inject the proper content
|
||||
switch(_getFileType(pp_images[set_position])){
|
||||
case 'image':
|
||||
imgPreloader = new Image();
|
||||
|
||||
// Preload the neighbour images
|
||||
nextImage = new Image();
|
||||
if(isSet && set_position < $(pp_images).size() -1) nextImage.src = pp_images[set_position + 1];
|
||||
prevImage = new Image();
|
||||
if(isSet && pp_images[set_position - 1]) prevImage.src = pp_images[set_position - 1];
|
||||
|
||||
$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup.replace(/{path}/g,pp_images[set_position]);
|
||||
|
||||
imgPreloader.onload = function(){
|
||||
// Fit item to viewport
|
||||
pp_dimensions = _fitToViewport(imgPreloader.width,imgPreloader.height);
|
||||
|
||||
_showContent();
|
||||
};
|
||||
|
||||
imgPreloader.onerror = function(){
|
||||
alert('Image cannot be loaded. Make sure the path is correct and image exist.');
|
||||
$.prettyPhoto.close();
|
||||
};
|
||||
|
||||
imgPreloader.src = pp_images[set_position];
|
||||
break;
|
||||
|
||||
case 'youtube':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
// Regular youtube link
|
||||
movie_id = getParam('v',pp_images[set_position]);
|
||||
|
||||
// youtu.be link
|
||||
if(movie_id == ""){
|
||||
movie_id = pp_images[set_position].split('youtu.be/');
|
||||
movie_id = movie_id[1];
|
||||
if(movie_id.indexOf('?') > 0)
|
||||
movie_id = movie_id.substr(0,movie_id.indexOf('?')); // Strip anything after the ?
|
||||
|
||||
if(movie_id.indexOf('&') > 0)
|
||||
movie_id = movie_id.substr(0,movie_id.indexOf('&')); // Strip anything after the &
|
||||
}
|
||||
|
||||
movie = 'http://www.youtube.com/embed/'+movie_id;
|
||||
(getParam('rel',pp_images[set_position])) ? movie+="?rel="+getParam('rel',pp_images[set_position]) : movie+="?rel=1";
|
||||
|
||||
if(settings.autoplay) movie += "&autoplay=1";
|
||||
|
||||
toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);
|
||||
break;
|
||||
|
||||
case 'vimeo':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
movie_id = pp_images[set_position];
|
||||
var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)/;
|
||||
var match = movie_id.match(regExp);
|
||||
|
||||
movie = 'http://player.vimeo.com/video/'+ match[2] +'?title=0&byline=0&portrait=0';
|
||||
if(settings.autoplay) movie += "&autoplay=1;";
|
||||
|
||||
vimeo_width = pp_dimensions['width'] + '/embed/?moog_width='+ pp_dimensions['width'];
|
||||
|
||||
toInject = settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,movie);
|
||||
break;
|
||||
|
||||
case 'quicktime':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
pp_dimensions['height']+=15; pp_dimensions['contentHeight']+=15; pp_dimensions['containerHeight']+=15; // Add space for the control bar
|
||||
|
||||
toInject = settings.quicktime_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);
|
||||
break;
|
||||
|
||||
case 'flash':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
flash_vars = pp_images[set_position];
|
||||
flash_vars = flash_vars.substring(pp_images[set_position].indexOf('flashvars') + 10,pp_images[set_position].length);
|
||||
|
||||
filename = pp_images[set_position];
|
||||
filename = filename.substring(0,filename.indexOf('?'));
|
||||
|
||||
toInject = settings.flash_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);
|
||||
break;
|
||||
|
||||
case 'iframe':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
frame_url = pp_images[set_position];
|
||||
frame_url = frame_url.substr(0,frame_url.indexOf('iframe')-1);
|
||||
|
||||
toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,frame_url);
|
||||
break;
|
||||
|
||||
case 'ajax':
|
||||
doresize = false; // Make sure the dimensions are not resized.
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height);
|
||||
doresize = true; // Reset the dimensions
|
||||
|
||||
skipInjection = true;
|
||||
$.get(pp_images[set_position],function(responseHTML){
|
||||
toInject = settings.inline_markup.replace(/{content}/g,responseHTML);
|
||||
$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
|
||||
_showContent();
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case 'custom':
|
||||
pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
|
||||
|
||||
toInject = settings.custom_markup;
|
||||
break;
|
||||
|
||||
case 'inline':
|
||||
// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
|
||||
myClone = $(pp_images[set_position]).clone().append('<br clear="all" />').css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline"></div></div>').appendTo($('body')).show();
|
||||
doresize = false; // Make sure the dimensions are not resized.
|
||||
pp_dimensions = _fitToViewport($(myClone).width(),$(myClone).height());
|
||||
doresize = true; // Reset the dimensions
|
||||
$(myClone).remove();
|
||||
toInject = settings.inline_markup.replace(/{content}/g,$(pp_images[set_position]).html());
|
||||
break;
|
||||
};
|
||||
|
||||
if(!imgPreloader && !skipInjection){
|
||||
$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
|
||||
|
||||
// Show content
|
||||
_showContent();
|
||||
};
|
||||
});
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Change page in the prettyPhoto modal box
|
||||
* @param direction {String} Direction of the paging, previous or next.
|
||||
*/
|
||||
$.prettyPhoto.changePage = function(direction){
|
||||
currentGalleryPage = 0;
|
||||
|
||||
if(direction == 'previous') {
|
||||
set_position--;
|
||||
if (set_position < 0) set_position = $(pp_images).size()-1;
|
||||
}else if(direction == 'next'){
|
||||
set_position++;
|
||||
if(set_position > $(pp_images).size()-1) set_position = 0;
|
||||
}else{
|
||||
set_position=direction;
|
||||
};
|
||||
|
||||
rel_index = set_position;
|
||||
|
||||
if(!doresize) doresize = true; // Allow the resizing of the images
|
||||
$('.pp_contract').removeClass('pp_contract').addClass('pp_expand');
|
||||
|
||||
_hideContent(function(){ $.prettyPhoto.open(); });
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Change gallery page in the prettyPhoto modal box
|
||||
* @param direction {String} Direction of the paging, previous or next.
|
||||
*/
|
||||
$.prettyPhoto.changeGalleryPage = function(direction){
|
||||
if(direction=='next'){
|
||||
currentGalleryPage ++;
|
||||
|
||||
if(currentGalleryPage > totalPage) currentGalleryPage = 0;
|
||||
}else if(direction=='previous'){
|
||||
currentGalleryPage --;
|
||||
|
||||
if(currentGalleryPage < 0) currentGalleryPage = totalPage;
|
||||
}else{
|
||||
currentGalleryPage = direction;
|
||||
};
|
||||
|
||||
slide_speed = (direction == 'next' || direction == 'previous') ? settings.animation_speed : 0;
|
||||
|
||||
slide_to = currentGalleryPage * (itemsPerPage * itemWidth);
|
||||
|
||||
$pp_gallery.find('ul').animate({left:-slide_to},slide_speed);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Start the slideshow...
|
||||
*/
|
||||
$.prettyPhoto.startSlideshow = function(){
|
||||
if(typeof pp_slideshow == 'undefined'){
|
||||
$pp_pic_holder.find('.pp_play').unbind('click').removeClass('pp_play').addClass('pp_pause').click(function(){
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
pp_slideshow = setInterval($.prettyPhoto.startSlideshow,settings.slideshow);
|
||||
}else{
|
||||
$.prettyPhoto.changePage('next');
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Stop the slideshow...
|
||||
*/
|
||||
$.prettyPhoto.stopSlideshow = function(){
|
||||
$pp_pic_holder.find('.pp_pause').unbind('click').removeClass('pp_pause').addClass('pp_play').click(function(){
|
||||
$.prettyPhoto.startSlideshow();
|
||||
return false;
|
||||
});
|
||||
clearInterval(pp_slideshow);
|
||||
pp_slideshow=undefined;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Closes prettyPhoto.
|
||||
*/
|
||||
$.prettyPhoto.close = function(){
|
||||
if($pp_overlay.is(":animated")) return;
|
||||
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
|
||||
$pp_pic_holder.stop().find('object,embed').css('visibility','hidden');
|
||||
|
||||
$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animation_speed,function(){ $(this).remove(); });
|
||||
|
||||
$pp_overlay.fadeOut(settings.animation_speed, function(){
|
||||
if($.browser.msie && $.browser.version == 6) $('select').css('visibility','visible'); // To fix the bug with IE select boxes
|
||||
|
||||
if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','visible'); // Show the flash
|
||||
|
||||
$(this).remove(); // No more need for the prettyPhoto markup
|
||||
|
||||
$(window).unbind('scroll.prettyphoto');
|
||||
|
||||
clearHashtag();
|
||||
|
||||
settings.callback();
|
||||
|
||||
doresize = true;
|
||||
|
||||
pp_open = false;
|
||||
|
||||
delete settings;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the proper sizes on the containers and animate the content in.
|
||||
*/
|
||||
function _showContent(){
|
||||
$('.pp_loaderIcon').hide();
|
||||
|
||||
// Calculate the opened top position of the pic holder
|
||||
projectedTop = scroll_pos['scrollTop'] + ((windowHeight/2) - (pp_dimensions['containerHeight']/2));
|
||||
if(projectedTop < 0) projectedTop = 0;
|
||||
|
||||
$ppt.fadeTo(settings.animation_speed,1);
|
||||
|
||||
// Resize the content holder
|
||||
$pp_pic_holder.find('.pp_content')
|
||||
.animate({
|
||||
height:pp_dimensions['contentHeight'],
|
||||
width:pp_dimensions['contentWidth']
|
||||
},settings.animation_speed);
|
||||
|
||||
// Resize picture the holder
|
||||
$pp_pic_holder.animate({
|
||||
'top': projectedTop,
|
||||
'left': (windowWidth/2) - (pp_dimensions['containerWidth']/2),
|
||||
width:pp_dimensions['containerWidth']
|
||||
},settings.animation_speed,function(){
|
||||
$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(pp_dimensions['height']).width(pp_dimensions['width']);
|
||||
|
||||
$pp_pic_holder.find('.pp_fade').fadeIn(settings.animation_speed); // Fade the new content
|
||||
|
||||
// Show the nav
|
||||
if(isSet && _getFileType(pp_images[set_position])=="image") { $pp_pic_holder.find('.pp_hoverContainer').show(); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }
|
||||
|
||||
if(pp_dimensions['resized']){ // Fade the resizing link if the image is resized
|
||||
$('a.pp_expand,a.pp_contract').show();
|
||||
}else{
|
||||
$('a.pp_expand').hide();
|
||||
}
|
||||
|
||||
if(settings.autoplay_slideshow && !pp_slideshow && !pp_open) $.prettyPhoto.startSlideshow();
|
||||
|
||||
settings.changepicturecallback(); // Callback!
|
||||
|
||||
pp_open = true;
|
||||
});
|
||||
|
||||
_insert_gallery();
|
||||
};
|
||||
|
||||
/**
|
||||
* Hide the content...DUH!
|
||||
*/
|
||||
function _hideContent(callback){
|
||||
// Fade out the current picture
|
||||
$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');
|
||||
$pp_pic_holder.find('.pp_fade').fadeOut(settings.animation_speed,function(){
|
||||
$('.pp_loaderIcon').show();
|
||||
|
||||
callback();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Check the item position in the gallery array, hide or show the navigation links
|
||||
* @param setCount {integer} The total number of items in the set
|
||||
*/
|
||||
function _checkPosition(setCount){
|
||||
(setCount > 1) ? $('.pp_nav').show() : $('.pp_nav').hide(); // Hide the bottom nav if it's not a set.
|
||||
};
|
||||
|
||||
/**
|
||||
* Resize the item dimensions if it's bigger than the viewport
|
||||
* @param width {integer} Width of the item to be opened
|
||||
* @param height {integer} Height of the item to be opened
|
||||
* @return An array containin the "fitted" dimensions
|
||||
*/
|
||||
function _fitToViewport(width,height){
|
||||
resized = false;
|
||||
|
||||
_getDimensions(width,height);
|
||||
|
||||
// Define them in case there's no resize needed
|
||||
imageWidth = width, imageHeight = height;
|
||||
|
||||
if( ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allow_resize && !percentBased) {
|
||||
resized = true, fitting = false;
|
||||
|
||||
while (!fitting){
|
||||
if((pp_containerWidth > windowWidth)){
|
||||
imageWidth = (windowWidth - 200);
|
||||
imageHeight = (height/width) * imageWidth;
|
||||
}else if((pp_containerHeight > windowHeight)){
|
||||
imageHeight = (windowHeight - 200);
|
||||
imageWidth = (width/height) * imageHeight;
|
||||
}else{
|
||||
fitting = true;
|
||||
};
|
||||
|
||||
pp_containerHeight = imageHeight, pp_containerWidth = imageWidth;
|
||||
};
|
||||
|
||||
_getDimensions(imageWidth,imageHeight);
|
||||
|
||||
if((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)){
|
||||
_fitToViewport(pp_containerWidth,pp_containerHeight)
|
||||
};
|
||||
};
|
||||
|
||||
return {
|
||||
width:Math.floor(imageWidth),
|
||||
height:Math.floor(imageHeight),
|
||||
containerHeight:Math.floor(pp_containerHeight),
|
||||
containerWidth:Math.floor(pp_containerWidth) + (settings.horizontal_padding * 2),
|
||||
contentHeight:Math.floor(pp_contentHeight),
|
||||
contentWidth:Math.floor(pp_contentWidth),
|
||||
resized:resized
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the containers dimensions according to the item size
|
||||
* @param width {integer} Width of the item to be opened
|
||||
* @param height {integer} Height of the item to be opened
|
||||
*/
|
||||
function _getDimensions(width,height){
|
||||
width = parseFloat(width);
|
||||
height = parseFloat(height);
|
||||
|
||||
// Get the details height, to do so, I need to clone it since it's invisible
|
||||
$pp_details = $pp_pic_holder.find('.pp_details');
|
||||
$pp_details.width(width);
|
||||
detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
|
||||
|
||||
$pp_details = $pp_details.clone().addClass(settings.theme).width(width).appendTo($('body')).css({
|
||||
'position':'absolute',
|
||||
'top':-10000
|
||||
});
|
||||
detailsHeight += $pp_details.height();
|
||||
detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details
|
||||
if($.browser.msie && $.browser.version==7) detailsHeight+=8;
|
||||
$pp_details.remove();
|
||||
|
||||
// Get the titles height, to do so, I need to clone it since it's invisible
|
||||
$pp_title = $pp_pic_holder.find('.ppt');
|
||||
$pp_title.width(width);
|
||||
titleHeight = parseFloat($pp_title.css('marginTop')) + parseFloat($pp_title.css('marginBottom'));
|
||||
$pp_title = $pp_title.clone().appendTo($('body')).css({
|
||||
'position':'absolute',
|
||||
'top':-10000
|
||||
});
|
||||
titleHeight += $pp_title.height();
|
||||
$pp_title.remove();
|
||||
|
||||
// Get the container size, to resize the holder to the right dimensions
|
||||
pp_contentHeight = height + detailsHeight;
|
||||
pp_contentWidth = width;
|
||||
pp_containerHeight = pp_contentHeight + titleHeight + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
|
||||
pp_containerWidth = width;
|
||||
}
|
||||
|
||||
function _getFileType(itemSrc){
|
||||
if (itemSrc.match(/youtube\.com\/watch/i) || itemSrc.match(/youtu\.be/i)) {
|
||||
return 'youtube';
|
||||
}else if (itemSrc.match(/vimeo\.com/i)) {
|
||||
return 'vimeo';
|
||||
}else if(itemSrc.match(/\b.mov\b/i)){
|
||||
return 'quicktime';
|
||||
}else if(itemSrc.match(/\b.swf\b/i)){
|
||||
return 'flash';
|
||||
}else if(itemSrc.match(/\biframe=true\b/i)){
|
||||
return 'iframe';
|
||||
}else if(itemSrc.match(/\bajax=true\b/i)){
|
||||
return 'ajax';
|
||||
}else if(itemSrc.match(/\bcustom=true\b/i)){
|
||||
return 'custom';
|
||||
}else if(itemSrc.substr(0,1) == '#'){
|
||||
return 'inline';
|
||||
}else{
|
||||
return 'image';
|
||||
};
|
||||
};
|
||||
|
||||
function _center_overlay(){
|
||||
if(doresize && typeof $pp_pic_holder != 'undefined') {
|
||||
scroll_pos = _get_scroll();
|
||||
contentHeight = $pp_pic_holder.height(), contentwidth = $pp_pic_holder.width();
|
||||
|
||||
projectedTop = (windowHeight/2) + scroll_pos['scrollTop'] - (contentHeight/2);
|
||||
if(projectedTop < 0) projectedTop = 0;
|
||||
|
||||
if(contentHeight > windowHeight)
|
||||
return;
|
||||
|
||||
$pp_pic_holder.css({
|
||||
'top': projectedTop,
|
||||
'left': (windowWidth/2) + scroll_pos['scrollLeft'] - (contentwidth/2)
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
function _get_scroll(){
|
||||
if (self.pageYOffset) {
|
||||
return {scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};
|
||||
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
|
||||
return {scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};
|
||||
} else if (document.body) {// all other Explorers
|
||||
return {scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};
|
||||
};
|
||||
};
|
||||
|
||||
function _resize_overlay() {
|
||||
windowHeight = $(window).height(), windowWidth = $(window).width();
|
||||
|
||||
if(typeof $pp_overlay != "undefined") $pp_overlay.height($(document).height()).width(windowWidth);
|
||||
};
|
||||
|
||||
function _insert_gallery(){
|
||||
if(isSet && settings.overlay_gallery && _getFileType(pp_images[set_position])=="image" && (settings.ie6_fallback && !($.browser.msie && parseInt($.browser.version) == 6))) {
|
||||
itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
|
||||
navWidth = (settings.theme == "facebook" || settings.theme == "pp_default") ? 50 : 30; // Define the arrow width depending on the theme
|
||||
|
||||
itemsPerPage = Math.floor((pp_dimensions['containerWidth'] - 100 - navWidth) / itemWidth);
|
||||
itemsPerPage = (itemsPerPage < pp_images.length) ? itemsPerPage : pp_images.length;
|
||||
totalPage = Math.ceil(pp_images.length / itemsPerPage) - 1;
|
||||
|
||||
// Hide the nav in the case there's no need for links
|
||||
if(totalPage == 0){
|
||||
navWidth = 0; // No nav means no width!
|
||||
$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').hide();
|
||||
}else{
|
||||
$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').show();
|
||||
};
|
||||
|
||||
galleryWidth = itemsPerPage * itemWidth;
|
||||
fullGalleryWidth = pp_images.length * itemWidth;
|
||||
|
||||
// Set the proper width to the gallery items
|
||||
$pp_gallery
|
||||
.css('margin-left',-((galleryWidth/2) + (navWidth/2)))
|
||||
.find('div:first').width(galleryWidth+5)
|
||||
.find('ul').width(fullGalleryWidth)
|
||||
.find('li.selected').removeClass('selected');
|
||||
|
||||
goToPage = (Math.floor(set_position/itemsPerPage) < totalPage) ? Math.floor(set_position/itemsPerPage) : totalPage;
|
||||
|
||||
$.prettyPhoto.changeGalleryPage(goToPage);
|
||||
|
||||
$pp_gallery_li.filter(':eq('+set_position+')').addClass('selected');
|
||||
}else{
|
||||
$pp_pic_holder.find('.pp_content').unbind('mouseenter mouseleave');
|
||||
// $pp_gallery.hide();
|
||||
}
|
||||
}
|
||||
|
||||
function _build_overlay(caller){
|
||||
// Inject Social Tool markup into General markup
|
||||
if(settings.social_tools)
|
||||
facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
|
||||
|
||||
settings.markup=settings.markup.replace('{pp_social}',(settings.social_tools)?facebook_like_link:'');
|
||||
|
||||
$('body').append(settings.markup); // Inject the markup
|
||||
|
||||
$pp_pic_holder = $('.pp_pic_holder') , $ppt = $('.ppt'), $pp_overlay = $('div.pp_overlay'); // Set my global selectors
|
||||
|
||||
// Inject the inline gallery!
|
||||
if(isSet && settings.overlay_gallery) {
|
||||
currentGalleryPage = 0;
|
||||
toInject = "";
|
||||
for (var i=0; i < pp_images.length; i++) {
|
||||
if(!pp_images[i].match(/\b(jpg|jpeg|png|gif)\b/gi)){
|
||||
classname = 'default';
|
||||
img_src = '';
|
||||
}else{
|
||||
classname = '';
|
||||
img_src = pp_images[i];
|
||||
}
|
||||
toInject += "<li class='"+classname+"'><a href='#'><img src='" + img_src + "' width='50' alt='' /></a></li>";
|
||||
};
|
||||
|
||||
toInject = settings.gallery_markup.replace(/{gallery}/g,toInject);
|
||||
|
||||
$pp_pic_holder.find('#pp_full_res').after(toInject);
|
||||
|
||||
$pp_gallery = $('.pp_pic_holder .pp_gallery'), $pp_gallery_li = $pp_gallery.find('li'); // Set the gallery selectors
|
||||
|
||||
$pp_gallery.find('.pp_arrow_next').click(function(){
|
||||
$.prettyPhoto.changeGalleryPage('next');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
$pp_gallery.find('.pp_arrow_previous').click(function(){
|
||||
$.prettyPhoto.changeGalleryPage('previous');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
$pp_pic_holder.find('.pp_content').hover(
|
||||
function(){
|
||||
$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeIn();
|
||||
},
|
||||
function(){
|
||||
$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeOut();
|
||||
});
|
||||
|
||||
itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
|
||||
$pp_gallery_li.each(function(i){
|
||||
$(this)
|
||||
.find('a')
|
||||
.click(function(){
|
||||
$.prettyPhoto.changePage(i);
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// Inject the play/pause if it's a slideshow
|
||||
if(settings.slideshow){
|
||||
$pp_pic_holder.find('.pp_nav').prepend('<a href="#" class="pp_play">Play</a>')
|
||||
$pp_pic_holder.find('.pp_nav .pp_play').click(function(){
|
||||
$.prettyPhoto.startSlideshow();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
$pp_pic_holder.attr('class','pp_pic_holder ' + settings.theme); // Set the proper theme
|
||||
|
||||
$pp_overlay
|
||||
.css({
|
||||
'opacity':0,
|
||||
'height':$(document).height(),
|
||||
'width':$(window).width()
|
||||
})
|
||||
.bind('click',function(){
|
||||
if(!settings.modal) $.prettyPhoto.close();
|
||||
});
|
||||
|
||||
$('a.pp_close').bind('click',function(){ $.prettyPhoto.close(); return false; });
|
||||
|
||||
$('a.pp_expand').bind('click',function(e){
|
||||
// Expand the image
|
||||
if($(this).hasClass('pp_expand')){
|
||||
$(this).removeClass('pp_expand').addClass('pp_contract');
|
||||
doresize = false;
|
||||
}else{
|
||||
$(this).removeClass('pp_contract').addClass('pp_expand');
|
||||
doresize = true;
|
||||
};
|
||||
|
||||
_hideContent(function(){ $.prettyPhoto.open(); });
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
$pp_pic_holder.find('.pp_previous, .pp_nav .pp_arrow_previous').bind('click',function(){
|
||||
$.prettyPhoto.changePage('previous');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
$pp_pic_holder.find('.pp_next, .pp_nav .pp_arrow_next').bind('click',function(){
|
||||
$.prettyPhoto.changePage('next');
|
||||
$.prettyPhoto.stopSlideshow();
|
||||
return false;
|
||||
});
|
||||
|
||||
_center_overlay(); // Center it
|
||||
};
|
||||
|
||||
if(!pp_alreadyInitialized && getHashtag()){
|
||||
pp_alreadyInitialized = true;
|
||||
|
||||
// Grab the rel index to trigger the click on the correct element
|
||||
hashIndex = getHashtag();
|
||||
hashRel = hashIndex;
|
||||
hashIndex = hashIndex.substring(hashIndex.indexOf('/')+1,hashIndex.length-1);
|
||||
hashRel = hashRel.substring(0,hashRel.indexOf('/'));
|
||||
|
||||
// Little timeout to make sure all the prettyPhoto initialize scripts has been run.
|
||||
// Useful in the event the page contain several init scripts.
|
||||
setTimeout(function(){ $("a[rel^='"+hashRel+"']:eq("+hashIndex+")").trigger('click'); },50);
|
||||
}
|
||||
|
||||
return this.unbind('click.prettyphoto').bind('click.prettyphoto',$.prettyPhoto.initialize); // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
|
||||
};
|
||||
|
||||
function getHashtag(){
|
||||
url = location.href;
|
||||
hashtag = (url.indexOf('#!') != -1) ? decodeURI(url.substring(url.indexOf('#!')+2,url.length)) : false;
|
||||
return hashtag;
|
||||
};
|
||||
|
||||
function setHashtag(){
|
||||
if(typeof theRel == 'undefined') return; // theRel is set on normal calls, it's impossible to deeplink using the API
|
||||
location.hash = '!' + theRel + '/'+rel_index+'/';
|
||||
};
|
||||
|
||||
function clearHashtag(){
|
||||
// Clear the hashtag only if it was set by prettyPhoto
|
||||
url = location.href;
|
||||
hashtag = (url.indexOf('#!prettyPhoto')) ? true : false;
|
||||
if(hashtag) location.hash = "!prettyPhoto";
|
||||
}
|
||||
|
||||
function getParam(name,url){
|
||||
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
|
||||
var regexS = "[\\?&]"+name+"=([^&#]*)";
|
||||
var regex = new RegExp( regexS );
|
||||
var results = regex.exec( url );
|
||||
return ( results == null ) ? "" : results[1];
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
|
||||
var pp_alreadyInitialized = false; // Used for the deep linking to make sure not to call the same function several times.
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>log4net</id>
|
||||
<version>2.0.3</version>
|
||||
<title>log4net [1.2.13]</title>
|
||||
<authors>Apache Software Foundation</authors>
|
||||
<owners>Apache Software Foundation</owners>
|
||||
<licenseUrl>http://logging.apache.org/log4net/license.html</licenseUrl>
|
||||
<projectUrl>http://logging.apache.org/log4net/</projectUrl>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<description>log4net is a tool to help the programmer output log statements to a variety of output targets. In case of problems with an application, it is helpful to enable logging so that the problem can be located. With log4net it is possible to enable logging at runtime without modifying the application binary. The log4net package is designed so that log statements can remain in shipped code without incurring a high performance cost. It follows that the speed of logging (or rather not logging) is crucial.
|
||||
|
||||
At the same time, log output can be so voluminous that it quickly becomes overwhelming. One of the distinctive features of log4net is the notion of hierarchical loggers. Using these loggers it is possible to selectively control which log statements are output at arbitrary granularity.
|
||||
|
||||
log4net is designed with two distinct goals in mind: speed and flexibility</description>
|
||||
<summary>The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets.</summary>
|
||||
<tags>logging log tracing logfiles</tags>
|
||||
</metadata>
|
||||
</package>
|
||||
@@ -1,30 +1,34 @@
|
||||
Dependency-Check Jenkins Plugin
|
||||
==============================
|
||||
|
||||
The Dependency-Check Jenkins Plugin features the ability to perform a dependency
|
||||
analysis build and later view results post build. The plugin is built using [analysis-core]
|
||||
and features many of the same features that Jenkins static analysis plugins offer,
|
||||
including thresholds, charts and the ability to view vulnerability information should
|
||||
a dependency have one identified.
|
||||
Dependency-Check is a utility that identifies project dependencies and checks if there are any known, publicly disclosed, vulnerabilities. This tool can be part of the solution to the OWASP Top 10 2013: A9 - Using Components with Known Vulnerabilities. This plug-in can independently execute a Dependency-Check analysis and visualize results.
|
||||
|
||||
The main repository is located at [jenkins-cli/dependency-check-jenkins](https://github.com/jenkinsci/dependency-check-jenkins).
|
||||
|
||||
The main site for documentation is located at [OWASP Dependency-Check-Jenkins](https://wiki.jenkins-ci.org/display/JENKINS/OWASP+Dependency-Check+Plugin).
|
||||
The Dependency-Check Jenkins Plugin features the ability to perform a dependency analysis build and later view results post build. The plugin is built using [analysis-core] and features many of the same features that Jenkins static analysis plugins offer, including thresholds, charts and the ability to view vulnerability information should a dependency have one identified.
|
||||
|
||||
More information can be found on the [wiki].
|
||||
|
||||
Mailing List
|
||||
------------
|
||||
|
||||
Subscribe: [dependency-check+subscribe@googlegroups.com](mailto:dependency-check+subscribe@googlegroups.com)
|
||||
Subscribe: [dependency-check+subscribe@googlegroups.com] [subscribe]
|
||||
|
||||
Post: [dependency-check@googlegroups.com](mailto:dependency-check@googlegroups.com)
|
||||
Post: [dependency-check@googlegroups.com] [post]
|
||||
|
||||
Copyright
|
||||
Copyright & License
|
||||
-------------------
|
||||
|
||||
Dependency-Check is Copyright (c) 2012-2014 Jeremy Long. All Rights Reserved.
|
||||
|
||||
Dependency-Check Jenkins Plugin is Copyright (c) 2013-2014 Steve Springett. All Rights Reserved.
|
||||
|
||||
[wiki]: https://github.com/jenkinsci/dependency-check-jenkins/wiki
|
||||
Permission to modify and redistribute is granted under the terms of the Apache 2.0 license. See the [LICENSE.txt] [license] file for the full license.
|
||||
|
||||
Dependency-Check makes use of several other open source libraries. Please see the [NOTICE.txt] [notices] file for more information.
|
||||
|
||||
|
||||
[wiki]: https://wiki.jenkins-ci.org/display/JENKINS/OWASP+Dependency-Check+Plugin
|
||||
[analysis-core]: http://wiki.jenkins-ci.org/x/CwDgAQ
|
||||
[notices]: https://github.com/jenkinsci/dependency-check-jenkins/blob/master/NOTICES.txt
|
||||
[subscribe]: mailto:dependency-check+subscribe@googlegroups.com
|
||||
[post]: mailto:dependency-check@googlegroups.com
|
||||
[license]: https://github.com/jenkinsci/dependency-check-plugin/blob/master/LICENSE.txt
|
||||
[notices]: https://github.com/jenkinsci/dependency-check-plugin/blob/master/NOTICES.txt
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>org.owasp</groupId>
|
||||
<artifactId>dependency-check-parent</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<version>1.1.1</version>
|
||||
</parent>
|
||||
|
||||
<groupId>org.owasp</groupId>
|
||||
|
||||
@@ -1,30 +1,34 @@
|
||||
Dependency-Check Jenkins Plugin
|
||||
==============================
|
||||
|
||||
The Dependency-Check Jenkins Plugin features the ability to perform a dependency
|
||||
analysis build and later view results post build. The plugin is built using [analysis-core]
|
||||
and features many of the same features that Jenkins static analysis plugins offer,
|
||||
including thresholds, charts and the ability to view vulnerability information should
|
||||
a dependency have one identified.
|
||||
Dependency-Check is a utility that identifies project dependencies and checks if there are any known, publicly disclosed, vulnerabilities. This tool can be part of the solution to the OWASP Top 10 2013: A9 - Using Components with Known Vulnerabilities. This plug-in can independently execute a Dependency-Check analysis and visualize results.
|
||||
|
||||
The main repository is located at [jenkins-cli/dependency-check-jenkins](https://github.com/jenkinsci/dependency-check-jenkins).
|
||||
|
||||
The main site for documentation is located at [OWASP Dependency-Check-Jenkins](https://wiki.jenkins-ci.org/display/JENKINS/OWASP+Dependency-Check+Plugin).
|
||||
The Dependency-Check Jenkins Plugin features the ability to perform a dependency analysis build and later view results post build. The plugin is built using [analysis-core] and features many of the same features that Jenkins static analysis plugins offer, including thresholds, charts and the ability to view vulnerability information should a dependency have one identified.
|
||||
|
||||
More information can be found on the [wiki].
|
||||
|
||||
Mailing List
|
||||
------------
|
||||
|
||||
Subscribe: [dependency-check+subscribe@googlegroups.com](mailto:dependency-check+subscribe@googlegroups.com)
|
||||
Subscribe: [dependency-check+subscribe@googlegroups.com] [subscribe]
|
||||
|
||||
Post: [dependency-check@googlegroups.com](mailto:dependency-check@googlegroups.com)
|
||||
Post: [dependency-check@googlegroups.com] [post]
|
||||
|
||||
Copyright
|
||||
Copyright & License
|
||||
-------------------
|
||||
|
||||
Dependency-Check is Copyright (c) 2012-2014 Jeremy Long. All Rights Reserved.
|
||||
|
||||
Dependency-Check Jenkins Plugin is Copyright (c) 2013-2014 Steve Springett. All Rights Reserved.
|
||||
|
||||
[wiki]: https://github.com/jenkinsci/dependency-check-jenkins/wiki
|
||||
Permission to modify and redistribute is granted under the terms of the Apache 2.0 license. See the [LICENSE.txt] [license] file for the full license.
|
||||
|
||||
Dependency-Check makes use of several other open source libraries. Please see the [NOTICE.txt] [notices] file for more information.
|
||||
|
||||
|
||||
[wiki]: https://wiki.jenkins-ci.org/display/JENKINS/OWASP+Dependency-Check+Plugin
|
||||
[analysis-core]: http://wiki.jenkins-ci.org/x/CwDgAQ
|
||||
[notices]: https://github.com/jenkinsci/dependency-check-jenkins/blob/master/NOTICES.txt
|
||||
[subscribe]: mailto:dependency-check+subscribe@googlegroups.com
|
||||
[post]: mailto:dependency-check@googlegroups.com
|
||||
[license]: https://github.com/jenkinsci/dependency-check-plugin/blob/master/LICENSE.txt
|
||||
[notices]: https://github.com/jenkinsci/dependency-check-plugin/blob/master/NOTICES.txt
|
||||
|
||||
@@ -23,7 +23,7 @@ Copyright (c) 2013 Jeremy Long. All Rights Reserved.
|
||||
<parent>
|
||||
<groupId>org.owasp</groupId>
|
||||
<artifactId>dependency-check-parent</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<version>1.1.1</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dependency-check-maven</artifactId>
|
||||
|
||||
@@ -206,7 +206,7 @@ public class DependencyCheckMojo extends AbstractMojo implements MavenMultiPageR
|
||||
* The database connection string.
|
||||
*/
|
||||
@SuppressWarnings({"CanBeFinal", "FieldCanBeLocal"})
|
||||
@Parameter(property = "nexusUrl", defaultValue = "", required = false)
|
||||
@Parameter(property = "connectionString", defaultValue = "", required = false)
|
||||
private String connectionString;
|
||||
/**
|
||||
* The database driver name. An example would be org.h2.Driver.
|
||||
|
||||
Reference in New Issue
Block a user