scanoss 0.10.4 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/main/sdk/Dependencies/LocalDependency/LocalDependency.d.ts +2 -2
- package/build/main/sdk/Dependencies/LocalDependency/LocalDependency.js +21 -19
- package/build/main/sdk/Dependencies/LocalDependency/LocalDependency.spec.d.ts +1 -0
- package/build/main/sdk/Dependencies/LocalDependency/LocalDependency.spec.js +33 -0
- package/build/main/sdk/Dependencies/LocalDependency/parsers/parser.spec.d.ts +1 -0
- package/build/main/sdk/Dependencies/LocalDependency/parsers/parser.spec.js +112 -0
- package/build/main/sdk/Dependencies/LocalDependency/parsers/python/PyProjectToml.d.ts +3 -0
- package/build/main/sdk/Dependencies/LocalDependency/parsers/python/PyProjectToml.js +40 -0
- package/build/main/sdk/scanner/Dispatcher/DispatchableItem.d.ts +1 -1
- package/build/main/sdk/scanner/Dispatcher/DispatchableItem.js +2 -1
- package/build/main/sdk/scanner/Dispatcher/Dispatcher.js +6 -5
- package/build/main/tsconfig.tsbuildinfo +55 -5
- package/build/module/sdk/Dependencies/LocalDependency/LocalDependency.d.ts +2 -2
- package/build/module/sdk/Dependencies/LocalDependency/LocalDependency.js +25 -23
- package/build/module/sdk/Dependencies/LocalDependency/LocalDependency.spec.d.ts +1 -0
- package/build/module/sdk/Dependencies/LocalDependency/LocalDependency.spec.js +32 -0
- package/build/module/sdk/Dependencies/LocalDependency/parsers/parser.spec.d.ts +1 -0
- package/build/module/sdk/Dependencies/LocalDependency/parsers/parser.spec.js +108 -0
- package/build/module/sdk/Dependencies/LocalDependency/parsers/python/PyProjectToml.d.ts +3 -0
- package/build/module/sdk/Dependencies/LocalDependency/parsers/python/PyProjectToml.js +42 -0
- package/build/module/sdk/scanner/Dispatcher/DispatchableItem.d.ts +1 -1
- package/build/module/sdk/scanner/Dispatcher/DispatchableItem.js +2 -1
- package/build/module/sdk/scanner/Dispatcher/Dispatcher.js +6 -5
- package/build/module/tsconfig.module.tsbuildinfo +55 -5
- package/package.json +3 -3
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import pyProjectToml from './python/PyProjectToml';
|
|
3
|
+
import { pomParser } from './mavenParser';
|
|
4
|
+
const ParserSpec = [
|
|
5
|
+
/****************************************************************************/
|
|
6
|
+
/* POM:XML DEPENDENCY TEST DATA */
|
|
7
|
+
/****************************************************************************/
|
|
8
|
+
{
|
|
9
|
+
test_name: "pom.xml example 1",
|
|
10
|
+
source: "",
|
|
11
|
+
note: "",
|
|
12
|
+
file_name: "pom.xml",
|
|
13
|
+
file_content: "<?xml version='1.0' encoding='UTF-8'?>\n<!--\n~ Copyright 2016 Red Hat, Inc. and/or its affiliates\n~ and other contributors as indicated by the @author tags.\n~\n~ Licensed under the Apache License, Version 2.0 (the \"License\");\n~ you may not use this file except in compliance with the License.\n~ You may obtain a copy of the License at\n~\n~ http://www.apache.org/licenses/LICENSE-2.0\n~\n~ Unless required by applicable law or agreed to in writing, software\n~ distributed under the License is distributed on an \"AS IS\" BASIS,\n~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n~ See the License for the specific language governing permissions and\n~ limitations under the License.\n\n-->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n <modelVersion>4.0.0</modelVersion>\n\n <parent>\n <groupId>org.jboss</groupId>\n <artifactId>jboss-parent</artifactId>\n <version>37</version>\n </parent>\n\n <name>Keycloak</name>\n <description>\n Keycloak SSO\n </description>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-parent</artifactId>\n <version>999-SNAPSHOT</version>\n <packaging>pom</packaging>\n\n <properties>\n <jboss.repo.nexusUrl>https://s01.oss.sonatype.org/</jboss.repo.nexusUrl>\n <jboss.releases.repo.id>jboss-releases-repository</jboss.releases.repo.id>\n <jboss.releases.repo.url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</jboss.releases.repo.url>\n <jboss.snapshots.repo.id>jboss-snapshots-repository</jboss.snapshots.repo.id>\n <jboss.snapshots.repo.url>https://s01.oss.sonatype.org/content/repositories/snapshots/</jboss.snapshots.repo.url>\n\n <quarkus.version>2.7.5.Final</quarkus.version>\n\n <!--\n Performing a Wildfly upgrade? Run the:\n\n \"./misc/scripts/upgrade-wildfly/upgrade-keycloak-to-wildfly-tag.py\"\n\n script with the corresponding Wildfly tag, e.g. '20.0.0.Final' to get necessary Keycloak bits\n updated automatically based on corresponding artifact versions used in Wildfly and Wildfly Core\n\n IMPORTANT: If you add new dependency name / version property below, be sure to update the\n \"./misc/scripts/upgrade-wildfly/upgrade-keycloak-to-wildfly-tag.py\" script too to ensure\n the script continues to work\n -->\n\n <product.rhsso.version>7.5.0.GA</product.rhsso.version>\n\n <product.build-time>${timestamp}</product.build-time>\n <wildfly.version>26.1.0.Final</wildfly.version>\n <wildfly.build-tools.version>1.2.13.Final</wildfly.build-tools.version>\n <eap.version>7.4.0.GA-redhat-00005</eap.version>\n <wildfly.core.version>18.1.0.Final</wildfly.core.version>\n\n <jboss.as.version>7.2.0.Final</jboss.as.version>\n <jboss.as.subsystem.test.version>7.5.22.Final-redhat-1</jboss.as.subsystem.test.version>\n\n <!-- Versions used mostly for Undertow server, aligned with WildFly -->\n <jboss.aesh.version>0.66.19</jboss.aesh.version>\n <aesh.version>2.4</aesh.version>\n <apache.httpcomponents.version>4.5.13</apache.httpcomponents.version>\n <apache.httpcomponents.httpcore.version>4.4.14</apache.httpcomponents.httpcore.version>\n <apache.mime4j.version>0.6</apache.mime4j.version>\n <jboss.dmr.version>1.5.1.Final</jboss.dmr.version>\n <bouncycastle.version>1.68</bouncycastle.version>\n <cxf.version>3.3.10</cxf.version>\n <cxf.jetty.version>3.3.10</cxf.jetty.version>\n <cxf.jaxrs.version>3.3.10</cxf.jaxrs.version>\n <cxf.undertow.version>3.3.10</cxf.undertow.version>\n <dom4j.version>2.1.3</dom4j.version>\n <h2.version>1.4.197</h2.version>\n <jakarta.persistence.version>2.2.3</jakarta.persistence.version>\n <hibernate.core.version>5.3.24.Final</hibernate.core.version>\n <hibernate.c3p0.version>5.3.24.Final</hibernate.c3p0.version>\n <infinispan.version>12.1.7.Final</infinispan.version>\n <infinispan.protostream.processor.version>4.4.1.Final</infinispan.protostream.processor.version>\n <javax.annotation-api.version>1.3.2</javax.annotation-api.version>\n <jackson.version>2.12.1</jackson.version>\n <jackson.databind.version>2.12.6.1</jackson.databind.version>\n <jackson.annotations.version>${jackson.databind.version}</jackson.annotations.version>\n <jakarta.mail.version>1.6.5</jakarta.mail.version>\n <jboss-jaxrs-api_2.1_spec>2.0.1.Final</jboss-jaxrs-api_2.1_spec>\n <jboss.logging.version>3.4.1.Final</jboss.logging.version>\n <jboss.logging.tools.version>2.2.1.Final</jboss.logging.tools.version>\n <jboss.marshalling.version>2.0.11.Final</jboss.marshalling.version>\n <jboss-transaction-api_1.3_spec>2.0.0.Final</jboss-transaction-api_1.3_spec>\n <jboss.spec.javax.xml.bind.jboss-jaxb-api_2.3_spec.version>2.0.1.Final</jboss.spec.javax.xml.bind.jboss-jaxb-api_2.3_spec.version>\n <jboss.spec.javax.servlet.jsp.jboss-jsp-api_2.3_spec.version>2.0.0.Final</jboss.spec.javax.servlet.jsp.jboss-jsp-api_2.3_spec.version>\n <log4j.version>1.2.17</log4j.version>\n <resteasy.version>3.15.1.Final</resteasy.version>\n <resteasy.undertow.version>${resteasy.version}</resteasy.undertow.version>\n <owasp.html.sanitizer.version>20211018.2</owasp.html.sanitizer.version>\n <slf4j-api.version>1.7.30</slf4j-api.version>\n <slf4j.version>1.7.30</slf4j.version>\n <sun.istack.version>3.0.10</sun.istack.version>\n <sun.xml.bind.version>2.3.3-b02</sun.xml.bind.version>\n <javax.xml.bind.jaxb.version>2.4.0-b180830.0359</javax.xml.bind.jaxb.version>\n <sun.xml.ws.version>2.3.1</sun.xml.ws.version>\n <sun.activation.version>1.2.2</sun.activation.version>\n <org.glassfish.jaxb.xsom.version>2.3.3-b02</org.glassfish.jaxb.xsom.version>\n <undertow.version>2.2.5.Final</undertow.version>\n <elytron.version>1.18.3.Final</elytron.version>\n <elytron.undertow-server.version>1.9.0.Final</elytron.undertow-server.version>\n <jetty94.version>9.4.40.v20210413</jetty94.version>\n <woodstox.version>6.0.3</woodstox.version>\n <xmlsec.version>2.2.3</xmlsec.version>\n <glassfish.json.version>1.1.6</glassfish.json.version>\n <wildfly.common.version>1.6.0.Final</wildfly.common.version>\n <ua-parser.version>1.5.2</ua-parser.version>\n <picketbox.version>5.0.3.Final</picketbox.version>\n <google.guava.version>30.1-jre</google.guava.version>\n\n <!-- Openshift -->\n <version.com.openshift.openshift-restclient-java>8.0.0.Final</version.com.openshift.openshift-restclient-java>\n\n <!-- Others -->\n <commons-lang.version>2.6</commons-lang.version>\n <commons-lang3.version>3.11</commons-lang3.version>\n <commons-io.version>2.7</commons-io.version>\n <apacheds.version>2.0.0.AM26</apacheds.version>\n <apacheds.codec.version>2.0.0</apacheds.codec.version>\n <google.zxing.version>3.4.0</google.zxing.version>\n <freemarker.version>2.3.31</freemarker.version>\n\n <jetty9.version>${jetty94.version}</jetty9.version>\n <liquibase.version>4.8.0</liquibase.version>\n <osgi.version>4.2.0</osgi.version>\n <pax.web.version>7.1.0</pax.web.version>\n <servlet.api.30.version>1.0.2.Final</servlet.api.30.version>\n <servlet.api.40.version>2.0.0.Final</servlet.api.40.version>\n <twitter4j.version>4.0.7</twitter4j.version>\n <jna.version>4.1.0</jna.version>\n\n <!-- Databases -->\n <mysql.version>8.0.23</mysql.version>\n <mysql.driver.version>8.0.23</mysql.driver.version>\n <postgresql.version>13.2</postgresql.version>\n <postgresql.driver.version>42.3.3</postgresql.driver.version>\n <mariadb.version>10.3.27</mariadb.version>\n <mariadb.driver.version>2.7.2</mariadb.driver.version>\n <mssql.version>2019-CU10-ubuntu-20.04</mssql.version>\n <mssql.driver.version>9.2.0.jre8</mssql.driver.version>\n\n <!-- Test -->\n <greenmail.version>1.3.1b</greenmail.version>\n <hamcrest.version>2.2</hamcrest.version>\n <jmeter.version>2.10</jmeter.version>\n <junit.version>4.13.2</junit.version>\n <picketlink.version>2.7.0.Final</picketlink.version>\n <selenium.version>2.35.0</selenium.version>\n <xml-apis.version>1.4.01</xml-apis.version>\n <subethasmtp.version>3.1.7</subethasmtp.version>\n <awaitility.version>4.1.1</awaitility.version>\n <assertj-core.version>3.22.0</assertj-core.version>\n <!-- KEYCLOAK-17585 Prevent microprofile-metrics-api upgrades from version \"2.3\" due to:\n https://issues.redhat.com/browse/KEYCLOAK-17585?focusedCommentId=16002705&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16002705\n -->\n <microprofile-metrics-api.version>2.3</microprofile-metrics-api.version>\n\n <!-- Maven Plugins -->\n <replacer.plugin.version>1.3.5</replacer.plugin.version>\n <jboss.as.plugin.version>7.5.Final</jboss.as.plugin.version>\n <jmeter.plugin.version>1.9.0</jmeter.plugin.version>\n <jmeter.analysis.plugin.version>1.0.4</jmeter.analysis.plugin.version>\n <minify.plugin.version>1.7.6</minify.plugin.version>\n <osgi.bundle.plugin.version>2.3.7</osgi.bundle.plugin.version>\n <wildfly.plugin.version>2.0.1.Final</wildfly.plugin.version>\n <nexus.staging.plugin.version>1.6.5</nexus.staging.plugin.version>\n <frontend.plugin.version>1.12.0</frontend.plugin.version>\n <docker.maven.plugin.version>0.28.0</docker.maven.plugin.version>\n <verifier.plugin.version>1.1</verifier.plugin.version>\n\n <!-- Surefire Settings -->\n <surefire.memory.Xms>512m</surefire.memory.Xms>\n <surefire.memory.Xmx>2048m</surefire.memory.Xmx>\n <surefire.memory.metaspace>96m</surefire.memory.metaspace>\n <surefire.memory.metaspace.max>512m</surefire.memory.metaspace.max>\n <surefire.memory.settings>-Xms${surefire.memory.Xms} -Xmx${surefire.memory.Xmx} -XX:MetaspaceSize=${surefire.memory.metaspace} -XX:MaxMetaspaceSize=${surefire.memory.metaspace.max}</surefire.memory.settings>\n <surefire.system.args></surefire.system.args>\n\n <!-- Tomcat versions -->\n <tomcat8.version>8.5.38</tomcat8.version>\n <tomcat9.version>9.0.16</tomcat9.version>\n\n <!-- Spring Boot versions, used for tests -->\n <spring-boot24.version>2.4.13</spring-boot24.version>\n <spring-boot26.version>2.6.1</spring-boot26.version>\n\n <!-- webauthn support -->\n <webauthn4j.version>0.12.0.RELEASE</webauthn4j.version>\n <org.apache.kerby.kerby-asn1.version>2.0.0</org.apache.kerby.kerby-asn1.version>\n\n <!-- WildFly Galleon Build related properties -->\n <org.wildfly.galleon-plugins.version>5.2.7.Final</org.wildfly.galleon-plugins.version>\n <org.jboss.galleon.version>4.2.8.Final</org.jboss.galleon.version>\n\n <!-- Galleon -->\n <galleon.fork.embedded>true</galleon.fork.embedded>\n <galleon.log.time>true</galleon.log.time>\n <galleon.offline>true</galleon.offline>\n\n <!-- Properties that drive the names of various directories produced by and used in the build -->\n <server.output.dir.prefix>keycloak</server.output.dir.prefix>\n <!-- Version suffix that is appended to directories. Default is the maven GAV version but this can be edited to use a short form version -->\n <server.output.dir.version>${project.version}</server.output.dir.version>\n\n <!-- Frontend -->\n <node.version>v16.13.2</node.version>\n </properties>\n\n <url>http://keycloak.org</url>\n\n <licenses>\n <license>\n <name>Apache License, Version 2.0</name>\n <url>https://www.apache.org/licenses/LICENSE-2.0</url>\n <distribution>repo</distribution>\n </license>\n </licenses>\n\n <scm>\n <connection>scm:git:git://github.com/keycloak/keycloak.git</connection>\n <developerConnection>scm:git:git@github.com:keycloak/keycloak.git</developerConnection>\n <url>https://github.com/keycloak/keycloak/tree/master/</url>\n </scm>\n\n <distributionManagement>\n <repository>\n <id>${jboss.releases.repo.id}</id>\n <name>JBoss Releases Repository</name>\n <url>${jboss.releases.repo.url}</url>\n </repository>\n </distributionManagement>\n\n <issueManagement>\n <system>JIRA</system>\n <url>https://github.com/keycloak/keycloak/issues</url>\n </issueManagement>\n\n <developers>\n <developer>\n <id>keycloak</id>\n <name>Keycloak Team</name>\n </developer>\n </developers>\n\n <contributors></contributors>\n\n <modules>\n <module>boms</module>\n <module>common</module>\n <module>core</module>\n <module>dependencies</module>\n <module>docs</module>\n <module>server-spi</module>\n <module>server-spi-private</module>\n <module>saml-core-api</module>\n <module>saml-core</module>\n <module>federation</module>\n <module>services</module>\n <module>themes</module>\n <module>model</module>\n <module>util</module>\n <module>wildfly</module>\n <module>integration</module>\n <module>adapters</module>\n <module>authz</module>\n <module>misc</module>\n </modules>\n\n <dependencyManagement>\n\n <dependencies>\n\n <dependency>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-dependencies-admin-ui-wrapper</artifactId>\n <version>${project.version}</version>\n <type>pom</type>\n </dependency>\n <dependency>\n <groupId>org.jboss</groupId>\n <artifactId>jboss-dmr</artifactId>\n <version>${jboss.dmr.version}</version>\n </dependency>\n <dependency>\n <groupId>com.sun.istack</groupId>\n <artifactId>istack-commons-runtime</artifactId>\n <version>${sun.istack.version}</version>\n </dependency>\n <dependency>\n <groupId>org.wildfly.common</groupId>\n <artifactId>wildfly-common</artifactId>\n <version>${wildfly.common.version}</version>\n </dependency>\n\n <!-- Authorization -->\n <dependency>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-testsuite-utils</artifactId>\n <version>${project.version}</version>\n </dependency>\n <dependency>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-testsuite-tools</artifactId>\n <version>${project.version}</version>\n </dependency>\n <dependency>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-testsuite-tools</artifactId>\n <version>${project.version}</version>\n <classifier>classes</classifier>\n </dependency>\n\n <dependency>\n <groupId>org.eclipse.microprofile.metrics</groupId>\n <artifactId>microprofile-metrics-api</artifactId>\n <version>${microprofile-metrics-api.version}</version>\n <exclusions>\n <exclusion>\n <groupId>org.osgi</groupId>\n <artifactId>org.osgi.annotation.versioning</artifactId>\n </exclusion>\n </exclusions>\n </dependency>\n\n <!-- used in server-dist build while provisioning the distribution -->\n <dependency>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-server-galleon-pack</artifactId>\n <version>${project.version}</version>\n <type>zip</type>\n </dependency>\n\n <dependency>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-server-galleon-pack</artifactId>\n <version>${project.version}</version>\n <type>pom</type>\n </dependency>\n\n <!-- WildFly Galleon Plugins -->\n <dependency>\n <groupId>org.wildfly.galleon-plugins</groupId>\n <artifactId>wildfly-galleon-plugins</artifactId>\n <version>${org.wildfly.galleon-plugins.version}</version>\n <exclusions>\n <exclusion>\n <groupId>org.jboss.galleon</groupId>\n <artifactId>*</artifactId>\n </exclusion>\n </exclusions>\n </dependency>\n\n <dependency>\n <groupId>org.wildfly.galleon-plugins</groupId>\n <artifactId>wildfly-config-gen</artifactId>\n <version>${org.wildfly.galleon-plugins.version}</version>\n <exclusions>\n <exclusion>\n <groupId>*</groupId>\n <artifactId>*</artifactId>\n </exclusion>\n </exclusions>\n </dependency>\n\n <dependency>\n <groupId>org.wildfly.galleon-plugins</groupId>\n <artifactId>transformer</artifactId>\n <version>${org.wildfly.galleon-plugins.version}</version>\n <exclusions>\n <exclusion>\n <groupId>*</groupId>\n <artifactId>*</artifactId>\n </exclusion>\n </exclusions>\n </dependency>\n\n </dependencies>\n </dependencyManagement>\n\n <build>\n <pluginManagement>\n <plugins>\n <plugin>\n <groupId>org.sonatype.plugins</groupId>\n <artifactId>nexus-staging-maven-plugin</artifactId>\n <version>${nexus.staging.plugin.version}</version>\n <extensions>true</extensions>\n <configuration>\n <serverId>${jboss.releases.repo.id}</serverId>\n <nexusUrl>${jboss.repo.nexusUrl}</nexusUrl>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-assembly-plugin</artifactId>\n <configuration>\n <tarLongFileMode>posix</tarLongFileMode>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-dependency-plugin</artifactId>\n <version>3.1.2</version>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-release-plugin</artifactId>\n <version>2.5.2</version>\n <configuration>\n <autoVersionSubmodules>true</autoVersionSubmodules>\n <tagNameFormat>@{project.version}</tagNameFormat>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-surefire-plugin</artifactId>\n <version>3.0.0-M5</version>\n <configuration>\n <forkNode implementation=\"org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory\"/>\n <forkMode>once</forkMode>\n <argLine>-Djava.awt.headless=true ${surefire.memory.settings} ${surefire.system.args} -Duser.language=en -Duser.region=US</argLine>\n <runOrder>alphabetical</runOrder>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-jar-plugin</artifactId>\n </plugin>\n <plugin>\n <groupId>com.google.code.maven-replacer-plugin</groupId>\n <artifactId>maven-replacer-plugin</artifactId>\n <version>${replacer.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-install-plugin</artifactId>\n <configuration>\n <createChecksum>true</createChecksum>\n </configuration>\n </plugin>\n <plugin>\n <groupId>com.lazerycode.jmeter</groupId>\n <artifactId>jmeter-maven-plugin</artifactId>\n <version>${jmeter.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>com.lazerycode.jmeter</groupId>\n <artifactId>jmeter-analysis-maven-plugin</artifactId>\n <version>${jmeter.analysis.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.jboss.as.plugins</groupId>\n <artifactId>jboss-as-maven-plugin</artifactId>\n <version>${jboss.as.plugin.version}</version>\n <configuration>\n <skip>true</skip>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.wildfly.plugins</groupId>\n <artifactId>wildfly-maven-plugin</artifactId>\n <version>${wildfly.plugin.version}</version>\n <configuration>\n <skip>true</skip>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.jboss.galleon</groupId>\n <artifactId>galleon-maven-plugin</artifactId>\n <version>${org.jboss.galleon.version}</version>\n </plugin>\n <plugin>\n <groupId>com.samaxes.maven</groupId>\n <artifactId>minify-maven-plugin</artifactId>\n <version>${minify.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.liquibase</groupId>\n <artifactId>liquibase-maven-plugin</artifactId>\n <version>${liquibase.version}</version>\n </plugin>\n <plugin>\n <groupId>org.wildfly.build</groupId>\n <artifactId>wildfly-server-provisioning-maven-plugin</artifactId>\n <version>${wildfly.build-tools.version}</version>\n </plugin>\n <plugin>\n <groupId>org.wildfly.galleon-plugins</groupId>\n <artifactId>wildfly-galleon-maven-plugin</artifactId>\n <version>${org.wildfly.galleon-plugins.version}</version>\n <dependencies>\n <dependency>\n <groupId>org.wildfly.core</groupId>\n <artifactId>wildfly-embedded</artifactId>\n <version>${wildfly.core.version}</version>\n </dependency>\n <!-- If you add a dependency on wildfly-embedded you need to bring your own transitives -->\n <dependency>\n <groupId>org.wildfly.common</groupId>\n <artifactId>wildfly-common</artifactId>\n <version>${wildfly.common.version}</version>\n </dependency>\n </dependencies>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-verifier-plugin</artifactId>\n <version>${verifier.plugin.version}</version>\n <executions>\n <execution>\n <id>main</id>\n <phase>verify</phase>\n <goals>\n <goal>verify</goal>\n </goals>\n </execution>\n </executions>\n <configuration>\n <verificationFile>target/verifier/verifications.xml</verificationFile>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.felix</groupId>\n <artifactId>maven-bundle-plugin</artifactId>\n <version>${osgi.bundle.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>com.github.eirslett</groupId>\n <artifactId>frontend-maven-plugin</artifactId>\n <version>${frontend.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-distribution-licenses-maven-plugin</artifactId>\n <version>${project.version}</version>\n <executions>\n <execution>\n <id>process-licenses</id>\n <goals>\n <goal>process</goal>\n </goals>\n <phase>process-resources</phase>\n </execution>\n </executions>\n </plugin>\n </plugins>\n </pluginManagement>\n </build>\n\n <profiles>\n <profile>\n <id>community</id>\n <activation>\n <property>\n <name>!product</name>\n </property>\n </activation>\n <properties>\n <product.name>Keycloak</product.name>\n <product.name.full>Keycloak</product.name.full>\n <product.slot>keycloak</product.slot>\n <product.wildfly.console.slot>main</product.wildfly.console.slot>\n <product.name-html>\u003Cdiv class=\"kc-logo-text\"\u003E\u003Cspan\u003EKeycloak\u003C\u002Fspan\u003E\u003C\u002Fdiv\u003E</product.name-html>\n <product.version>${project.version}</product.version>\n <product.default-profile>community</product.default-profile>\n <apache.httpcomponents.fuse.version>4.5.2</apache.httpcomponents.fuse.version>\n <apache.httpcomponents.httpcore.fuse.version>4.4.4</apache.httpcomponents.httpcore.fuse.version>\n <ee.maven.groupId>org.wildfly</ee.maven.groupId>\n <ee.maven.version>${wildfly.version}</ee.maven.version>\n <product.filename.version>${project.version}</product.filename.version>\n </properties>\n </profile>\n\n <profile>\n <id>jdk9</id>\n <activation>\n <jdk>[9,)</jdk>\n </activation>\n <properties>\n <surefire.system.args>\n --add-opens=java.base/java.lang=ALL-UNNAMED\n </surefire.system.args>\n </properties>\n </profile>\n\n <profile>\n <id>quarkus</id>\n <activation>\n <jdk>[11,)</jdk>\n <property>\n <name>!product</name>\n </property>\n </activation>\n <modules>\n <module>quarkus</module>\n </modules>\n </profile>\n\n <profile>\n <id>product</id>\n <activation>\n <property>\n <name>product</name>\n </property>\n </activation>\n <properties>\n <product.name.full>Red Hat Single Sign-On</product.name.full>\n <product.name>rh-sso</product.name>\n <product.slot>rh-sso</product.slot>\n <product.wildfly.console.slot>eap</product.wildfly.console.slot>\n <product.name-html>\u003Cstrong\u003ERed Hat\u003C\u002Fstrong\u003E\u003Csup\u003E\u00AE\u003C\u002Fsup\u003E Single Sign On</product.name-html>\n <product.version>${product.rhsso.version}</product.version>\n <apache.httpcomponents.fuse.version>4.5.2.redhat-2</apache.httpcomponents.fuse.version>\n <apache.httpcomponents.httpcore.fuse.version>4.4.4.redhat-2</apache.httpcomponents.httpcore.fuse.version>\n <product.default-profile>product</product.default-profile>\n <ee.maven.groupId>org.jboss.eap</ee.maven.groupId>\n <ee.maven.version>${eap.version}</ee.maven.version>\n <!-- Properties that drive the names of various directories produced by and used in the build -->\n <server.output.dir.prefix>${product.name}</server.output.dir.prefix>\n <!-- Version suffix that is appended to directories. Default is the maven GAV version but this can be edited to use a short form version -->\n <server.output.dir.version>${product.filename.version}</server.output.dir.version>\n </properties>\n <build>\n <plugins>\n <plugin>\n <groupId>org.codehaus.mojo</groupId>\n <artifactId>build-helper-maven-plugin</artifactId>\n <version>1.7</version>\n <executions>\n <execution>\n <id>set-product-filename-version</id>\n <goals>\n <goal>regex-property</goal>\n </goals>\n <phase>initialize</phase>\n <configuration>\n <name>product.filename.version</name>\n <value>${product.rhsso.version}</value>\n <regex>^(\d+(\.\d+)?).*?$</regex>\n <replacement>$1</replacement>\n <failIfNoMatch>true</failIfNoMatch>\n </configuration>\n </execution>\n </executions>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n <profile>\n <id>testsuite</id>\n <activation>\n <property>\n <name>!skipTestsuite</name>\n </property>\n </activation>\n <modules>\n <module>testsuite</module>\n </modules>\n </profile>\n\n <profile>\n <id>examples</id>\n <activation>\n <property>\n <name>!skipExamples</name>\n </property>\n </activation>\n <modules>\n <module>examples</module>\n </modules>\n </profile>\n\n <profile>\n <id>distribution</id>\n <modules>\n <module>distribution</module>\n </modules>\n </profile>\n\n <profile>\n <id>jboss-release</id>\n <modules>\n <module>distribution</module>\n </modules>\n </profile>\n\n <profile>\n <id>operator</id>\n <activation>\n <jdk>[11,)</jdk>\n <property>\n <name>operator</name>\n </property>\n </activation>\n <modules>\n <module>operator</module>\n </modules>\n </profile>\n\n <profile>\n <id>doclint-java8-disable</id>\n <activation>\n <jdk>[1.8,)</jdk>\n </activation>\n\n <build>\n <plugins>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-javadoc-plugin</artifactId>\n <configuration>\n <additionalparam>-Xdoclint:none</additionalparam>\n <failOnError>false</failOnError>\n <excludePackageNames>cx.*:org.freedesktop*:org.jvnet*</excludePackageNames>\n </configuration>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n <profile>\n <id>nexus-staging</id>\n <build>\n <plugins>\n <plugin>\n <groupId>org.sonatype.plugins</groupId>\n <artifactId>nexus-staging-maven-plugin</artifactId>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n <profile>\n <id>gpg</id>\n <build>\n <plugins>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-gpg-plugin</artifactId>\n <version>3.0.1</version>\n <executions>\n <execution>\n <id>sign-artifacts</id>\n <phase>verify</phase>\n <goals>\n <goal>sign</goal>\n </goals>\n <configuration>\n <gpgArguments>\n <arg>--batch</arg>\n <arg>--pinentry-mode</arg>\n <arg>loopback</arg>\n </gpgArguments>\n </configuration>\n </execution>\n </executions>\n <configuration>\n </configuration>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n </profiles>\n</project>\n",
|
|
14
|
+
expect: { file: 'pom.xml', purls: [{ purl: "pkg:maven/org.keycloak/keycloak-dependencies-admin-ui-wrapper?type=pom", requirement: "999-SNAPSHOT", scope: null }, { purl: "pkg:maven/org.jboss/jboss-dmr", requirement: "1.5.1.Final", scope: null }, { purl: "pkg:maven/com.sun.istack/istack-commons-runtime", requirement: "3.0.10", scope: null }, { purl: "pkg:maven/org.wildfly.common/wildfly-common", requirement: "1.6.0.Final", scope: null }, { purl: "pkg:maven/org.keycloak/keycloak-testsuite-utils", requirement: "999-SNAPSHOT", scope: null }, { purl: "pkg:maven/org.keycloak/keycloak-testsuite-tools", requirement: "999-SNAPSHOT", scope: null }, { purl: "pkg:maven/org.keycloak/keycloak-testsuite-tools?classifier=classes", requirement: "999-SNAPSHOT", scope: null }, { purl: "pkg:maven/org.eclipse.microprofile.metrics/microprofile-metrics-api", requirement: "2.3", scope: null }, { purl: "pkg:maven/org.keycloak/keycloak-server-galleon-pack?type=zip", requirement: "999-SNAPSHOT", scope: null }, { purl: "pkg:maven/org.keycloak/keycloak-server-galleon-pack?type=pom", requirement: "999-SNAPSHOT", scope: null }, { purl: "pkg:maven/org.wildfly.galleon-plugins/wildfly-galleon-plugins", requirement: "5.2.7.Final", scope: null }, { purl: "pkg:maven/org.wildfly.galleon-plugins/wildfly-config-gen", requirement: "5.2.7.Final", scope: null }, { purl: "pkg:maven/org.wildfly.galleon-plugins/transformer", requirement: "5.2.7.Final", scope: null }, { purl: "pkg:maven/org.wildfly.core/wildfly-embedded", requirement: "18.1.0.Final", scope: null }] },
|
|
15
|
+
parser: pomParser,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
test_name: "pom.xml example 2",
|
|
19
|
+
source: "",
|
|
20
|
+
note: "",
|
|
21
|
+
file_name: "pom.xml",
|
|
22
|
+
file_content: "<?xml version='1.0' encoding='UTF-8'?>\n<!--\n~ Copyright 2016 Red Hat, Inc. and/or its affiliates\n~ and other contributors as indicated by the @author tags.\n~\n~ Licensed under the Apache License, Version 2.0 (the \"License\");\n~ you may not use this file except in compliance with the License.\n~ You may obtain a copy of the License at\n~\n~ http://www.apache.org/licenses/LICENSE-2.0\n~\n~ Unless required by applicable law or agreed to in writing, software\n~ distributed under the License is distributed on an \"AS IS\" BASIS,\n~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n~ See the License for the specific language governing permissions and\n~ limitations under the License.\n\n-->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n <modelVersion>4.0.0</modelVersion>\n\n <parent>\n <groupId>org.jboss</groupId>\n <artifactId>jboss-parent</artifactId>\n <version>37</version>\n </parent>\n\n <name>Keycloak</name>\n <description>\n Keycloak SSO\n </description>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-parent</artifactId>\n <version>999-SNAPSHOT</version>\n <packaging>pom</packaging>\n\n <properties>\n <jboss.repo.nexusUrl>https://s01.oss.sonatype.org/</jboss.repo.nexusUrl>\n <jboss.releases.repo.id>jboss-releases-repository</jboss.releases.repo.id>\n <jboss.releases.repo.url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</jboss.releases.repo.url>\n <jboss.snapshots.repo.id>jboss-snapshots-repository</jboss.snapshots.repo.id>\n <jboss.snapshots.repo.url>https://s01.oss.sonatype.org/content/repositories/snapshots/</jboss.snapshots.repo.url>\n\n <quarkus.version>2.7.5.Final</quarkus.version>\n\n <!--\n Performing a Wildfly upgrade? Run the:\n\n \"./misc/scripts/upgrade-wildfly/upgrade-keycloak-to-wildfly-tag.py\"\n\n script with the corresponding Wildfly tag, e.g. '20.0.0.Final' to get necessary Keycloak bits\n updated automatically based on corresponding artifact versions used in Wildfly and Wildfly Core\n\n IMPORTANT: If you add new dependency name / version property below, be sure to update the\n \"./misc/scripts/upgrade-wildfly/upgrade-keycloak-to-wildfly-tag.py\" script too to ensure\n the script continues to work\n -->\n\n <product.rhsso.version>7.5.0.GA</product.rhsso.version>\n\n <product.build-time>${timestamp}</product.build-time>\n <wildfly.version>26.1.0.Final</wildfly.version>\n <wildfly.build-tools.version>1.2.13.Final</wildfly.build-tools.version>\n <eap.version>7.4.0.GA-redhat-00005</eap.version>\n <wildfly.core.version>18.1.0.Final</wildfly.core.version>\n\n <jboss.as.version>7.2.0.Final</jboss.as.version>\n <jboss.as.subsystem.test.version>7.5.22.Final-redhat-1</jboss.as.subsystem.test.version>\n\n <!-- Versions used mostly for Undertow server, aligned with WildFly -->\n <jboss.aesh.version>0.66.19</jboss.aesh.version>\n <aesh.version>2.4</aesh.version>\n <apache.httpcomponents.version>4.5.13</apache.httpcomponents.version>\n <apache.httpcomponents.httpcore.version>4.4.14</apache.httpcomponents.httpcore.version>\n <apache.mime4j.version>0.6</apache.mime4j.version>\n <jboss.dmr.version>1.5.1.Final</jboss.dmr.version>\n <bouncycastle.version>1.68</bouncycastle.version>\n <cxf.version>3.3.10</cxf.version>\n <cxf.jetty.version>3.3.10</cxf.jetty.version>\n <cxf.jaxrs.version>3.3.10</cxf.jaxrs.version>\n <cxf.undertow.version>3.3.10</cxf.undertow.version>\n <dom4j.version>2.1.3</dom4j.version>\n <h2.version>1.4.197</h2.version>\n <jakarta.persistence.version>2.2.3</jakarta.persistence.version>\n <hibernate.core.version>5.3.24.Final</hibernate.core.version>\n <hibernate.c3p0.version>5.3.24.Final</hibernate.c3p0.version>\n <infinispan.version>12.1.7.Final</infinispan.version>\n <infinispan.protostream.processor.version>4.4.1.Final</infinispan.protostream.processor.version>\n <javax.annotation-api.version>1.3.2</javax.annotation-api.version>\n <jackson.version>2.12.1</jackson.version>\n <jackson.databind.version>2.12.6.1</jackson.databind.version>\n <jackson.annotations.version>${jackson.databind.version}</jackson.annotations.version>\n <jakarta.mail.version>1.6.5</jakarta.mail.version>\n <jboss-jaxrs-api_2.1_spec>2.0.1.Final</jboss-jaxrs-api_2.1_spec>\n <jboss.logging.version>3.4.1.Final</jboss.logging.version>\n <jboss.logging.tools.version>2.2.1.Final</jboss.logging.tools.version>\n <jboss.marshalling.version>2.0.11.Final</jboss.marshalling.version>\n <jboss-transaction-api_1.3_spec>2.0.0.Final</jboss-transaction-api_1.3_spec>\n <jboss.spec.javax.xml.bind.jboss-jaxb-api_2.3_spec.version>2.0.1.Final</jboss.spec.javax.xml.bind.jboss-jaxb-api_2.3_spec.version>\n <jboss.spec.javax.servlet.jsp.jboss-jsp-api_2.3_spec.version>2.0.0.Final</jboss.spec.javax.servlet.jsp.jboss-jsp-api_2.3_spec.version>\n <log4j.version>1.2.17</log4j.version>\n <resteasy.version>3.15.1.Final</resteasy.version>\n <resteasy.undertow.version>${resteasy.version}</resteasy.undertow.version>\n <owasp.html.sanitizer.version>20211018.2</owasp.html.sanitizer.version>\n <slf4j-api.version>1.7.30</slf4j-api.version>\n <slf4j.version>1.7.30</slf4j.version>\n <sun.istack.version>3.0.10</sun.istack.version>\n <sun.xml.bind.version>2.3.3-b02</sun.xml.bind.version>\n <javax.xml.bind.jaxb.version>2.4.0-b180830.0359</javax.xml.bind.jaxb.version>\n <sun.xml.ws.version>2.3.1</sun.xml.ws.version>\n <sun.activation.version>1.2.2</sun.activation.version>\n <org.glassfish.jaxb.xsom.version>2.3.3-b02</org.glassfish.jaxb.xsom.version>\n <undertow.version>2.2.5.Final</undertow.version>\n <elytron.version>1.18.3.Final</elytron.version>\n <elytron.undertow-server.version>1.9.0.Final</elytron.undertow-server.version>\n <jetty94.version>9.4.40.v20210413</jetty94.version>\n <woodstox.version>6.0.3</woodstox.version>\n <xmlsec.version>2.2.3</xmlsec.version>\n <glassfish.json.version>1.1.6</glassfish.json.version>\n <wildfly.common.version>1.6.0.Final</wildfly.common.version>\n <ua-parser.version>1.5.2</ua-parser.version>\n <picketbox.version>5.0.3.Final</picketbox.version>\n <google.guava.version>30.1-jre</google.guava.version>\n\n <!-- Openshift -->\n <version.com.openshift.openshift-restclient-java>8.0.0.Final</version.com.openshift.openshift-restclient-java>\n\n <!-- Others -->\n <commons-lang.version>2.6</commons-lang.version>\n <commons-lang3.version>3.11</commons-lang3.version>\n <commons-io.version>2.7</commons-io.version>\n <apacheds.version>2.0.0.AM26</apacheds.version>\n <apacheds.codec.version>2.0.0</apacheds.codec.version>\n <google.zxing.version>3.4.0</google.zxing.version>\n <freemarker.version>2.3.31</freemarker.version>\n\n <jetty9.version>${jetty94.version}</jetty9.version>\n <liquibase.version>4.8.0</liquibase.version>\n <osgi.version>4.2.0</osgi.version>\n <pax.web.version>7.1.0</pax.web.version>\n <servlet.api.30.version>1.0.2.Final</servlet.api.30.version>\n <servlet.api.40.version>2.0.0.Final</servlet.api.40.version>\n <twitter4j.version>4.0.7</twitter4j.version>\n <jna.version>4.1.0</jna.version>\n\n <!-- Databases -->\n <mysql.version>8.0.23</mysql.version>\n <mysql.driver.version>8.0.23</mysql.driver.version>\n <postgresql.version>13.2</postgresql.version>\n <postgresql.driver.version>42.3.3</postgresql.driver.version>\n <mariadb.version>10.3.27</mariadb.version>\n <mariadb.driver.version>2.7.2</mariadb.driver.version>\n <mssql.version>2019-CU10-ubuntu-20.04</mssql.version>\n <mssql.driver.version>9.2.0.jre8</mssql.driver.version>\n\n <!-- Test -->\n <greenmail.version>1.3.1b</greenmail.version>\n <hamcrest.version>2.2</hamcrest.version>\n <jmeter.version>2.10</jmeter.version>\n <junit.version>4.13.2</junit.version>\n <picketlink.version>2.7.0.Final</picketlink.version>\n <selenium.version>2.35.0</selenium.version>\n <xml-apis.version>1.4.01</xml-apis.version>\n <subethasmtp.version>3.1.7</subethasmtp.version>\n <awaitility.version>4.1.1</awaitility.version>\n <assertj-core.version>3.22.0</assertj-core.version>\n <!-- KEYCLOAK-17585 Prevent microprofile-metrics-api upgrades from version \"2.3\" due to:\n https://issues.redhat.com/browse/KEYCLOAK-17585?focusedCommentId=16002705&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16002705\n -->\n <microprofile-metrics-api.version>2.3</microprofile-metrics-api.version>\n\n <!-- Maven Plugins -->\n <replacer.plugin.version>1.3.5</replacer.plugin.version>\n <jboss.as.plugin.version>7.5.Final</jboss.as.plugin.version>\n <jmeter.plugin.version>1.9.0</jmeter.plugin.version>\n <jmeter.analysis.plugin.version>1.0.4</jmeter.analysis.plugin.version>\n <minify.plugin.version>1.7.6</minify.plugin.version>\n <osgi.bundle.plugin.version>2.3.7</osgi.bundle.plugin.version>\n <wildfly.plugin.version>2.0.1.Final</wildfly.plugin.version>\n <nexus.staging.plugin.version>1.6.5</nexus.staging.plugin.version>\n <frontend.plugin.version>1.12.0</frontend.plugin.version>\n <docker.maven.plugin.version>0.28.0</docker.maven.plugin.version>\n <verifier.plugin.version>1.1</verifier.plugin.version>\n\n <!-- Surefire Settings -->\n <surefire.memory.Xms>512m</surefire.memory.Xms>\n <surefire.memory.Xmx>2048m</surefire.memory.Xmx>\n <surefire.memory.metaspace>96m</surefire.memory.metaspace>\n <surefire.memory.metaspace.max>512m</surefire.memory.metaspace.max>\n <surefire.memory.settings>-Xms${surefire.memory.Xms} -Xmx${surefire.memory.Xmx} -XX:MetaspaceSize=${surefire.memory.metaspace} -XX:MaxMetaspaceSize=${surefire.memory.metaspace.max}</surefire.memory.settings>\n <surefire.system.args></surefire.system.args>\n\n <!-- Tomcat versions -->\n <tomcat8.version>8.5.38</tomcat8.version>\n <tomcat9.version>9.0.16</tomcat9.version>\n\n <!-- Spring Boot versions, used for tests -->\n <spring-boot24.version>2.4.13</spring-boot24.version>\n <spring-boot26.version>2.6.1</spring-boot26.version>\n\n <!-- webauthn support -->\n <webauthn4j.version>0.12.0.RELEASE</webauthn4j.version>\n <org.apache.kerby.kerby-asn1.version>2.0.0</org.apache.kerby.kerby-asn1.version>\n\n <!-- WildFly Galleon Build related properties -->\n <org.wildfly.galleon-plugins.version>5.2.7.Final</org.wildfly.galleon-plugins.version>\n <org.jboss.galleon.version>4.2.8.Final</org.jboss.galleon.version>\n\n <!-- Galleon -->\n <galleon.fork.embedded>true</galleon.fork.embedded>\n <galleon.log.time>true</galleon.log.time>\n <galleon.offline>true</galleon.offline>\n\n <!-- Properties that drive the names of various directories produced by and used in the build -->\n <server.output.dir.prefix>keycloak</server.output.dir.prefix>\n <!-- Version suffix that is appended to directories. Default is the maven GAV version but this can be edited to use a short form version -->\n <server.output.dir.version>${project.version}</server.output.dir.version>\n\n <!-- Frontend -->\n <node.version>v16.13.2</node.version>\n </properties>\n\n <url>http://keycloak.org</url>\n\n <licenses>\n <license>\n <name>Apache License, Version 2.0</name>\n <url>https://www.apache.org/licenses/LICENSE-2.0</url>\n <distribution>repo</distribution>\n </license>\n </licenses>\n\n <scm>\n <connection>scm:git:git://github.com/keycloak/keycloak.git</connection>\n <developerConnection>scm:git:git@github.com:keycloak/keycloak.git</developerConnection>\n <url>https://github.com/keycloak/keycloak/tree/master/</url>\n </scm>\n\n <distributionManagement>\n <repository>\n <id>${jboss.releases.repo.id}</id>\n <name>JBoss Releases Repository</name>\n <url>${jboss.releases.repo.url}</url>\n </repository>\n </distributionManagement>\n\n <issueManagement>\n <system>JIRA</system>\n <url>https://github.com/keycloak/keycloak/issues</url>\n </issueManagement>\n\n <developers>\n <developer>\n <id>keycloak</id>\n <name>Keycloak Team</name>\n </developer>\n </developers>\n\n <contributors></contributors>\n\n <modules>\n <module>boms</module>\n <module>common</module>\n <module>core</module>\n <module>dependencies</module>\n <module>docs</module>\n <module>server-spi</module>\n <module>server-spi-private</module>\n <module>saml-core-api</module>\n <module>saml-core</module>\n <module>federation</module>\n <module>services</module>\n <module>themes</module>\n <module>model</module>\n <module>util</module>\n <module>wildfly</module>\n <module>integration</module>\n <module>adapters</module>\n <module>authz</module>\n <module>misc</module>\n </modules>\n\n <dependencyManagement>\n\n <dependencies>\n\n <dependency>\n <groupId>javax.xml.bind</groupId>\n <artifactId>jaxb-api</artifactId>\n <version>${javax.xml.bind.jaxb.version}</version>\n </dependency>\n \n </dependencies>\n </dependencyManagement>\n\n <build>\n <pluginManagement>\n <plugins>\n <plugin>\n <groupId>org.sonatype.plugins</groupId>\n <artifactId>nexus-staging-maven-plugin</artifactId>\n <version>${nexus.staging.plugin.version}</version>\n <extensions>true</extensions>\n <configuration>\n <serverId>${jboss.releases.repo.id}</serverId>\n <nexusUrl>${jboss.repo.nexusUrl}</nexusUrl>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-assembly-plugin</artifactId>\n <configuration>\n <tarLongFileMode>posix</tarLongFileMode>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-dependency-plugin</artifactId>\n <version>3.1.2</version>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-release-plugin</artifactId>\n <version>2.5.2</version>\n <configuration>\n <autoVersionSubmodules>true</autoVersionSubmodules>\n <tagNameFormat>@{project.version}</tagNameFormat>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-surefire-plugin</artifactId>\n <version>3.0.0-M5</version>\n <configuration>\n <forkNode implementation=\"org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory\"/>\n <forkMode>once</forkMode>\n <argLine>-Djava.awt.headless=true ${surefire.memory.settings} ${surefire.system.args} -Duser.language=en -Duser.region=US</argLine>\n <runOrder>alphabetical</runOrder>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-jar-plugin</artifactId>\n </plugin>\n <plugin>\n <groupId>com.google.code.maven-replacer-plugin</groupId>\n <artifactId>maven-replacer-plugin</artifactId>\n <version>${replacer.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-install-plugin</artifactId>\n <configuration>\n <createChecksum>true</createChecksum>\n </configuration>\n </plugin>\n <plugin>\n <groupId>com.lazerycode.jmeter</groupId>\n <artifactId>jmeter-maven-plugin</artifactId>\n <version>${jmeter.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>com.lazerycode.jmeter</groupId>\n <artifactId>jmeter-analysis-maven-plugin</artifactId>\n <version>${jmeter.analysis.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.jboss.as.plugins</groupId>\n <artifactId>jboss-as-maven-plugin</artifactId>\n <version>${jboss.as.plugin.version}</version>\n <configuration>\n <skip>true</skip>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.wildfly.plugins</groupId>\n <artifactId>wildfly-maven-plugin</artifactId>\n <version>${wildfly.plugin.version}</version>\n <configuration>\n <skip>true</skip>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.jboss.galleon</groupId>\n <artifactId>galleon-maven-plugin</artifactId>\n <version>${org.jboss.galleon.version}</version>\n </plugin>\n <plugin>\n <groupId>com.samaxes.maven</groupId>\n <artifactId>minify-maven-plugin</artifactId>\n <version>${minify.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.liquibase</groupId>\n <artifactId>liquibase-maven-plugin</artifactId>\n <version>${liquibase.version}</version>\n </plugin>\n <plugin>\n <groupId>org.wildfly.build</groupId>\n <artifactId>wildfly-server-provisioning-maven-plugin</artifactId>\n <version>${wildfly.build-tools.version}</version>\n </plugin>\n <plugin>\n <groupId>org.wildfly.galleon-plugins</groupId>\n <artifactId>wildfly-galleon-maven-plugin</artifactId>\n <version>${org.wildfly.galleon-plugins.version}</version>\n\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-verifier-plugin</artifactId>\n <version>${verifier.plugin.version}</version>\n <executions>\n <execution>\n <id>main</id>\n <phase>verify</phase>\n <goals>\n <goal>verify</goal>\n </goals>\n </execution>\n </executions>\n <configuration>\n <verificationFile>target/verifier/verifications.xml</verificationFile>\n </configuration>\n </plugin>\n <plugin>\n <groupId>org.apache.felix</groupId>\n <artifactId>maven-bundle-plugin</artifactId>\n <version>${osgi.bundle.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>com.github.eirslett</groupId>\n <artifactId>frontend-maven-plugin</artifactId>\n <version>${frontend.plugin.version}</version>\n </plugin>\n <plugin>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-distribution-licenses-maven-plugin</artifactId>\n <version>${project.version}</version>\n <executions>\n <execution>\n <id>process-licenses</id>\n <goals>\n <goal>process</goal>\n </goals>\n <phase>process-resources</phase>\n </execution>\n </executions>\n </plugin>\n </plugins>\n </pluginManagement>\n </build>\n\n <profiles>\n <profile>\n <id>community</id>\n <activation>\n <property>\n <name>!product</name>\n </property>\n </activation>\n <properties>\n <product.name>Keycloak</product.name>\n <product.name.full>Keycloak</product.name.full>\n <product.slot>keycloak</product.slot>\n <product.wildfly.console.slot>main</product.wildfly.console.slot>\n <product.name-html>\u003Cdiv class=\"kc-logo-text\"\u003E\u003Cspan\u003EKeycloak\u003C\u002Fspan\u003E\u003C\u002Fdiv\u003E</product.name-html>\n <product.version>${project.version}</product.version>\n <product.default-profile>community</product.default-profile>\n <apache.httpcomponents.fuse.version>4.5.2</apache.httpcomponents.fuse.version>\n <apache.httpcomponents.httpcore.fuse.version>4.4.4</apache.httpcomponents.httpcore.fuse.version>\n <ee.maven.groupId>org.wildfly</ee.maven.groupId>\n <ee.maven.version>${wildfly.version}</ee.maven.version>\n <product.filename.version>${project.version}</product.filename.version>\n </properties>\n </profile>\n\n <profile>\n <id>jdk9</id>\n <activation>\n <jdk>[9,)</jdk>\n </activation>\n <properties>\n <surefire.system.args>\n --add-opens=java.base/java.lang=ALL-UNNAMED\n </surefire.system.args>\n </properties>\n </profile>\n\n <profile>\n <id>quarkus</id>\n <activation>\n <jdk>[11,)</jdk>\n <property>\n <name>!product</name>\n </property>\n </activation>\n <modules>\n <module>quarkus</module>\n </modules>\n </profile>\n\n <profile>\n <id>product</id>\n <activation>\n <property>\n <name>product</name>\n </property>\n </activation>\n <properties>\n <product.name.full>Red Hat Single Sign-On</product.name.full>\n <product.name>rh-sso</product.name>\n <product.slot>rh-sso</product.slot>\n <product.wildfly.console.slot>eap</product.wildfly.console.slot>\n <product.name-html>\u003Cstrong\u003ERed Hat\u003C\u002Fstrong\u003E\u003Csup\u003E\u00AE\u003C\u002Fsup\u003E Single Sign On</product.name-html>\n <product.version>${product.rhsso.version}</product.version>\n <apache.httpcomponents.fuse.version>4.5.2.redhat-2</apache.httpcomponents.fuse.version>\n <apache.httpcomponents.httpcore.fuse.version>4.4.4.redhat-2</apache.httpcomponents.httpcore.fuse.version>\n <product.default-profile>product</product.default-profile>\n <ee.maven.groupId>org.jboss.eap</ee.maven.groupId>\n <ee.maven.version>${eap.version}</ee.maven.version>\n <!-- Properties that drive the names of various directories produced by and used in the build -->\n <server.output.dir.prefix>${product.name}</server.output.dir.prefix>\n <!-- Version suffix that is appended to directories. Default is the maven GAV version but this can be edited to use a short form version -->\n <server.output.dir.version>${product.filename.version}</server.output.dir.version>\n </properties>\n <build>\n <plugins>\n <plugin>\n <groupId>org.codehaus.mojo</groupId>\n <artifactId>build-helper-maven-plugin</artifactId>\n <version>1.7</version>\n <executions>\n <execution>\n <id>set-product-filename-version</id>\n <goals>\n <goal>regex-property</goal>\n </goals>\n <phase>initialize</phase>\n <configuration>\n <name>product.filename.version</name>\n <value>${product.rhsso.version}</value>\n <regex>^(\d+(\.\d+)?).*?$</regex>\n <replacement>$1</replacement>\n <failIfNoMatch>true</failIfNoMatch>\n </configuration>\n </execution>\n </executions>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n <profile>\n <id>testsuite</id>\n <activation>\n <property>\n <name>!skipTestsuite</name>\n </property>\n </activation>\n <modules>\n <module>testsuite</module>\n </modules>\n </profile>\n\n <profile>\n <id>examples</id>\n <activation>\n <property>\n <name>!skipExamples</name>\n </property>\n </activation>\n <modules>\n <module>examples</module>\n </modules>\n </profile>\n\n <profile>\n <id>distribution</id>\n <modules>\n <module>distribution</module>\n </modules>\n </profile>\n\n <profile>\n <id>jboss-release</id>\n <modules>\n <module>distribution</module>\n </modules>\n </profile>\n\n <profile>\n <id>operator</id>\n <activation>\n <jdk>[11,)</jdk>\n <property>\n <name>operator</name>\n </property>\n </activation>\n <modules>\n <module>operator</module>\n </modules>\n </profile>\n\n <profile>\n <id>doclint-java8-disable</id>\n <activation>\n <jdk>[1.8,)</jdk>\n </activation>\n\n <build>\n <plugins>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-javadoc-plugin</artifactId>\n <configuration>\n <additionalparam>-Xdoclint:none</additionalparam>\n <failOnError>false</failOnError>\n <excludePackageNames>cx.*:org.freedesktop*:org.jvnet*</excludePackageNames>\n </configuration>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n <profile>\n <id>nexus-staging</id>\n <build>\n <plugins>\n <plugin>\n <groupId>org.sonatype.plugins</groupId>\n <artifactId>nexus-staging-maven-plugin</artifactId>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n <profile>\n <id>gpg</id>\n <build>\n <plugins>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-gpg-plugin</artifactId>\n <version>3.0.1</version>\n <executions>\n <execution>\n <id>sign-artifacts</id>\n <phase>verify</phase>\n <goals>\n <goal>sign</goal>\n </goals>\n <configuration>\n <gpgArguments>\n <arg>--batch</arg>\n <arg>--pinentry-mode</arg>\n <arg>loopback</arg>\n </gpgArguments>\n </configuration>\n </execution>\n </executions>\n <configuration>\n </configuration>\n </plugin>\n </plugins>\n </build>\n </profile>\n\n </profiles>\n</project>\n",
|
|
23
|
+
expect: { file: 'pom.xml', purls: [{ purl: "pkg:maven/javax.xml.bind/jaxb-api", requirement: "2.4.0-b180830.0359", scope: null }] },
|
|
24
|
+
parser: pomParser,
|
|
25
|
+
},
|
|
26
|
+
/****************************************************************************/
|
|
27
|
+
/* PYPROJECT.TOML DEPENDENCY TEST DATA */
|
|
28
|
+
/****************************************************************************/
|
|
29
|
+
{
|
|
30
|
+
test_name: 'pyproject.toml example 1 ',
|
|
31
|
+
source: 'https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#a-full-example',
|
|
32
|
+
note: 'This is the official example published on the pyproject.toml specification website',
|
|
33
|
+
file_name: 'pyproject.toml',
|
|
34
|
+
file_content: '[build-system]\nrequires = ["hatchling"]\nbuild-backend = "hatchling.build"\n\n [project]\nname = "spam-eggs"\nversion = "2020.0.0"\ndependencies = [\n "httpx",\n "gidgethub[httpx]>4.0.0",\n "django>2.1; os_name != \'nt\'",\n "django>2.0; os_name == \'nt\'",\n]\nrequires-python = ">=3.8"\nauthors = [\n {name = "Pradyun Gedam", email = "pradyun@example.com"},\n {name = "Tzu-Ping Chung", email = "tzu-ping@example.com"},\n {name = "Another person"},\n {email = "different.person@example.com"},\n]\nmaintainers = [\n {name = "Brett Cannon", email = "brett@example.com"}\n]\ndescription = "Lovely Spam! Wonderful Spam!"\nreadme = "README.rst"\nlicense = {file = "LICENSE.txt"}\nkeywords = ["egg", "bacon", "sausage", "tomatoes", "Lobster Thermidor"]\nclassifiers = [\n "Development Status :: 4 - Beta",\n "Programming Language :: Python"\n]\n\n [project.optional-dependencies]\ngui = ["PyQt5"]\ncli = [\n "rich",\n "click",\n]\n\n [project.urls]\nHomepage = "https://example.com"\nDocumentation = "https://readthedocs.org"\nRepository = "https://github.com/me/spam.git"\n"Bug Tracker" = "https://github.com/me/spam/issues"\nChangelog = "https://github.com/me/spam/blob/master/CHANGELOG.md"\n\n [project.scripts]\nspam-cli = "spam:main_cli"\n\n [project.gui-scripts]\nspam-gui = "spam:main_gui"\n\n [project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"',
|
|
35
|
+
expect: { file: 'pyproject.toml', purls: [{ purl: "pkg:pypi/httpx" }, { purl: "pkg:pypi/gidgethub", requirement: ">4.0.0" }, { purl: "pkg:pypi/django", requirement: ">2.1" }, { purl: "pkg:pypi/django", requirement: ">2.0" }] },
|
|
36
|
+
parser: pyProjectToml,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
test_name: 'pyproject.toml example 2',
|
|
40
|
+
source: 'https://martin-thoma.com/pyproject-toml/',
|
|
41
|
+
note: '',
|
|
42
|
+
file_name: 'pyproject.toml',
|
|
43
|
+
file_content: '[project]\nname = "infer_pyproject"\nversion = "0.1.0"\ndescription = "Create a pyproject.toml file for an existing project."\nauthors = [\n {name = "Martin Thoma", email="info@martin-thoma.de"},\n {email = "info@example.com"}\n]\nlicense = {file = "LICENSE.txt"}\nreadme = "README.md"\nrequires-python = ">=3.6"\n\nkeywords = ["packaging", "dependency", "infer", "pyproject.toml"]\n\nclassifiers = [\n "Topic :: Software Development"\n]\n\n# Requirements: This is done differently by poetry!\ndependencies = [\n "Click>=7.0"\n]\n\n [project.optional-dependencies]\ndev = [\n "black>=18.3-alpha.0",\n]\n\n [project.urls]\nhomepage = "https://github.com/MartinThoma/infer_pyproject"\ndocumentation = "https://github.com/MartinThoma/infer_pyproject"\nrepository = "https://github.com/MartinThoma/infer_pyproject"\n\n [project.scripts]\npoetry = "infer_pyproject.cli:main"\n\n [build-system]\nrequires = [\n "setuptools >= 35.0.2",\n "setuptools_scm >= 2.0.0, <3"\n]\nbuild-backend = "setuptools.build_meta"\n\n [tool.black]\nline-length = 88\ntarget_version = [\'py36\']\ninclude = \'.pyi?$\'\nexclude = \'\'\'\n\n(\n /(\n .eggs # exclude a few common directories in the\n| .git # root of the project\n| .hg\n| .mypy_cache\n| .tox\n| .venv\n| _build\n| buck-out\n| build\n| dist\n)/\n| foo.py # also separately exclude a file named foo.py in\n# the root of the project\n)\n\'\'\'',
|
|
44
|
+
expect: { file: 'pyproject.toml', purls: [{ purl: "pkg:pypi/Click", requirement: ">=7.0" }] },
|
|
45
|
+
parser: pyProjectToml,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
test_name: 'pyproject.toml example 3',
|
|
49
|
+
source: 'https://gist.github.com/GhostofGoes/75051c4aeb215bc3cf48c10f5454b399',
|
|
50
|
+
note: 'This file has a project table declared with dependency key but with no values, instead it only has a comment inside',
|
|
51
|
+
file_name: 'pyproject.toml',
|
|
52
|
+
file_content: '# This example pyproject.toml is for a basic pip+setuptools setup.\n# If you use a project management tool (like Poetry), then\n# those tools will have slightly different configurations or additions.\n\n# I highly recommend using a project management tool for your project.\n# Project management is a highly opinionated subject.\n# There are a lot of good, robust tools in this space now (as of 2023)\n# Two that I\'ve used and recommend are Poetry and PDM.\n# Poetry is more mature, PDM is recent, both work well.\n# - Poetry: https://python-poetry.org/\n # - PDM: https://pdm.fming.dev/latest/\n\n # Resources\n#\n# - https://packaging.python.org/en/latest/tutorials/packaging-projects/\n# - https://betterprogramming.pub/a-pyproject-toml-developers-cheat-sheet-5782801fb3ed\n#\n# Examples of pyproject.toml files from open-source projects:\n # - https://github.com/carlosperate/awesome-pyproject\n# - https://github.com/SpikeInterface/spikeinterface/blob/master/pyproject.toml\n# - https://github.com/codespell-project/codespell/blob/master/pyproject.toml\n# - https://github.com/hynek/structlog/blob/main/pyproject.toml\n\n\n[build-system]\nbuild-backend = "setuptools.build_meta"\nrequires = ["setuptools>=61.0", "wheel>=0.37.1"]\n\n\n [project]\n# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/\n name = "acme"\nversion = "0.0.1"\ndescription = "ACME tool"\nreadme = "README.md"\nrequires-python = ">=3.9,<4.0"\n# "LICENSE" is name of the license file, which must be in root of project folder\nlicense = {file = "LICENSE"}\nauthors = [\n {name = "Joe Example", email = "example@example.com"},\n]\nkeywords = ["keyword", "are", "cool"]\n\n# https://pypi.org/classifiers/\n # Add PyPI classifiers here\nclassifiers = [\n "Development Status :: 5 - Production/Stable",\n "Environment :: Console",\n "License :: OSI Approved :: MIT License",\n "Natural Language :: English",\n "Operating System :: MacOS",\n "Operating System :: Microsoft :: Windows",\n "Operating System :: POSIX",\n "Operating System :: POSIX :: Linux",\n "Programming Language :: Python",\n "Programming Language :: Python :: 3",\n "Programming Language :: Python :: 3.9",\n "Programming Language :: Python :: 3.10",\n "Programming Language :: Python :: 3.11",\n "Programming Language :: Python :: Implementation :: CPython",\n]\n\n# Required dependencies for install/usage of your package or application\n# If you don\'t have any dependencies, leave this section empty\n# Format for dependency strings: https://peps.python.org/pep-0508/\n dependencies = [\n# ... put stuff here ...\n]\n\n[project.scripts]\n# Command line interface entrypoint scripts\nacme = "acme.__main__:main"\n\n [project.urls]\n# Use PyPI-standard names here\n# Homepage\n# Documentation\n# Changelog\n# Issue Tracker\n# Source\n# Discord server\n"Homepage" = "<url>"\n"Documentation" = "<url>"\n\n# Development dependencies\n# pip install -e .[lint,test,exe]\n# pip install -e .[dev]\n [project.optional-dependencies]\nlint = [\n# checks for spelling mistakes\n"codespell>=2.2.4",\n\n# ruff linter checks for issues and potential bugs\n"ruff",\n\n# checks for unused code\n"vulture",\n\n# required for codespell to parse pyproject.toml\n"tomli",\n\n# validation of pyproject.toml\n"validate-pyproject[all]",\n\n# automatic sorting of imports\n"isort",\n\n# automatic code formatting to follow a consistent style\n"black",\n]\n\ntest = [\n# Handles most of the testing work, including execution\n# Docs: https://docs.pytest.org/en/stable/contents.html\n "pytest",\n\n# "Coverage" is how much of the code is actually run (it\'s "coverage")\n# Generates coverage reports from test suite runs\n"pytest-cov",\n "tomli",\n\n# pytest wrapper around the "mock" library\n"pytest-mock",\n\n# Randomizes the order of test execution\n"pytest-randomly",\n\n# Required for comparing device data exports and a few other complex structures\n# Docs: https://zepworks.com/deepdiff/current/\n "deepdiff",\n\n# Test parallelization, as well as remote execution (which we may do someday)\n"pytest-xdist[psutil]",\n\n# Detailed pytest results saved to a JSON file\n"pytest-json-report",\n\n# Better parsing of doctests\n"xdoctest",\n\n# Mocking of HTTP responses for the "requests" module\n"requests-mock",\n\n# Colors for doctest output\n"Pygments",\n]\n\nexe = [\n "setuptools",\n "wheel",\n "build",\n "tomli",\n "pyinstaller",\n "staticx;platform_system==\'Linux\'",\n]\n\ndev = [\n# https://hynek.me/articles/python-recursive-optional-dependencies/\n "acme[lint,test,exe]",\n\n# Useful for building quick scripts for testing purposes\n# https://github.com/google/python-fire\n "fire",\n\n# Code quality tools\n"mypy",\n\n# Improved exception traceback output\n# https://github.com/qix-/better-exceptions\n "better_exceptions",\n\n# Analyzing dependencies\n# install graphviz to generate graphs\n"graphviz",\n "pipdeptree",\n]\n\n\n[tool.setuptools]\n# https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html\n platforms = ["Linux", "Windows"]\ninclude-package-data = true\nzip-safe = true # This just means it\'s safe to zip up the bdist\n\n# Non-code data that should be included in the package source code\n# https://setuptools.pypa.io/en/latest/userguide/datafiles.html\n [tool.setuptools.package-data]\nacme = ["*.xml"]\n\n# Python modules and packages that are included in the\n# distribution package (and therefore become importable)\n[tool.setuptools.packages.find]\nexclude = ["tests", "tests.*", "examples"]\n\n\n\n# PDM example\n [tool.pdm.scripts]\nisort = "isort acme"\nblack = "black acme"\nformat = {composite = ["isort", "black"]}\ncheck_isort = "isort --check acme tests"\ncheck_black = "black --check acme tests"\nvulture = "vulture --min-confidence 100 acme tests"\nruff = "ruff check acme tests"\nfix = "ruff check --fix acme tests"\ncodespell = "codespell --toml ./pyproject.toml"\nlint = {composite = ["vulture", "codespell", "ruff", "check_isort", "check_black"]}\n\n\n\n [tool.codespell]\n# codespell supports pyproject.toml since version 2.2.2\n# NOTE: the "tomli" package must be installed for this to work\n# https://github.com/codespell-project/codespell#using-a-config-file\n # NOTE: ignore words for codespell must be lowercase\ncheck-filenames = ""\nignore-words-list = "word,another,something"\nskip = "htmlcov,.doctrees,*.pyc,*.class,*.ico,*.out,*.PNG,*.inv,*.png,*.jpg,*.dot"\n\n\n [tool.black]\nline-length = 88\n# If you need to exclude directories from being reformatted by black\n# force-exclude = \'\'\'\n# (\n# somedirname\n# | dirname\n# | filename.py\n# )\n# \'\'\'\n\n\n [tool.isort]\nprofile = "black"\nknown_first_party = ["acme"]\n# If you need to exclude files from having their imports sorted\nextend_skip_glob = [\n "acme/somefile.py",\n "acme/somedir/*",\n]\n\n\n# https://beta.ruff.rs/docs\n [tool.ruff]\nline-length = 99\nshow-source = true\n\n# Rules: https://beta.ruff.rs/docs/rules\n # If you violate a rule, lookup the rule on the Rules page in ruff docs.\n# Many rules have links you can click with a explanation of the rule and how to fix it.\n# If there isn\'t a link, go to the project the rule was source from (e.g. flake8-bugbear)\n# and review it\'s docs for the corresponding rule.\n# If you\'re still confused, ask a fellow developer for assistance.\n# You can also run "ruff rule <rule>" to explain a rule on the command line, without a browser or internet access.\n select = [\n "E", # pycodestyle\n"F", # Pyflakes\n"W", # Warning\n"B", # flake8-bugbear\n"A", # flake8-builtins\n"C4", # flake8-comprehensions\n"T10", # flake8-debugger\n"EXE", # flake8-executable,\n "ISC", # flake8-implicit-str-concat\n"G", # flake8-logging-format\n"PIE", # flake8-pie\n"T20", # flake8-print\n"PT", # flake8-pytest-style\n"RSE", # flake8-raise\n"RET", # flake8-return\n"TID", # flake8-tidy-imports\n"ARG", # flake8-unused-arguments\n"PGH", # pygrep-hooks\n"PLC", # Pylint Convention\n"PLE", # Pylint Errors\n"PLW", # Pylint Warnings\n"RUF", # Ruff-specific rules\n\n# ** Things to potentially enable in the future **\n# DTZ requires all usage of datetime module to have timezone-aware\n# objects (so have a tz argument or be explicitly UTC).\n# "DTZ", # flake8-datetimez\n# "PTH", # flake8-use-pathlib\n# "SIM", # flake8-simplify\n]\n\n# Files to exclude from linting\nextend-exclude = [\n "*.pyc",\n "__pycache__",\n]\n\n# Linting error codes to ignore\nignore = [\n "F403", # unable to detect undefined names from star imports\n"F405", # undefined locals from star imports\n"W605", # invalid escape sequence\n"A003", # shadowing python builtins\n"RET505", # unnecessary \'else\' after \'return\' statement\n"RET504", # Unnecessary variable assignment before return statement\n"RET507", # Unnecessary {branch} after continue statement\n"PT011", # pytest-raises-too-broad\n"PT012", # pytest.raises() block should contain a single simple statement\n"PLW0603", # Using the global statement to update is discouraged\n"PLW2901", # for loop variable overwritten by assignment target\n"G004", # Logging statement uses f-string\n"PIE790", # no-unnecessary-pass\n"PIE810", # multiple-starts-ends-with\n "PGH003", # Use specific rule codes when ignoring type issues\n"PLC1901", # compare-to-empty-string\n]\n\n# Linting error codes to ignore on a per-file basis\n [tool.ruff.per-file-ignores]\n"__init__.py" = ["F401", "E501"]\n"acme/somefile.py" = ["E402", "E501"]\n"acme/somedir/*" = ["E501"]\n\n\n# Configuration for mypy\n # https://mypy.readthedocs.io/en/stable/config_file.html#using-a-pyproject-toml-file\n [tool.mypy]\npython_version = "3.9"\nfollow_imports = "skip"\nignore_missing_imports = true\nfiles = "acme" # directory mypy should analyze\n# Directories to exclude from mypy\'s analysis\nexclude = [\n "acme/somedir",\n "acme/somefile\\.py",\n "dirname",\n]\n\n\n# Configuration for pytest\n # https://docs.pytest.org/en/latest/reference/customize.html#pyproject-toml\n [tool.pytest.ini_options]\ntestpaths = "tests" # directory containing your tests\nnorecursedirs = [\n ".vscode",\n "__pycache__"\n]\n# Warnings that should be ignored\nfilterwarnings = [\n "ignore::DeprecationWarning"\n]\n# custom markers that can be used using pytest.mark\nmarkers = [\n "slow: lower-importance tests that take an excessive amount of time",\n]\n\n\n# Configuration for coverage.py\n [tool.coverage.run]\n # files or directories to exclude from coverage calculations\nomit = [\n \'acme/somedir/*\',\n \'acme/somefile.py\',\n]\n\n\n# Configuration for vulture\n [tool.vulture]\n # Files or directories to exclude from vulture\n# The syntax is a little funky\nexclude = [\n "somedir",\n "*somefile.py",\n]',
|
|
53
|
+
expect: { file: 'pyproject.toml', purls: [] },
|
|
54
|
+
parser: pyProjectToml,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
test_name: 'pyproject.toml example 4',
|
|
58
|
+
source: 'https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html',
|
|
59
|
+
note: 'Uses a simple quote in one dependency',
|
|
60
|
+
file_name: 'pyproject.toml',
|
|
61
|
+
file_content: '[build-system]\nrequires = ["setuptools", "setuptools-scm"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "my_package"\nauthors = [\n {name = "Josiah Carberry", email = "josiah_carberry@brown.edu"},\n]\ndescription = "My package description"\nreadme = "README.rst"\nrequires-python = ">=3.7"\nkeywords = ["one", "two"]\nlicense = {text = "BSD-3-Clause"}\nclassifiers = [\n "Framework :: Django",\n "Programming Language :: Python :: 3",\n]\ndependencies = [\n "requests",\n \'importlib-metadata; python_version<"3.8"\',\n]\ndynamic = ["version"]\n\n[project.optional-dependencies]\npdf = ["ReportLab>=1.2", "RXP"]\nrest = ["docutils>=0.3", "pack ==1.1, ==1.3"]\n\n[project.scripts]\nmy-script = "my_package.module:function"\n\n# ... other project metadata fields as listed in:\n# https://packaging.python.org/en/latest/guides/writing-pyproject-toml/\n',
|
|
62
|
+
expect: { file: 'pyproject.toml', purls: [{ purl: "pkg:pypi/requests" }, { purl: "pkg:pypi/importlib-metadata" }] },
|
|
63
|
+
parser: pyProjectToml,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
test_name: 'pyproject.toml example 5',
|
|
67
|
+
source: 'https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html',
|
|
68
|
+
note: 'Uses a simple quote in one dependency',
|
|
69
|
+
file_name: 'pyproject.toml',
|
|
70
|
+
file_content: '[build-system]\nrequires = ["setuptools", "setuptools-scm"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "my_package"\nauthors = [\n {name = "Josiah Carberry", email = "josiah_carberry@brown.edu"},\n]\ndescription = "My package description"\nreadme = "README.rst"\nrequires-python = ">=3.7"\nkeywords = ["one", "two"]\nlicense = {text = "BSD-3-Clause"}\nclassifiers = [\n "Framework :: Django",\n "Programming Language :: Python :: 3",\n]\ndependencies = [\n "requests",\n # this should be ignored\n \'importlib-metadata; python_version<"3.8"\', #This line as well\n]\ndynamic = ["version"]\n\n[project.optional-dependencies]\npdf = ["ReportLab>=1.2", "RXP"]\nrest = ["docutils>=0.3", "pack ==1.1, ==1.3"]\n\n[project.scripts]\nmy-script = "my_package.module:function"\n\n# ... other project metadata fields as listed in:\n# https://packaging.python.org/en/latest/guides/writing-pyproject-toml/\n',
|
|
71
|
+
expect: { file: 'pyproject.toml', purls: [{ purl: "pkg:pypi/requests" }, { purl: "pkg:pypi/importlib-metadata" }] },
|
|
72
|
+
parser: pyProjectToml,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
test_name: 'pyproject.toml example 6',
|
|
76
|
+
source: 'https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html',
|
|
77
|
+
note: 'Uses a simple quote in one dependency',
|
|
78
|
+
file_name: 'pyproject.toml',
|
|
79
|
+
file_content: '[build-system]\nrequires = ["setuptools", "setuptools-scm"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "my_package"\nauthors = [\n {name = "Josiah Carberry", email = "josiah_carberry@brown.edu"},\n]\ndescription = "My package description"\nreadme = "README.rst"\nrequires-python = ">=3.7"\nkeywords = ["one", "two"]\nlicense = {text = "BSD-3-Clause"}\nclassifiers = [\n "Framework :: Django",\n "Programming Language :: Python :: 3",\n]\ndependencies = [\n "requests", "request[extra] < 1.0.0; marker<\'1.0\'",\n # this should be ignored\n \'importlib-metadata; python_version<"3.8"\', #This line as well\n]\ndynamic = ["version"]\n\n[project.optional-dependencies]\npdf = ["ReportLab>=1.2", "RXP"]\nrest = ["docutils>=0.3", "pack ==1.1, ==1.3"]\n\n[project.scripts]\nmy-script = "my_package.module:function"\n\n# ... other project metadata fields as listed in:\n# https://packaging.python.org/en/latest/guides/writing-pyproject-toml/\n',
|
|
80
|
+
expect: { file: 'pyproject.toml', purls: [{ purl: "pkg:pypi/requests" }, { purl: "pkg:pypi/request", requirement: '<1.0.0' }, { purl: "pkg:pypi/importlib-metadata" },] },
|
|
81
|
+
parser: pyProjectToml,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
test_name: 'pyproject.toml example 7',
|
|
85
|
+
source: 'local',
|
|
86
|
+
note: 'This is a empty file',
|
|
87
|
+
file_name: 'pyproject.toml',
|
|
88
|
+
file_content: '',
|
|
89
|
+
expect: { file: 'pyproject.toml', purls: [] },
|
|
90
|
+
parser: pyProjectToml,
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
describe('Testing purl extractors', () => {
|
|
94
|
+
const TestCase = async (ps) => {
|
|
95
|
+
it(`Test: ${ps.test_name}`, async () => {
|
|
96
|
+
const d = await ps.parser(ps.file_content, ps.file_name);
|
|
97
|
+
const dsp = ps.expect.purls.sort();
|
|
98
|
+
const dp = d.purls.sort();
|
|
99
|
+
expect(dp).to.be.deep.equal(dsp);
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
const OnlyTestWPriority = ParserSpec.filter(ps => ps.priority);
|
|
103
|
+
if (OnlyTestWPriority.length)
|
|
104
|
+
OnlyTestWPriority.forEach(async (ps) => await TestCase(ps));
|
|
105
|
+
else
|
|
106
|
+
ParserSpec.forEach(async (ps) => await TestCase(ps));
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL0RlcGVuZGVuY2llcy9Mb2NhbERlcGVuZGVuY3kvcGFyc2Vycy9wYXJzZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlCLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnQjFDLE1BQU0sVUFBVSxHQUFrQjtJQUNoQyw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RTtRQUNFLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFlBQVksRUFBRSxxc2xDQUFxc2xDO1FBQ250bEMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBVyxFQUFDLElBQUksRUFBRSx3RUFBd0UsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBVyxFQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBVyxFQUFDLElBQUksRUFBRSxpREFBaUQsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBVyxFQUFDLElBQUksRUFBRSw2Q0FBNkMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBVyxFQUFDLElBQUksRUFBRSxpREFBaUQsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBVyxFQUFDLElBQUksRUFBRSxpREFBaUQs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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const rProjectTableContent = new RegExp(/\[project\]\s*\n(.*(?:\n(?!^\s*\[).*)*)/g);
|
|
2
|
+
const rDependenciesSection = new RegExp(/dependencies\s*=\s*\[((?:[^\]]|\](?!\n))+)\]/);
|
|
3
|
+
const purlPrefix = "pkg:pypi/";
|
|
4
|
+
const pyProjectToml = async (fileContent, filePath) => {
|
|
5
|
+
const result = { file: filePath, purls: [] };
|
|
6
|
+
const projectTableMatch = fileContent.match(rProjectTableContent);
|
|
7
|
+
if (!projectTableMatch)
|
|
8
|
+
return result;
|
|
9
|
+
const depKeyValueMatch = projectTableMatch[0].match(rDependenciesSection);
|
|
10
|
+
if (!depKeyValueMatch)
|
|
11
|
+
return result;
|
|
12
|
+
const depValue = depKeyValueMatch[1].toString();
|
|
13
|
+
/* At this point, depKeyValue contains the values for dependencies. Example:
|
|
14
|
+
*
|
|
15
|
+
* "requests",
|
|
16
|
+
* # this should be ignored
|
|
17
|
+
* 'importlib-metadata; python_version<"3.8"', #This line as well
|
|
18
|
+
*/
|
|
19
|
+
/* The following code will place each dependency in an array (ignoring comments #) */
|
|
20
|
+
const deps = depValue
|
|
21
|
+
.replace(",", "\n") //Convert inline dependencies to new line dependencies
|
|
22
|
+
.split(/\n/) //Generate an array by splitting new lines. Each line contains an independent dependency
|
|
23
|
+
.map(d => d.replace(/(,|"|'|\s|(#.*))/g, "")) // Remove extra spaces, quotes, comments and commas
|
|
24
|
+
.filter(d => d.length !== 0); //Filters those lines that are empty
|
|
25
|
+
deps.forEach(d => {
|
|
26
|
+
d = d.replace(/\;.*/g, ""); //Removes environment markers https://packaging.python.org/en/latest/specifications/dependency-specifiers/#environment-markers
|
|
27
|
+
d = d.replace(/\[.*\]/, ""); //Removes extras https://packaging.python.org/en/latest/specifications/dependency-specifiers/#extras
|
|
28
|
+
const requirementMatch = d.match(/(?:<|<=|!=|==|>=|>|~=|===).*/);
|
|
29
|
+
const requirement = requirementMatch ? requirementMatch[0] : null;
|
|
30
|
+
let purl = d;
|
|
31
|
+
if (requirement)
|
|
32
|
+
purl = d.replace(requirement, "").trim();
|
|
33
|
+
purl = purlPrefix + purl;
|
|
34
|
+
result.purls.push({
|
|
35
|
+
purl,
|
|
36
|
+
...(requirement !== null && { requirement })
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
export default pyProjectToml;
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHlQcm9qZWN0VG9tbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvRGVwZW5kZW5jaWVzL0xvY2FsRGVwZW5kZW5jeS9wYXJzZXJzL3B5dGhvbi9QeVByb2plY3RUb21sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxNQUFNLENBQUMsMENBQTBDLENBQUMsQ0FBQztBQUNwRixNQUFNLG9CQUFvQixHQUFHLElBQUksTUFBTSxDQUFFLDhDQUE4QyxDQUFDLENBQUM7QUFFekYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBRS9CLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxXQUFtQixFQUFDLFFBQWdCLEVBQTZCLEVBQUU7SUFDOUYsTUFBTSxNQUFNLEdBQXFCLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFN0QsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLGlCQUFpQjtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRXRDLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUUsSUFBSSxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRXJDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRWhEOzs7OztNQUtFO0lBRUYscUZBQXFGO0lBRXJGLE1BQU0sSUFBSSxHQUFJLFFBQVE7U0FDbkIsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxzREFBc0Q7U0FDekUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFJLHdGQUF3RjtTQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbURBQW1EO1NBQ2hHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFFLENBQUEsQ0FBRSxvQ0FBb0M7SUFHckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQSxDQUFFLDhIQUE4SDtRQUMxSixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUEsQ0FBQyxvR0FBb0c7UUFFaEksTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDakUsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFakUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxXQUFXO1lBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFELElBQUksR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUk7WUFDSixHQUFHLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO1NBQzdDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsZUFBZSxhQUFhLENBQUMifQ==
|
|
@@ -2,7 +2,7 @@ import { FingerprintPackage } from '../WfpProvider/FingerprintPackage';
|
|
|
2
2
|
import FormData from 'form-data';
|
|
3
3
|
import { SbomMode } from '../ScannerTypes';
|
|
4
4
|
export declare class DispatchableItem {
|
|
5
|
-
private
|
|
5
|
+
private form;
|
|
6
6
|
private errorCounter;
|
|
7
7
|
private fingerprintPackage;
|
|
8
8
|
private engineFlags;
|
|
@@ -11,6 +11,7 @@ export class DispatchableItem {
|
|
|
11
11
|
this._uuid = uuid;
|
|
12
12
|
}
|
|
13
13
|
getForm() {
|
|
14
|
+
this.form = new FormData();
|
|
14
15
|
this.form.append('file', Buffer.from(this.fingerprintPackage.getContent()), 'data.wfp');
|
|
15
16
|
if (this.engineFlags)
|
|
16
17
|
this.form.append('flags', this.engineFlags);
|
|
@@ -40,4 +41,4 @@ export class DispatchableItem {
|
|
|
40
41
|
this.sbomMode = sbomMode;
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzcGF0Y2hhYmxlSXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9EaXNwYXRjaGVyL0Rpc3BhdGNoYWJsZUl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBR2pDLE1BQU0sT0FBTyxnQkFBZ0I7SUFhM0I7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUlELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxJQUFJLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDZCxNQUFNLEVBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUMsRUFDakQsVUFBVSxDQUNYLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVNLG9CQUFvQjtRQUN6QixJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU0sZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVNLHFCQUFxQixDQUFDLGtCQUFzQztRQUNqRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7SUFDL0MsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRU0sY0FBYyxDQUFDLFdBQW1CO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWSxFQUFFLFFBQWtCO1FBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7Q0FDRiJ9
|
|
@@ -59,9 +59,6 @@ export class Dispatcher extends EventEmitter {
|
|
|
59
59
|
this.queueMaxLimitReached = false;
|
|
60
60
|
this.queueMinLimitReached = true;
|
|
61
61
|
this.globalAbortController = new GlobalControllerAborter();
|
|
62
|
-
this.recoverableErrors = new Set();
|
|
63
|
-
this.recoverableErrors.add('ECONNRESET');
|
|
64
|
-
this.recoverableErrors.add('TIMEOUT');
|
|
65
62
|
}
|
|
66
63
|
stop() {
|
|
67
64
|
this.pQueue.clear();
|
|
@@ -87,8 +84,12 @@ export class Dispatcher extends EventEmitter {
|
|
|
87
84
|
}
|
|
88
85
|
errorHandler(error, disptItem, response) {
|
|
89
86
|
if (!this.globalAbortController.isAborting()) {
|
|
87
|
+
//Abort scan when JSON is broken
|
|
88
|
+
if (error instanceof SyntaxError) {
|
|
89
|
+
this.emitUnrecoberableError(error, disptItem, response);
|
|
90
|
+
}
|
|
90
91
|
if (error.name === 'AbortError') {
|
|
91
|
-
error
|
|
92
|
+
error = new Error(`Timeout reached for packet with request ID ${disptItem.uuid}`);
|
|
92
93
|
error.name = 'TIMEOUT';
|
|
93
94
|
}
|
|
94
95
|
disptItem.increaseErrorCounter();
|
|
@@ -147,4 +148,4 @@ export class Dispatcher extends EventEmitter {
|
|
|
147
148
|
}
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9EaXNwYXRjaGVyL0Rpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDO0FBQ2pDLHlDQUF5QztBQUN6QyxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFtQixNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFFN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFFbEMsTUFBTSxPQUFPLFVBQVcsU0FBUSxZQUFZO0lBaUIxQyxZQUFZLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRTtRQUN2QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0I7WUFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQztRQUU3RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSTtRQUNGLG9GQUFvRjtRQUNwRixJQUFJLENB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
|