From 41b36f0df5db229f0e07eb9d6ea387894c5a9390 Mon Sep 17 00:00:00 2001 From: Marco Lecheler Date: Wed, 17 Jan 2024 13:34:07 +0100 Subject: [PATCH 01/50] chore(action): bind debug input to action debug When an action will be executed in debug mode (e.g. via GitHub UI) the secret `ACTIONS_STEP_DEBUG` will be set to true (empty if not enabled). This typically will allow to detect if a run is in debug mode. Because a GitHub action can not automatically read secrets the `runner.debug` variable needs to be used to determine if debug mode is enabled. When using this as default for the debug input of the action the debug will automatically be forwarded to sechub. Overwriting is always possible for the endusers because it is only the default setting of this action. --- github-actions/scan/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github-actions/scan/action.yml b/github-actions/scan/action.yml index 601790ccba..f7dbcaafc1 100644 --- a/github-actions/scan/action.yml +++ b/github-actions/scan/action.yml @@ -36,7 +36,7 @@ inputs: debug: description: 'SecHub debug output on/off' required: false - default: false + default: ${{ runner.debug == 1 }} fail-job-with-findings: description: 'job will be marked as failed if sechub finds something' required: true From ecc46e520c78ef4e729b5b577b4543828018ca51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 10:25:18 +0000 Subject: [PATCH 02/50] Bump braces from 3.0.2 to 3.0.3 in /sechub-website Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3. - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] --- sechub-website/package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sechub-website/package-lock.json b/sechub-website/package-lock.json index 44030fbe1c..eba9e0d372 100644 --- a/sechub-website/package-lock.json +++ b/sechub-website/package-lock.json @@ -3582,12 +3582,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -5049,9 +5049,9 @@ "dev": true }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" From 379fbe9e1a980986d5784231c2b65136023803e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 07:22:17 +0000 Subject: [PATCH 03/50] Bump ws from 8.16.0 to 8.17.1 in /sechub-website Bumps [ws](https://github.com/websockets/ws) from 8.16.0 to 8.17.1. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.16.0...8.17.1) --- updated-dependencies: - dependency-name: ws dependency-type: indirect ... Signed-off-by: dependabot[bot] --- sechub-website/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sechub-website/package-lock.json b/sechub-website/package-lock.json index 44030fbe1c..8da249ee96 100644 --- a/sechub-website/package-lock.json +++ b/sechub-website/package-lock.json @@ -11586,9 +11586,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" From 5f6f80996291cad62774a313f90e0a49740aa0d0 Mon Sep 17 00:00:00 2001 From: Jan Winz Date: Wed, 29 May 2024 10:45:22 +0200 Subject: [PATCH 04/50] First version of secret validation app #3141 - basic structure and first version of config model - validation section - categorization section - unit tests and spring boot tests - README with documentation --- gradle/projects.gradle | 3 + sechub-wrapper-secret-validator/README.adoc | 95 ++ sechub-wrapper-secret-validator/build.gradle | 23 + .../validator/SecretValidatorApplication.java | 13 + .../validator/cli/SecretValidatorCLI.java | 45 + .../execution/ResponseValidationService.java | 77 ++ .../execution/SecretValidationResult.java | 31 + .../execution/SecretValidationService.java | 42 + .../execution/SecretValidationStatus.java | 23 + .../SecretValidatorCategorizationService.java | 42 + .../SecretValidatorExecutionContext.java | 72 ++ ...ecretValidatorExecutionContextFactory.java | 90 ++ .../SecretValidatorExecutionService.java | 74 ++ .../SecretValidatorWebRequestService.java | 113 +++ .../model/SecretValidatorCategorization.java | 50 + .../SecretValidatorConfigurationModel.java | 42 + ...SecretValidatorConfigurationModelList.java | 25 + .../model/SecretValidatorRequest.java | 53 + .../model/SecretValidatorRequestHeader.java | 27 + .../model/SecretValidatorResponse.java | 28 + .../SecretValidatorResponseContains.java | 36 + .../SecretValidatorPDSJobResult.java | 28 + .../properties/SecretValidatorProperties.java | 38 + .../validator/support/SarifImporterKeys.java | 31 + .../support/SarifValidationSupport.java | 50 + .../SecretValidatorHttpClientFactory.java | 85 ++ .../cli/SecretValidatorSpringBootTest.java | 60 ++ .../ResponseValidationServiceTest.java | 245 +++++ .../execution/SecretValidationResultTest.java | 39 + .../SecretValidationServiceTest.java | 108 ++ ...retValidatorCategorizationServiceTest.java | 180 ++++ ...tValidatorExecutionContextFactoryTest.java | 158 +++ .../SecretValidatorExecutionServiceTest.java | 280 +++++ .../SecretValidatorWebRequestServiceTest.java | 157 +++ ...etValidatorConfigurationModelListTest.java | 55 + ...tValidatorConfigurationSpringBootTest.java | 39 + .../support/SarifValidationSupportTest.java | 122 +++ .../SecretValidatorHttpClientFactoryTest.java | 35 + .../invalid-files/invalid-sarif.txt | 1 + .../invalid-validator-config.txt | 1 + .../valid-files/test-config.json | 25 + .../valid-files/test-result.txt | 956 ++++++++++++++++++ settings.gradle | 5 +- 43 files changed, 3701 insertions(+), 1 deletion(-) create mode 100644 sechub-wrapper-secret-validator/README.adoc create mode 100644 sechub-wrapper-secret-validator/build.gradle create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/SecretValidatorApplication.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorCLI.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationService.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResult.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationService.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationStatus.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationService.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContext.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactory.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionService.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestService.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorCategorization.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModel.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelList.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequest.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequestHeader.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponse.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponseContains.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorPDSJobResult.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorProperties.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifImporterKeys.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupport.java create mode 100644 sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactory.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorSpringBootTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationServiceTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResultTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationServiceTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationServiceTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactoryTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionServiceTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestServiceTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelListTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorConfigurationSpringBootTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupportTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactoryTest.java create mode 100644 sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-sarif.txt create mode 100644 sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-validator-config.txt create mode 100644 sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-config.json create mode 100644 sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-result.txt diff --git a/gradle/projects.gradle b/gradle/projects.gradle index 8834099f63..fd00ca4356 100644 --- a/gradle/projects.gradle +++ b/gradle/projects.gradle @@ -46,6 +46,9 @@ projectType = [ to have dependency injection and access to some other spring boot parts */ project(':sechub-wrapper-checkmarx'), project(':sechub-wrapper-prepare'), + + /* special application to validate and categorize results of secret scans */ + project(':sechub-wrapper-secret-validator'), ], diff --git a/sechub-wrapper-secret-validator/README.adoc b/sechub-wrapper-secret-validator/README.adoc new file mode 100644 index 0000000000..24aecb81d2 --- /dev/null +++ b/sechub-wrapper-secret-validator/README.adoc @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: MIT +== Secret valdiation Wrapper + +This wrapper is a Spring Boot application, that is supposed to run on PDS solutions running performing secret scan. +After the secret scanning tool is done it will try to validate secrets found and enhance the SARIF report with a custom PropertyBag for each finding location. +It will add a custom severity with the key `secretscan.sechub.severity` and +one of the following values `["info", "unclassified", "low", "medium", "high", "critical"]` to the SARIF PropertyBag which contains a generic map for custom values. +This values can then be used by the `sechub-sereco` module to improve the severity categorization of a finding. + +=== Usage + +==== Start wrapper +The wrapper application is an executable jar and needs no command line arguments. +It can automatically use all +https://mercedes-benz.github.io/sechub/latest/sechub-product-delegation-server.html#launcher-scripts[standard PDS environment variables] +and following special mandatory environment variables: + +---- +SECRET_VALIDATOR_CONFIGFILE +---- + +[IMPORTANT] +==== +This files contains the configuration for each secret type, which basically tells to wrapper how to validate secrets of a certain type. +For each product a custom file is necessary, where you should use the SARIF `ruleId` to identify each configuration. +From the https://mercedes-benz.github.io/sechub/latest/sechub-product-delegation-server.html#launcher-scripts[standard PDS environment variables] +only the `PDS_JOB_RESULT_FILE` is mandatory because without a valid SARIF report from a secret scanning tool no validations can be done. +==== + +===== Configuration file example +```json +{ + "validatorConfigList" : [ { <1> + "ruleId" : "sarif-result-rule-id", <2> + "categorization" : { <3> + "defaultSeverity" : "high", + "validationFailedSeverity" : "medium", + "validationSuccessSeverity" : "critical" + }, + "requests" : [ { <4> + "proxyRequired" : true, + "url" : "https://api.example.com", + "headers" : [ { + "name" : "Authorization", + "valuePrefix" : "Bearer" + } ], + "expectedResponse" : { <5> + "httpStatus" : 200, + "contains" : { + "allOf" : [ "is", "there" ], + "oneOf" : [ "success", "authorized" ] + } + } + } ] + } ] +} +``` +<1> Define a list of configuration, for each type of secret identified by the rule id. +<2> The `ruleId` identifies this configuration so the requests defined in the later section are performed for each finding of this type. +<3> Your `categorization` configuration. If empty no categorization will be performed, otherwise: +- The `defaultSeverity` will be applied if no requests are defined but you for this type of secret. +- The `validationFailedSeverity` will be applied if all validation requests failed for this secret. +- The `validationSuccessSeverity` will be applied if the secret was successfully validated with one of the requests defined. +<4> The `requests` array defines all requests you know how to validate a secret of this certain type. +This is an array because for some secrets you might need to validate against multiple e.g. when you have AWS credentials found with your secret scan. +You might want to be able to check if it is valid for the public AWS or your internal AWS instances if you have some: +- With `proxyRequired` you can specify if the URL can only be accessed using a proxy server. +- With `url` you specify the URL the request will be performed to. +- With `headers` you specify the header `name` and `valuePrefix` if necessary for the secret found. +It is an array because it could be useful in the future. Currently the header is used for the secret because it is assumed to be a token send via HTTP header. +<5> The `expectedResponse` section contains information you expect on a request with a valid secret, +like a specific `httpStatus` code or the response body should contain `allOf` or `oneOf` certain strings. + + + +There exists also some optional variables: + +---- +SECRET_VALIDATOR_TRUSTALLCERTIFICATES +---- + +[TIP] +==== +When `SECRET_VALIDATOR_TRUSTALLCERTIFICATES` set to `true`, certificate errors on validation web requests will be ignored. +This can be useful, if you are in a environment that needs a proxy server to access certain URLs you have in your configuration. +==== + +===== Proxy configuration +Inside the configuration file each request has to configure if a proxy server is required to access this specific URL or not. +The wrapper is implemented to use the default proxy of the system properties. To configure a proxy, launch the application with the following arguments. +For each request it will then be decided if the proxy is needed or not according to the configuration file provided: + +---- +java -Dhttp.proxyHost=localhost -Dhttp.proxyPort=1234 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=1234 -jar secret-validation-wrapper.jar +---- \ No newline at end of file diff --git a/sechub-wrapper-secret-validator/build.gradle b/sechub-wrapper-secret-validator/build.gradle new file mode 100644 index 0000000000..7f2e400e1f --- /dev/null +++ b/sechub-wrapper-secret-validator/build.gradle @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +/*============================================================================ +* Build file for subproject +* +* Root build file: "${rootProject.projectDir}/build.gradle" +* ============================================================================ +*/ +dependencies { + /* runtime */ + implementation project(':sechub-commons-pds') + + implementation library.sarif_210 + implementation library.springboot_starter_validation + + /* test */ + testImplementation project(':sechub-testframework') + + testImplementation spring_boot_dependency.junit_jupiter + testImplementation spring_boot_dependency.junit_jupiter_params + testImplementation spring_boot_dependency.mockito_core +} + +/* TODO janwinz: add versioning for release workflow */ \ No newline at end of file diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/SecretValidatorApplication.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/SecretValidatorApplication.java new file mode 100644 index 0000000000..7cd8f00f64 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/SecretValidatorApplication.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SecretValidatorApplication { + + public static void main(String[] args) { + SpringApplication.run(SecretValidatorApplication.class, args); + } +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorCLI.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorCLI.java new file mode 100644 index 0000000000..f94910142a --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorCLI.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.cli; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.mercedesbenz.sechub.commons.TextFileWriter; +import com.mercedesbenz.sechub.commons.model.JSONConverter; +import com.mercedesbenz.sechub.wrapper.secret.validator.execution.SecretValidatorExecutionService; +import com.mercedesbenz.sechub.wrapper.secret.validator.properties.SecretValidatorPDSJobResult; + +import de.jcup.sarif_2_1_0.model.SarifSchema210; + +@Profile("!test") +@Component +public class SecretValidatorCLI implements CommandLineRunner { + + private static final Logger LOG = LoggerFactory.getLogger(SecretValidatorCLI.class); + + @Autowired + SecretValidatorExecutionService executionService; + + @Autowired + SecretValidatorPDSJobResult pdsJobResult; + + @Override + public void run(String... args) throws Exception { + LOG.info("Secret validator starting"); + TextFileWriter fileWriter = new TextFileWriter(); + try { + SarifSchema210 report = executionService.execute(); + + String json = JSONConverter.get().toJSON(report, true); + fileWriter.save(pdsJobResult.getFile(), json, true); + } catch (Exception e) { + LOG.error("Execution failed!", e); + System.exit(1); + } + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationService.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationService.java new file mode 100644 index 0000000000..e492332395 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationService.java @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import java.net.http.HttpResponse; + +import org.springframework.stereotype.Service; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorResponse; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorResponseContains; + +@Service +public class ResponseValidationService { + + public boolean isValidResponse(HttpResponse response, SecretValidatorResponse secretValidatorResponse) { + if (response == null || secretValidatorResponse == null) { + return false; + } + int expectedHttpStatus = secretValidatorResponse.getHttpStatus(); + // if no expected HTTP status code was configured inside the config we ignore it + if (expectedHttpStatus > 0) { + // no contains section specified, we return the result of the checked status + // code + if (hasNoContainsSection(secretValidatorResponse.getContains())) { + return expectedHttpStatus == response.statusCode(); + } + return containsExpectedSnippets(secretValidatorResponse.getContains(), response.body()); + } else { + // no contains section specified, we return false, since nothing was specified + // at all to check the response + if (hasNoContainsSection(secretValidatorResponse.getContains())) { + return false; + } + return containsExpectedSnippets(secretValidatorResponse.getContains(), response.body()); + } + } + + private boolean hasNoContainsSection(SecretValidatorResponseContains contains) { + if (contains == null) { + return true; + } + return contains.getAllOf().isEmpty() && contains.getOneOf().isEmpty(); + } + + private boolean containsExpectedSnippets(SecretValidatorResponseContains contains, String body) { + // body should not be null since contains section should be specified at this + // point + if (body == null || contains == null) { + return false; + } + + // at the point where this method gets called we require the contains section to + // be configured + if (hasNoContainsSection(contains)) { + return false; + } + + for (String substring : contains.getAllOf()) { + // all must be present + if (!body.contains(substring)) { + return false; + } + } + if (contains.getOneOf().isEmpty()) { + return true; + } + + for (String substring : contains.getOneOf()) { + // if one is present it is enough at this point + if (body.contains(substring)) { + return true; + } + } + // this should not be reached + return false; + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResult.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResult.java new file mode 100644 index 0000000000..87aa0fa3d7 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResult.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +public class SecretValidationResult { + + private SecretValidationStatus validationStatus = SecretValidationStatus.NO_VALIDATION_CONFIGURED; + private String validatedByUrl; + + /** + * Get the status after validation of the current validated finding + * + * @return the validation status, never null + */ + public SecretValidationStatus getValidationStatus() { + return validationStatus; + } + + public void setValidationStatus(SecretValidationStatus validationStatus) { + if (validationStatus != null) { + this.validationStatus = validationStatus; + } + } + + public String getValidatedByUrl() { + return validatedByUrl; + } + + public void setValidatedByUrl(String validatedByUrl) { + this.validatedByUrl = validatedByUrl; + } +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationService.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationService.java new file mode 100644 index 0000000000..6a324a39c0 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationService.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorRequest; + +import de.jcup.sarif_2_1_0.model.ArtifactContent; +import de.jcup.sarif_2_1_0.model.Region; + +@Service +public class SecretValidationService { + + private static final Logger LOG = LoggerFactory.getLogger(SecretValidationService.class); + + @Autowired + SecretValidatorWebRequestService webRequestService; + + public SecretValidationResult validateFindingByRegion(Region findingRegion, List requests, boolean trustAllCertificates) { + ArtifactContent snippet = findingRegion.getSnippet(); + SecretValidationResult validationResult = new SecretValidationResult(); + if (snippet == null) { + LOG.warn("Cannot validate finding because the SARIF snippet is null."); + validationResult.setValidationStatus(SecretValidationStatus.SARIF_SNIPPET_NOT_SET); + return validationResult; + } + + String snippetText = snippet.getText(); + if (snippetText == null || snippetText.isBlank()) { + LOG.warn("Cannot validate finding because the SARIF snippet text is null or empty."); + validationResult.setValidationStatus(SecretValidationStatus.SARIF_SNIPPET_NOT_SET); + return validationResult; + } + return webRequestService.validateFinding(snippetText, requests, trustAllCertificates); + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationStatus.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationStatus.java new file mode 100644 index 0000000000..356adff916 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationStatus.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +public enum SecretValidationStatus { + + VALID("The secret was successfully validated via a configured URL!"), + + INVALID("The secret could not be validated via any configured URL!"), + + NO_VALIDATION_CONFIGURED("No validation URLs are configured for this type of secret!"), + + SARIF_SNIPPET_NOT_SET("SARIF finding does not contain a valid snippet to validate!"),; + + private String description; + + private SecretValidationStatus(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationService.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationService.java new file mode 100644 index 0000000000..6ac55069c3 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationService.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static com.mercedesbenz.sechub.wrapper.secret.validator.support.SarifImporterKeys.*; + +import org.springframework.stereotype.Service; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorCategorization; + +import de.jcup.sarif_2_1_0.model.PropertyBag; +import de.jcup.sarif_2_1_0.model.Region; + +@Service +public class SecretValidatorCategorizationService { + + public void categorizeFindingByRegion(SecretValidationResult validationResult, Region findingRegion, SecretValidatorCategorization categorization) { + if (categorization == null || categorization.isEmpty()) { + return; + } + SecretValidationStatus validationStatus = validationResult.getValidationStatus(); + PropertyBag properties = new PropertyBag(); + + switch (validationStatus) { + case VALID: + properties.setAdditionalProperty(SECRETSCAN_SECHUB_SEVERITY.getKey(), categorization.getValidationSuccessSeverity()); + String validatedByUrl = validationResult.getValidatedByUrl(); + if (validatedByUrl != null) { + properties.setAdditionalProperty(SECRETSCAN_VALIDATED_BY_URL.getKey(), validatedByUrl); + } + break; + case INVALID: + properties.setAdditionalProperty(SECRETSCAN_SECHUB_SEVERITY.getKey(), categorization.getValidationFailedSeverity()); + break; + case NO_VALIDATION_CONFIGURED: + case SARIF_SNIPPET_NOT_SET: + default: + properties.setAdditionalProperty(SECRETSCAN_SECHUB_SEVERITY.getKey(), categorization.getDefaultSeverity()); + } + findingRegion.setProperties(properties); + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContext.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContext.java new file mode 100644 index 0000000000..a2c6a4589a --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContext.java @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorConfigurationModel; + +import de.jcup.sarif_2_1_0.model.SarifSchema210; + +public class SecretValidatorExecutionContext { + + private SarifSchema210 sarifReport; + + private Map validatorConfiguration = new HashMap<>(); + + private boolean trustAllCertificates; + + private SecretValidatorExecutionContext() { + } + + public SarifSchema210 getSarifReport() { + return sarifReport; + } + + public Map getValidatorConfiguration() { + return Collections.unmodifiableMap(validatorConfiguration); + } + + public boolean isTrustAllCertificates() { + return trustAllCertificates; + } + + public static SecretValidatorExecutionContextBuilder builder() { + return new SecretValidatorExecutionContextBuilder(); + } + + public static class SecretValidatorExecutionContextBuilder { + + private SarifSchema210 sarifReport; + + private Map validatorConfiguration = new HashMap<>(); + + private boolean trustAllCertificates; + + public SecretValidatorExecutionContextBuilder setSarifReport(SarifSchema210 report) { + this.sarifReport = report; + return this; + } + + public SecretValidatorExecutionContextBuilder setValidatorConfiguration(Map validatorConfiguration) { + this.validatorConfiguration = validatorConfiguration; + return this; + } + + public SecretValidatorExecutionContextBuilder setTrustAllCertificates(boolean trustAllCertificates) { + this.trustAllCertificates = trustAllCertificates; + return this; + } + + public SecretValidatorExecutionContext build() { + SecretValidatorExecutionContext secretValidatorExecutionContext = new SecretValidatorExecutionContext(); + secretValidatorExecutionContext.sarifReport = this.sarifReport; + secretValidatorExecutionContext.validatorConfiguration = this.validatorConfiguration; + secretValidatorExecutionContext.trustAllCertificates = this.trustAllCertificates; + + return secretValidatorExecutionContext; + } + + } +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactory.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactory.java new file mode 100644 index 0000000000..1cb1b3069c --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactory.java @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.mercedesbenz.sechub.commons.TextFileReader; +import com.mercedesbenz.sechub.commons.model.JSONConverter; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorConfigurationModel; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorConfigurationModelList; +import com.mercedesbenz.sechub.wrapper.secret.validator.properties.SecretValidatorPDSJobResult; +import com.mercedesbenz.sechub.wrapper.secret.validator.properties.SecretValidatorProperties; + +import de.jcup.sarif_2_1_0.model.SarifSchema210; + +@Component +public class SecretValidatorExecutionContextFactory { + private static final Logger LOG = LoggerFactory.getLogger(SecretValidatorExecutionContextFactory.class); + + @Autowired + SecretValidatorPDSJobResult pdsResult; + + @Autowired + SecretValidatorProperties properties; + + TextFileReader reader = new TextFileReader(); + + public SecretValidatorExecutionContext create() { + LOG.info("Loading SARIF model from secret scan."); + SarifSchema210 report = createSarifReport(pdsResult.getFile()); + + LOG.info("Loading validator configuration for this pds solution."); + Map ruleConfigurations = createRuleConfigurations(properties.getConfigFile()); + + /* @formatter:off */ + SecretValidatorExecutionContext context = + SecretValidatorExecutionContext.builder() + .setSarifReport(report) + .setValidatorConfiguration(ruleConfigurations) + .setTrustAllCertificates(properties.isTrustAllCertificates()) + .build(); + /* @formatter:on */ + return context; + } + + private SarifSchema210 createSarifReport(File pdsResultFile) { + if (!pdsResultFile.exists()) { + throw new IllegalStateException("PDS job result file: " + pdsResultFile + " does not exist!"); + } else if (!pdsResultFile.canRead()) { + throw new IllegalStateException("PDS job result file: " + pdsResultFile + " is not readable!"); + } + + try { + String sarifReportJson = reader.loadTextFile(pdsResultFile); + return JSONConverter.get().fromJSON(SarifSchema210.class, sarifReportJson); + } catch (Exception e) { + throw new IllegalStateException("Creating SARIF report model from: " + pdsResultFile + " failed!", e); + } + } + + private Map createRuleConfigurations(File validatorConfigFile) { + if (!validatorConfigFile.exists()) { + throw new IllegalStateException("Secret validator configuration file: " + validatorConfigFile + " does not exist!"); + } else if (!validatorConfigFile.canRead()) { + throw new IllegalStateException("Secret validator configuration file: " + validatorConfigFile + " is not readable!"); + } + + try { + String validatorConfigJson = reader.loadTextFile(validatorConfigFile); + SecretValidatorConfigurationModelList configurationDataList = JSONConverter.get().fromJSON(SecretValidatorConfigurationModelList.class, + validatorConfigJson); + + Map ruleConfigurations = new HashMap<>(); + for (SecretValidatorConfigurationModel configData : configurationDataList.getValidatorConfigList()) { + ruleConfigurations.put(configData.getRuleId(), configData); + } + return ruleConfigurations; + } catch (Exception e) { + throw new IllegalStateException("Creating secret validator configuration from: " + validatorConfigFile + " failed!", e); + } + + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionService.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionService.java new file mode 100644 index 0000000000..fa31f36446 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionService.java @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorCategorization; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorConfigurationModel; +import com.mercedesbenz.sechub.wrapper.secret.validator.support.SarifValidationSupport; + +import de.jcup.sarif_2_1_0.model.Location; +import de.jcup.sarif_2_1_0.model.Region; +import de.jcup.sarif_2_1_0.model.Result; +import de.jcup.sarif_2_1_0.model.Run; +import de.jcup.sarif_2_1_0.model.SarifSchema210; + +@Service +public class SecretValidatorExecutionService { + private static final Logger LOG = LoggerFactory.getLogger(SecretValidatorExecutionService.class); + + @Autowired + SecretValidatorExecutionContextFactory contextFactory; + + @Autowired + SecretValidationService validationService; + + @Autowired + SecretValidatorCategorizationService categorizationService; + + @Autowired + SarifValidationSupport sarifValidationSupport; + + public SarifSchema210 execute() { + SecretValidatorExecutionContext executionContext = contextFactory.create(); + Map validatorConfiguration = executionContext.getValidatorConfiguration(); + + // generally for secret scans it is only one run + List runs = executionContext.getSarifReport().getRuns(); + for (Run run : runs) { + List findings = run.getResults(); + for (Result finding : findings) { + if (!sarifValidationSupport.findingCanBeValidated(finding)) { + continue; + } + SecretValidatorConfigurationModel config = validatorConfiguration.get(finding.getRuleId()); + if (config == null) { + LOG.info("No config found to validate findings of rule: {}", finding.getRuleId()); + continue; + } + SecretValidatorCategorization categorization = config.getCategorization(); + if (categorization == null || categorization.isEmpty()) { + LOG.info("No config found to categorize findings of rule: {}", finding.getRuleId()); + continue; + } + for (Location location : finding.getLocations()) { + if (!sarifValidationSupport.findingLocationCanBeValidated(location)) { + continue; + } + Region findingRegion = location.getPhysicalLocation().getRegion(); + SecretValidationResult validationResult = validationService.validateFindingByRegion(findingRegion, config.getRequests(), + executionContext.isTrustAllCertificates()); + categorizationService.categorizeFindingByRegion(validationResult, findingRegion, config.getCategorization()); + } + } + } + return executionContext.getSarifReport(); + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestService.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestService.java new file mode 100644 index 0000000000..963cc0e4cf --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestService.java @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorRequest; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorRequestHeader; +import com.mercedesbenz.sechub.wrapper.secret.validator.support.SecretValidatorHttpClientFactory; + +@Service +public class SecretValidatorWebRequestService { + + private static final Logger LOG = LoggerFactory.getLogger(SecretValidatorWebRequestService.class); + + @Autowired + SecretValidatorHttpClientFactory httpClientFactory; + + @Autowired + ResponseValidationService responseValidationService; + + public SecretValidationResult validateFinding(String snippetText, List requests, boolean trustAllCertificates) { + HttpClient proxyHttpClient = httpClientFactory.createProxyHttpClient(trustAllCertificates); + HttpClient directHttpClient = httpClientFactory.createDirectHttpClient(trustAllCertificates); + + if (snippetText == null || snippetText.isBlank()) { + LOG.warn("Cannot validate finding because the SARIF snippet text is null or empty."); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.SARIF_SNIPPET_NOT_SET); + return validationResult; + } + if (requests.isEmpty()) { + LOG.info("Configured requests for this finding empty! Finding cannot be validated!"); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.NO_VALIDATION_CONFIGURED); + return validationResult; + } + int validationsPerformed = 0; + for (SecretValidatorRequest request : requests) { + if (request == null) { + LOG.info("Request config is null! Entry will be skipped."); + continue; + } + if (request.getUrl() == null) { + LOG.info("Request config URL is null! Entry will be skipped."); + continue; + } + HttpResponse response = null; + try { + HttpRequest httpRequest = createHttpRequest(snippetText, request); + if (request.isProxyRequired()) { + response = proxyHttpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); + } else { + response = directHttpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); + } + } catch (IOException | InterruptedException e) { + LOG.error("Performing validation request failed!"); + } + validationsPerformed++; + if (responseValidationService.isValidResponse(response, request.getExpectedResponse())) { + LOG.info("Finding is valid!"); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.VALID); + validationResult.setValidatedByUrl(request.getUrl().toString()); + return validationResult; + } + } + if (validationsPerformed < 1) { + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.NO_VALIDATION_CONFIGURED); + return validationResult; + } + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.INVALID); + return validationResult; + } + + private HttpRequest createHttpRequest(String snippetText, SecretValidatorRequest request) { + List headers = new ArrayList<>(); + for (SecretValidatorRequestHeader header : request.getHeaders()) { + String value = snippetText; + if (header.getValuePrefix() != null) { + value = header.getValuePrefix() + " " + snippetText; + } + headers.add(header.getName()); + headers.add(value); + } + String[] headersAsArrays = new String[headers.size()]; + try { + /* @formatter:off */ + return HttpRequest.newBuilder() + .headers(headers.toArray(headersAsArrays)) + .uri(request.getUrl().toURI()) + .GET() + .build(); + /* @formatter:on */ + } catch (URISyntaxException e) { + LOG.error("Request URL {} is invalid!", request.getUrl()); + throw new IllegalArgumentException(e); + } + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorCategorization.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorCategorization.java new file mode 100644 index 0000000000..988d6ed276 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorCategorization.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class SecretValidatorCategorization { + + private String defaultSeverity; + private String validationFailedSeverity; + private String validationSuccessSeverity; + + public String getDefaultSeverity() { + return defaultSeverity; + } + + public void setDefaultSeverity(String defaultSeverity) { + this.defaultSeverity = defaultSeverity; + } + + public String getValidationFailedSeverity() { + return validationFailedSeverity; + } + + public void setValidationFailedSeverity(String validationFailedSeverity) { + this.validationFailedSeverity = validationFailedSeverity; + } + + public String getValidationSuccessSeverity() { + return validationSuccessSeverity; + } + + public void setValidationSuccessSeverity(String validationSuccessSeverity) { + this.validationSuccessSeverity = validationSuccessSeverity; + } + + /** + * Check if no severities were configured for. + * + * @return true, if all fields are null and therefore not + * configured and false, if any of the fields is set to a value other + * than null. + */ + @JsonIgnore + public boolean isEmpty() { + return defaultSeverity == null && validationFailedSeverity == null && validationSuccessSeverity == null; + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModel.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModel.java new file mode 100644 index 0000000000..ab2573011a --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModel.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class SecretValidatorConfigurationModel { + + private String ruleId; + private SecretValidatorCategorization categorization; + private List requests = new ArrayList<>(); + + public String getRuleId() { + return ruleId; + } + + public void setRuleId(String ruleId) { + this.ruleId = ruleId; + } + + public SecretValidatorCategorization getCategorization() { + return categorization; + } + + public void setCategorization(SecretValidatorCategorization categorization) { + this.categorization = categorization; + } + + public List getRequests() { + return Collections.unmodifiableList(requests); + } + + public void setRequests(List requests) { + if (requests != null) { + this.requests = requests; + } + } +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelList.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelList.java new file mode 100644 index 0000000000..ab9da9281b --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelList.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class SecretValidatorConfigurationModelList { + + private List validatorConfigList = new ArrayList<>(); + + public List getValidatorConfigList() { + return Collections.unmodifiableList(validatorConfigList); + } + + public void setDataList(List validatorConfigList) { + if (validatorConfigList != null) { + this.validatorConfigList = validatorConfigList; + } + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequest.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequest.java new file mode 100644 index 0000000000..9a4db101db --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequest.java @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class SecretValidatorRequest { + + private URL url; + private boolean proxyRequired; + private List headers = new ArrayList<>(); + private SecretValidatorResponse expectedResponse; + + public URL getUrl() { + return url; + } + + public void setUrl(URL url) { + this.url = url; + } + + public boolean isProxyRequired() { + return proxyRequired; + } + + public void setProxyRequired(boolean proxyRequired) { + this.proxyRequired = proxyRequired; + } + + public List getHeaders() { + return Collections.unmodifiableList(headers); + } + + public void setHeaders(List headers) { + if (headers != null) { + this.headers = headers; + } + } + + public SecretValidatorResponse getExpectedResponse() { + return expectedResponse; + } + + public void setExpectedResponse(SecretValidatorResponse expectedResponse) { + this.expectedResponse = expectedResponse; + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequestHeader.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequestHeader.java new file mode 100644 index 0000000000..5435419938 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorRequestHeader.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class SecretValidatorRequestHeader { + + private String name; + private String valuePrefix; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValuePrefix() { + return valuePrefix; + } + + public void setValuePrefix(String valuePrefix) { + this.valuePrefix = valuePrefix; + } +} \ No newline at end of file diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponse.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponse.java new file mode 100644 index 0000000000..9f023235c4 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponse.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class SecretValidatorResponse { + + private int httpStatus; + private SecretValidatorResponseContains contains; + + public int getHttpStatus() { + return httpStatus; + } + + public void setHttpStatus(int httpStatus) { + this.httpStatus = httpStatus; + } + + public SecretValidatorResponseContains getContains() { + return contains; + } + + public void setContains(SecretValidatorResponseContains contains) { + this.contains = contains; + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponseContains.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponseContains.java new file mode 100644 index 0000000000..7ae8fdae0f --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorResponseContains.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class SecretValidatorResponseContains { + + private List allOf = new ArrayList<>(); + private List oneOf = new ArrayList<>(); + + public List getAllOf() { + return Collections.unmodifiableList(allOf); + } + + public void setAllOf(List allOf) { + if (allOf != null) { + this.allOf = allOf; + } + } + + public List getOneOf() { + return Collections.unmodifiableList(oneOf); + } + + public void setOneOf(List oneOf) { + if (oneOf != null) { + this.oneOf = oneOf; + } + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorPDSJobResult.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorPDSJobResult.java new file mode 100644 index 0000000000..7b86405978 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorPDSJobResult.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.properties; + +import java.io.File; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotNull; + +@Validated +@ConfigurationProperties(prefix = "pds.job.result") +@Component +public class SecretValidatorPDSJobResult { + + @NotNull + private File file; + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorProperties.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorProperties.java new file mode 100644 index 0000000000..96a65fd23a --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorProperties.java @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.properties; + +import java.io.File; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotNull; + +@Validated +@ConfigurationProperties(prefix = "secret.validator") +@Component +public class SecretValidatorProperties { + + @NotNull + private File configFile; + + private boolean trustAllCertificates; + + public File getConfigFile() { + return configFile; + } + + public void setConfigFile(File configFile) { + this.configFile = configFile; + } + + public boolean isTrustAllCertificates() { + return trustAllCertificates; + } + + public void setTrustAllCertificates(boolean trustAllCertificates) { + this.trustAllCertificates = trustAllCertificates; + } + +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifImporterKeys.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifImporterKeys.java new file mode 100644 index 0000000000..380edcdb9d --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifImporterKeys.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.support; + +/* + * If this needs to get changed, make sure to change + * com.mercedesbenz.sechub.sereco.importer.SarifImporterKeys accordingly + */ +public enum SarifImporterKeys { + + SECRETSCAN_SECHUB_SEVERITY("secretscan.sechub.severity", "The key for the sechub severity which is more precise than the SARIF Level enum."), + + SECRETSCAN_VALIDATED_BY_URL("secretscan.validated.by.url", "The key for the URL the secret was validated with."), + + ; + + private String key; + private String description; + + private SarifImporterKeys(String key, String description) { + this.key = key; + this.description = description; + } + + public String getKey() { + return key; + } + + public String getDescription() { + return description; + } +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupport.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupport.java new file mode 100644 index 0000000000..a55ed48903 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupport.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.support; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import de.jcup.sarif_2_1_0.model.Location; +import de.jcup.sarif_2_1_0.model.PhysicalLocation; +import de.jcup.sarif_2_1_0.model.Region; +import de.jcup.sarif_2_1_0.model.Result; + +@Component +public class SarifValidationSupport { + + private static final Logger LOG = LoggerFactory.getLogger(SarifValidationSupport.class); + + public boolean findingCanBeValidated(Result finding) { + if (finding == null) { + LOG.info("Finding entry in SARIF report is null. Finding validation will be skipped."); + return false; + } + List locations = finding.getLocations(); + if (locations == null || locations.isEmpty()) { + LOG.info("Finding locations list in sarif report are null or empty. Finding validation will be skipped."); + return false; + } + return true; + } + + public boolean findingLocationCanBeValidated(Location location) { + if (location == null) { + LOG.info("Finding location entry in SARIF report is null. Finding validation will be skipped."); + return false; + } + PhysicalLocation physicalLocation = location.getPhysicalLocation(); + if (physicalLocation == null) { + LOG.info("Finding physical location entry in SARIF report is null. Finding validation will be skipped."); + return false; + } + Region findingRegion = physicalLocation.getRegion(); + if (findingRegion == null) { + LOG.info("Finding physical location region entry in SARIF report is null. Finding validation will be skipped."); + return false; + } + return true; + } +} diff --git a/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactory.java b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactory.java new file mode 100644 index 0000000000..7b1f5ac56f --- /dev/null +++ b/sechub-wrapper-secret-validator/src/main/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactory.java @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.support; + +import java.net.ProxySelector; +import java.net.http.HttpClient; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import org.springframework.stereotype.Component; + +@Component +public class SecretValidatorHttpClientFactory { + private static final String TLS = "TLS"; + + public HttpClient createProxyHttpClient(boolean trustAllCertificates) { + if (trustAllCertificates) { + TrustManager pseudoTrustManager = createTrustManagerWhichTrustsEveryBody(); + SSLContext sslContext = createSSLContextForTrustManager(pseudoTrustManager); + /* @formatter:off */ + return HttpClient.newBuilder() + .proxy(ProxySelector.getDefault()) + .sslContext(sslContext) + .build(); + /* @formatter:on */ + } else { + /* @formatter:off */ + return HttpClient.newBuilder() + .proxy(ProxySelector.getDefault()) + .build(); + /* @formatter:on */ + } + } + + public HttpClient createDirectHttpClient(boolean trustAllCertificates) { + if (trustAllCertificates) { + TrustManager pseudoTrustManager = createTrustManagerWhichTrustsEveryBody(); + SSLContext sslContext = createSSLContextForTrustManager(pseudoTrustManager); + /* @formatter:off */ + return HttpClient.newBuilder() + .sslContext(sslContext) + .build(); + /* @formatter:on */ + } else { + return HttpClient.newBuilder().build(); + } + } + + private X509TrustManager createTrustManagerWhichTrustsEveryBody() { + return new X509TrustManager() { + + private X509Certificate[] emptyCertificatesArray = new X509Certificate[] {}; + + public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + /* we do not check the client - we trust all */ + } + + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + /* we do not check the server - we trust all */ + } + + public X509Certificate[] getAcceptedIssuers() { + return emptyCertificatesArray; + } + }; + } + + private SSLContext createSSLContextForTrustManager(TrustManager trustManager) { + SSLContext sslContext = null; + try { + sslContext = SSLContext.getInstance(TLS); + sslContext.init(null, new TrustManager[] { trustManager }, null); + + return sslContext; + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw new IllegalStateException("Was not able to create trust all context", e); + } + + } +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorSpringBootTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorSpringBootTest.java new file mode 100644 index 0000000000..5bc1b80591 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/cli/SecretValidatorSpringBootTest.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.cli; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Map; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import com.mercedesbenz.sechub.wrapper.secret.validator.execution.SecretValidatorExecutionService; +import com.mercedesbenz.sechub.wrapper.secret.validator.support.SarifImporterKeys; + +import de.jcup.sarif_2_1_0.model.Location; +import de.jcup.sarif_2_1_0.model.Region; +import de.jcup.sarif_2_1_0.model.Result; +import de.jcup.sarif_2_1_0.model.Run; +import de.jcup.sarif_2_1_0.model.SarifSchema210; + +@SpringBootTest +@ExtendWith(SpringExtension.class) +@EnableConfigurationProperties +@TestPropertySource(properties = { "secret.validator.config-file=src/test/resources/config-test-files/valid-files/test-config.json", + "secret.validator.trust-all-certificates=false", "pds.job.result.file=src/test/resources/config-test-files/valid-files/test-result.txt" }) +@ActiveProfiles("test") +class SecretValidatorSpringBootTest { + + @Autowired + SecretValidatorExecutionService executionService; + + @Test + void execution_service_with_correct_configuration_without_validation_categprizes_findings_with_default_configured() { + /* execute */ + SarifSchema210 report = executionService.execute(); + + /* test */ + Run run = report.getRuns().get(0); + for (Result finding : run.getResults()) { + Location location = finding.getLocations().get(0); + Region region = location.getPhysicalLocation().getRegion(); + Map additionalProperties = region.getProperties().getAdditionalProperties(); + String sechubSeverity = (String) additionalProperties.get(SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey()); + String validatedByUrl = (String) additionalProperties.get(SarifImporterKeys.SECRETSCAN_VALIDATED_BY_URL.getKey()); + + // expected severity is the severity from the validation failed config + assertEquals("medium", sechubSeverity); + + // since it was not validated we expected no value for + // SECRETSCAN_VALIDATED_BY_URL + assertEquals(null, validatedByUrl); + } + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationServiceTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationServiceTest.java new file mode 100644 index 0000000000..5bc3fa0d1d --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/ResponseValidationServiceTest.java @@ -0,0 +1,245 @@ +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.net.http.HttpResponse; +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorResponse; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorResponseContains; + +class ResponseValidationServiceTest { + + private ResponseValidationService serviceToTest = new ResponseValidationService(); + + @Test + void response_is_null_results_in_validation_is_false() { + /* execute */ + boolean isValid = serviceToTest.isValidResponse(null, new SecretValidatorResponse()); + + /* test */ + assertFalse(isValid); + } + + @Test + void validator_response_config_is_null_results_in_validation_is_false() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, null); + + /* test */ + assertFalse(isValid); + } + + @ParameterizedTest + @ValueSource(ints = { 200, 302, 404, 500 }) + void validator_response_config_status_code_configured_and_contains_is_null_results_in_http_status_code_check(int responseCode) { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(responseCode); + SecretValidatorResponse secretValidatorResponse = new SecretValidatorResponse(); + secretValidatorResponse.setHttpStatus(302); + secretValidatorResponse.setContains(null); + + // with this configuration we expect the satuscodes being compared, + // since nothing else is configured inside the SecretValidatorResponse + boolean expectedResponse = response.statusCode() == secretValidatorResponse.getHttpStatus(); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, secretValidatorResponse); + + /* test */ + assertEquals(expectedResponse, isValid); + } + + @ParameterizedTest + @ValueSource(ints = { 200, 302, 404, 500 }) + void validator_response_config_status_code_configured_and_contains_is_empty_results_in_http_status_code_check(int responseCode) { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(responseCode); + SecretValidatorResponse secretValidatorResponse = new SecretValidatorResponse(); + secretValidatorResponse.setHttpStatus(302); + secretValidatorResponse.setContains(new SecretValidatorResponseContains()); + + // with this configuration we expect the satuscodes being compared, + // since nothing else is configured inside the SecretValidatorResponse + boolean expectedResponse = response.statusCode() == secretValidatorResponse.getHttpStatus(); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, secretValidatorResponse); + + /* test */ + assertEquals(expectedResponse, isValid); + } + + @Test + void validator_response_config_status_code_not_configured_and_contains_is_null_results_in_false() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + SecretValidatorResponse secretValidatorResponse = new SecretValidatorResponse(); + secretValidatorResponse.setContains(null); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, secretValidatorResponse); + + /* test */ + assertFalse(isValid); + } + + @Test + void validator_response_config_status_code_not_configured_and_contains_is_empty_results_in_false() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + SecretValidatorResponse secretValidatorResponse = new SecretValidatorResponse(); + secretValidatorResponse.setContains(new SecretValidatorResponseContains()); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, secretValidatorResponse); + + /* test */ + assertFalse(isValid); + } + + @Test + void response_body_is_null_with_statuscode_configured_results_in_false() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + when(response.body()).thenReturn(null); + SecretValidatorResponse responseConfig = createSecretValidatorResponseWithAllOfSetup(); + responseConfig.setHttpStatus(200); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, responseConfig); + + /* test */ + assertFalse(isValid); + } + + @Test + void response_body_is_null_without_statuscode_configured_results_in_false() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + when(response.body()).thenReturn(null); + SecretValidatorResponse responseConfig = createSecretValidatorResponseWithAllOfSetup(); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, responseConfig); + + /* test */ + assertFalse(isValid); + } + + @Test + void response_body_contains_all_of_expected_substings_returns_true() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + when(response.body()).thenReturn("OK is authorized"); + SecretValidatorResponse responseConfig = createSecretValidatorResponseWithAllOfSetup(); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, responseConfig); + + /* test */ + assertTrue(isValid); + } + + @Test + void response_body_does_not_contain_all_of_expected_substings_returns_false() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + when(response.body()).thenReturn("OK"); + SecretValidatorResponse responseConfig = createSecretValidatorResponseWithAllOfSetup(); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, responseConfig); + + /* test */ + assertFalse(isValid); + } + + @Test + void response_body_contains_one_of_expected_substings_returns_true() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + when(response.body()).thenReturn("OK"); + SecretValidatorResponse responseConfig = createSecretValidatorResponseWithOneOfSetup(); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, responseConfig); + + /* test */ + assertTrue(isValid); + } + + @Test + void response_body_does_not_contain_one_of_expected_substings_returns_false() { + /* prepare */ + @SuppressWarnings("unchecked") + HttpResponse response = mock(HttpResponse.class); + when(response.statusCode()).thenReturn(200); + when(response.body()).thenReturn("Authentication successful!"); + SecretValidatorResponse responseConfig = createSecretValidatorResponseWithAllOfSetup(); + + /* execute */ + boolean isValid = serviceToTest.isValidResponse(response, responseConfig); + + /* test */ + assertFalse(isValid); + } + + private SecretValidatorResponse createSecretValidatorResponseWithAllOfSetup() { + SecretValidatorResponse secretValidatorResponse = new SecretValidatorResponse(); + SecretValidatorResponseContains contains = new SecretValidatorResponseContains(); + List allOf = new ArrayList<>(); + allOf.add("OK"); + allOf.add("authorized"); + + contains.setAllOf(allOf); + secretValidatorResponse.setContains(contains); + + return secretValidatorResponse; + } + + private SecretValidatorResponse createSecretValidatorResponseWithOneOfSetup() { + SecretValidatorResponse secretValidatorResponse = new SecretValidatorResponse(); + SecretValidatorResponseContains contains = new SecretValidatorResponseContains(); + List oneOf = new ArrayList<>(); + oneOf.add("OK"); + oneOf.add("authorized"); + + contains.setOneOf(oneOf); + secretValidatorResponse.setContains(contains); + + return secretValidatorResponse; + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResultTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResultTest.java new file mode 100644 index 0000000000..76a116ba27 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationResultTest.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; + +class SecretValidationResultTest { + + @ParameterizedTest + @EnumSource(SecretValidationStatus.class) + void setting_a_new_value_results_in_the_specified_value_being_set(SecretValidationStatus status) { + /* prepare */ + SecretValidationResult validationResult = new SecretValidationResult(); + + /* execute */ + validationResult.setValidationStatus(status); + + /* test */ + assertEquals(status, validationResult.getValidationStatus()); + + } + + @Test + void setting_null_results_in_the_default_value_staying_set() { + /* prepare */ + SecretValidationResult validationResult = new SecretValidationResult(); + + /* execute */ + validationResult.setValidationStatus(null); + + /* test */ + assertEquals(SecretValidationStatus.NO_VALIDATION_CONFIGURED, validationResult.getValidationStatus()); + + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationServiceTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationServiceTest.java new file mode 100644 index 0000000000..0b0b66d82e --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidationServiceTest.java @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorRequest; + +import de.jcup.sarif_2_1_0.model.ArtifactContent; +import de.jcup.sarif_2_1_0.model.Region; + +class SecretValidationServiceTest { + + private SecretValidationService serviceToTest; + + private SecretValidatorWebRequestService webRequestService; + + @BeforeEach + void beforeEach() { + serviceToTest = new SecretValidationService(); + + webRequestService = mock(SecretValidatorWebRequestService.class); + serviceToTest.webRequestService = webRequestService; + + } + + @Test + void region_snippet_is_null_returns_expected_validation_result() { + /* prepare */ + Region region = new Region(); + List requests = new ArrayList<>(); + when(webRequestService.validateFinding(null, requests, true)).thenReturn(new SecretValidationResult()); + + /* execute */ + SecretValidationResult validateFindingByRegion = serviceToTest.validateFindingByRegion(region, requests, true); + + /* test */ + verify(webRequestService, never()).validateFinding(null, requests, true); + assertEquals(SecretValidationStatus.SARIF_SNIPPET_NOT_SET, validateFindingByRegion.getValidationStatus()); + + } + + @Test + void region_snippet_text_is_null_returns_expected_validation_result() { + /* prepare */ + Region region = new Region(); + region.setSnippet(new ArtifactContent()); + List requests = new ArrayList<>(); + when(webRequestService.validateFinding(region.getSnippet().getText(), requests, true)).thenReturn(new SecretValidationResult()); + + /* execute */ + SecretValidationResult validateFindingByRegion = serviceToTest.validateFindingByRegion(region, requests, true); + + /* test */ + verify(webRequestService, never()).validateFinding(region.getSnippet().getText(), requests, true); + assertEquals(SecretValidationStatus.SARIF_SNIPPET_NOT_SET, validateFindingByRegion.getValidationStatus()); + + } + + @Test + void region_snippet_text_is_blank_returns_expected_validation_result() { + /* prepare */ + Region region = new Region(); + ArtifactContent snippet = new ArtifactContent(); + snippet.setText(" "); + region.setSnippet(snippet); + List requests = new ArrayList<>(); + when(webRequestService.validateFinding(region.getSnippet().getText(), requests, true)).thenReturn(new SecretValidationResult()); + + /* execute */ + SecretValidationResult validateFindingByRegion = serviceToTest.validateFindingByRegion(region, requests, true); + + /* test */ + verify(webRequestService, never()).validateFinding(region.getSnippet().getText(), requests, true); + assertEquals(SecretValidationStatus.SARIF_SNIPPET_NOT_SET, validateFindingByRegion.getValidationStatus()); + + } + + @Test + void region_snippet_text_is_set_results_in_web_request_service_called_once() { + /* prepare */ + Region region = new Region(); + ArtifactContent snippet = new ArtifactContent(); + snippet.setText("secret"); + region.setSnippet(snippet); + List requests = new ArrayList<>(); + when(webRequestService.validateFinding(region.getSnippet().getText(), requests, true)).thenReturn(new SecretValidationResult()); + + /* execute */ + SecretValidationResult validateFindingByRegion = serviceToTest.validateFindingByRegion(region, requests, true); + + /* test */ + verify(webRequestService, times(1)).validateFinding(region.getSnippet().getText(), requests, true); + assertEquals(SecretValidationStatus.NO_VALIDATION_CONFIGURED, validateFindingByRegion.getValidationStatus()); + + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationServiceTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationServiceTest.java new file mode 100644 index 0000000000..5fe1df1ce0 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorCategorizationServiceTest.java @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import java.net.MalformedURLException; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorCategorization; +import com.mercedesbenz.sechub.wrapper.secret.validator.support.SarifImporterKeys; + +import de.jcup.sarif_2_1_0.model.PropertyBag; +import de.jcup.sarif_2_1_0.model.Region; + +class SecretValidatorCategorizationServiceTest { + + private SecretValidatorCategorizationService serviceToTest = new SecretValidatorCategorizationService(); + + @Test + void categorization_config_is_null_results_in_property_bag_being_empty() { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, null); + + /* test */ + assertNull(findingRegion.getProperties()); + } + + @Test + void categorization_config_is_empty_results_in_property_bag_being_empty() { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, categorization); + + /* test */ + assertNull(findingRegion.getProperties()); + } + + @Test + void validation_result_valid_results_in_configured_categorization() { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.VALID); + validationResult.setValidatedByUrl("http://api.example.com"); + + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + categorization.setValidationSuccessSeverity("critical"); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, categorization); + + /* test */ + PropertyBag properties = findingRegion.getProperties(); + Map additionalProperties = properties.getAdditionalProperties(); + + assertEquals(2, additionalProperties.size()); + assertEquals(categorization.getValidationSuccessSeverity(), additionalProperties.get(SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey())); + assertEquals("http://api.example.com", additionalProperties.get(SarifImporterKeys.SECRETSCAN_VALIDATED_BY_URL.getKey())); + } + + @Test + void validation_result_invalid_results_in_configured_categorization() { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.INVALID); + + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + categorization.setValidationFailedSeverity("low"); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, categorization); + + /* test */ + PropertyBag properties = findingRegion.getProperties(); + Map additionalProperties = properties.getAdditionalProperties(); + + assertEquals(1, additionalProperties.size()); + assertEquals(categorization.getValidationFailedSeverity(), additionalProperties.get(SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey())); + } + + @Test + void validation_result_with_no_validation_configured_results_in_default_categorization() { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.NO_VALIDATION_CONFIGURED); + + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + categorization.setDefaultSeverity("medium"); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, categorization); + + /* test */ + PropertyBag properties = findingRegion.getProperties(); + Map additionalProperties = properties.getAdditionalProperties(); + + assertEquals(1, additionalProperties.size()); + assertEquals(categorization.getDefaultSeverity(), additionalProperties.get(SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey())); + } + + @Test + void validation_result_with_sarif_snippet_not_set_results_in_default_categorization() { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.SARIF_SNIPPET_NOT_SET); + + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + categorization.setDefaultSeverity("medium"); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, categorization); + + /* test */ + PropertyBag properties = findingRegion.getProperties(); + Map additionalProperties = properties.getAdditionalProperties(); + + assertEquals(1, additionalProperties.size()); + assertEquals(categorization.getDefaultSeverity(), additionalProperties.get(SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey())); + } + + @Test + void validation_empty_results_in_default_categorization() { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + categorization.setDefaultSeverity("medium"); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, categorization); + + /* test */ + PropertyBag properties = findingRegion.getProperties(); + Map additionalProperties = properties.getAdditionalProperties(); + + assertEquals(1, additionalProperties.size()); + assertEquals(categorization.getDefaultSeverity(), additionalProperties.get(SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey())); + } + + @Test + void validation_result_valid_results_in_severity_value_is_null() throws MalformedURLException { + /* prepare */ + Region findingRegion = new Region(); + SecretValidationResult validationResult = new SecretValidationResult(); + validationResult.setValidationStatus(SecretValidationStatus.VALID); + + // we do not configure a successful validation category here + // this should not happen because we create the validation config file step by + // step, + // but we need to make sure this will not fail in any case + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + categorization.setValidationFailedSeverity("low"); + + /* execute */ + serviceToTest.categorizeFindingByRegion(validationResult, findingRegion, categorization); + + /* test */ + PropertyBag properties = findingRegion.getProperties(); + Map additionalProperties = properties.getAdditionalProperties(); + + assertEquals(1, additionalProperties.size()); + assertNull(additionalProperties.get(SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey())); + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactoryTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactoryTest.java new file mode 100644 index 0000000000..083ef07156 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionContextFactoryTest.java @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.File; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.mercedesbenz.sechub.wrapper.secret.validator.properties.SecretValidatorPDSJobResult; +import com.mercedesbenz.sechub.wrapper.secret.validator.properties.SecretValidatorProperties; + +class SecretValidatorExecutionContextFactoryTest { + + private SecretValidatorExecutionContextFactory factoryToTest; + + @BeforeEach + void beforeEach() { + factoryToTest = new SecretValidatorExecutionContextFactory(); + } + + @Test + void not_existing_pds_job_result_file_throws_exception() { + /* prepare */ + File notExisting = mock(File.class); + when(notExisting.exists()).thenReturn(false); + SecretValidatorPDSJobResult secretValidatorPDSJobResult = new SecretValidatorPDSJobResult(); + secretValidatorPDSJobResult.setFile(notExisting); + + factoryToTest.pdsResult = secretValidatorPDSJobResult; + + /* execute + test */ + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> factoryToTest.create()); + assertEquals("PDS job result file: " + notExisting + " does not exist!", exception.getMessage()); + } + + @Test + void not_readable_pds_job_result_file_throws_exception() { + /* prepare */ + File notReadable = mock(File.class); + when(notReadable.exists()).thenReturn(true); + when(notReadable.canRead()).thenReturn(false); + SecretValidatorPDSJobResult secretValidatorPDSJobResult = new SecretValidatorPDSJobResult(); + secretValidatorPDSJobResult.setFile(notReadable); + + factoryToTest.pdsResult = secretValidatorPDSJobResult; + + /* execute + test */ + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> factoryToTest.create()); + assertEquals("PDS job result file: " + notReadable + " is not readable!", exception.getMessage()); + } + + @Test + void invalid_sarif_pds_job_result_file_throws_exception() { + /* prepare */ + File invalidFile = new File("src/test/resources/config-test-files/invalid-files/invalid-sarif.txt"); + SecretValidatorPDSJobResult secretValidatorPDSJobResult = new SecretValidatorPDSJobResult(); + secretValidatorPDSJobResult.setFile(invalidFile); + + factoryToTest.pdsResult = secretValidatorPDSJobResult; + + /* execute + test */ + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> factoryToTest.create()); + assertEquals("Creating SARIF report model from: " + invalidFile + " failed!", exception.getMessage()); + } + + @Test + void not_existing_secret_validator_config_file_throws_exception() { + /* prepare */ + // we need a valid Sarif report because the pds job result is read first + File validFile = new File("src/test/resources/config-test-files/valid-files/test-result.txt"); + SecretValidatorPDSJobResult secretValidatorPDSJobResult = new SecretValidatorPDSJobResult(); + secretValidatorPDSJobResult.setFile(validFile); + + File notExisting = mock(File.class); + when(notExisting.exists()).thenReturn(false); + SecretValidatorProperties properties = new SecretValidatorProperties(); + properties.setConfigFile(notExisting); + + factoryToTest.pdsResult = secretValidatorPDSJobResult; + factoryToTest.properties = properties; + + /* execute + test */ + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> factoryToTest.create()); + assertEquals("Secret validator configuration file: " + notExisting + " does not exist!", exception.getMessage()); + } + + @Test + void not_readable_secret_validator_config_file_throws_exception() { + /* prepare */ + // we need a valid Sarif report because the pds job result is read first + File validFile = new File("src/test/resources/config-test-files/valid-files/test-result.txt"); + SecretValidatorPDSJobResult secretValidatorPDSJobResult = new SecretValidatorPDSJobResult(); + secretValidatorPDSJobResult.setFile(validFile); + + File notReadable = mock(File.class); + when(notReadable.exists()).thenReturn(true); + when(notReadable.canRead()).thenReturn(false); + SecretValidatorProperties properties = new SecretValidatorProperties(); + properties.setConfigFile(notReadable); + + factoryToTest.pdsResult = secretValidatorPDSJobResult; + factoryToTest.properties = properties; + + /* execute + test */ + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> factoryToTest.create()); + assertEquals("Secret validator configuration file: " + notReadable + " is not readable!", exception.getMessage()); + } + + @Test + void invalid_secret_validator_config_file_throws_exception() { + /* prepare */ + // we need a valid Sarif report because the pds job result is read first + File validFile = new File("src/test/resources/config-test-files/valid-files/test-result.txt"); + SecretValidatorPDSJobResult secretValidatorPDSJobResult = new SecretValidatorPDSJobResult(); + secretValidatorPDSJobResult.setFile(validFile); + + File invalidFile = new File("src/test/resources/config-test-files/invalid-files/invalid-validator-config.txt"); + SecretValidatorProperties properties = new SecretValidatorProperties(); + properties.setConfigFile(invalidFile); + + factoryToTest.pdsResult = secretValidatorPDSJobResult; + factoryToTest.properties = properties; + + /* execute + test */ + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> factoryToTest.create()); + assertEquals("Creating secret validator configuration from: " + invalidFile + " failed!", exception.getMessage()); + } + + @Test + void valid_files_return_valid_execution_context() { + /* prepare */ + // we need a valid Sarif report because the pds job result is read first + File validSarifReportFile = new File("src/test/resources/config-test-files/valid-files/test-result.txt"); + SecretValidatorPDSJobResult secretValidatorPDSJobResult = new SecretValidatorPDSJobResult(); + secretValidatorPDSJobResult.setFile(validSarifReportFile); + + File validSecretValidatorCOnfigFile = new File("src/test/resources/config-test-files/valid-files/test-config.json"); + SecretValidatorProperties properties = new SecretValidatorProperties(); + properties.setConfigFile(validSecretValidatorCOnfigFile); + + factoryToTest.pdsResult = secretValidatorPDSJobResult; + factoryToTest.properties = properties; + + /* execute */ + SecretValidatorExecutionContext secretValidatorExecutionContext = factoryToTest.create(); + + assertNotNull(secretValidatorExecutionContext); + assertNotNull(secretValidatorExecutionContext.getSarifReport()); + assertEquals(1, secretValidatorExecutionContext.getValidatorConfiguration().size()); + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionServiceTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionServiceTest.java new file mode 100644 index 0000000000..4a809790bd --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorExecutionServiceTest.java @@ -0,0 +1,280 @@ +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.mercedesbenz.sechub.commons.model.JSONConverter; +import com.mercedesbenz.sechub.test.TestFileReader; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorCategorization; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorConfigurationModel; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorConfigurationModelList; +import com.mercedesbenz.sechub.wrapper.secret.validator.support.SarifValidationSupport; + +import de.jcup.sarif_2_1_0.model.Location; +import de.jcup.sarif_2_1_0.model.Result; +import de.jcup.sarif_2_1_0.model.Run; +import de.jcup.sarif_2_1_0.model.SarifSchema210; + +class SecretValidatorExecutionServiceTest { + + private SecretValidatorExecutionService serviceToTest; + + private SecretValidatorExecutionContextFactory contextFactory; + private SecretValidationService validationService; + private SecretValidatorCategorizationService categorizationService; + private SarifValidationSupport sarifValidationSupport; + + @BeforeEach + void beforeEach() { + serviceToTest = new SecretValidatorExecutionService(); + + contextFactory = mock(SecretValidatorExecutionContextFactory.class); + validationService = mock(SecretValidationService.class); + categorizationService = mock(SecretValidatorCategorizationService.class); + sarifValidationSupport = mock(SarifValidationSupport.class); + + serviceToTest.contextFactory = contextFactory; + serviceToTest.validationService = validationService; + serviceToTest.categorizationService = categorizationService; + serviceToTest.sarifValidationSupport = sarifValidationSupport; + } + + @Test + void finding_cannot_be_validated_results_in_validation_and_categorization_never_being_called() { + SarifSchema210 report = createEmptySarifReport(); + + @SuppressWarnings("unchecked") + Map ruleConfigurations = mock(Map.class); + when(ruleConfigurations.get(any())).thenReturn(null); + + SecretValidatorExecutionContext executionContext = SecretValidatorExecutionContext.builder().setSarifReport(report) + .setValidatorConfiguration(ruleConfigurations).setTrustAllCertificates(true).build(); + when(contextFactory.create()).thenReturn(executionContext); + + when(sarifValidationSupport.findingCanBeValidated(any())).thenReturn(false); + + /* execute */ + serviceToTest.execute(); + + /* test */ + verify(contextFactory, times(1)).create(); + verify(validationService, never()).validateFindingByRegion(any(), any(), anyBoolean()); + verify(categorizationService, never()).categorizeFindingByRegion(any(), any(), any()); + verify(sarifValidationSupport, times(1)).findingCanBeValidated(any()); + } + + @Test + void empty_config_map_results_in_validation_and_categorization_never_being_called() { + /* prepare */ + SarifSchema210 report = createEmptySarifReport(); + + @SuppressWarnings("unchecked") + Map ruleConfigurations = mock(Map.class); + when(ruleConfigurations.get(any())).thenReturn(null); + + SecretValidatorExecutionContext executionContext = SecretValidatorExecutionContext.builder().setSarifReport(report) + .setValidatorConfiguration(ruleConfigurations).setTrustAllCertificates(true).build(); + when(contextFactory.create()).thenReturn(executionContext); + + when(sarifValidationSupport.findingCanBeValidated(any())).thenReturn(true); + + /* execute */ + serviceToTest.execute(); + + /* test */ + verify(contextFactory, times(1)).create(); + verify(validationService, never()).validateFindingByRegion(any(), any(), anyBoolean()); + verify(categorizationService, never()).categorizeFindingByRegion(any(), any(), any()); + verify(sarifValidationSupport, times(1)).findingCanBeValidated(any()); + } + + @Test + void categorization_of_config_is_null_results_in_validation_and_categorization_never_being_called() { + SarifSchema210 report = createEmptySarifReport(); + + SecretValidatorConfigurationModel config = new SecretValidatorConfigurationModel(); + config.setCategorization(null); + + @SuppressWarnings("unchecked") + Map ruleConfigurations = mock(Map.class); + when(ruleConfigurations.get(any())).thenReturn(config); + + SecretValidatorExecutionContext executionContext = SecretValidatorExecutionContext.builder().setSarifReport(report) + .setValidatorConfiguration(ruleConfigurations).setTrustAllCertificates(true).build(); + when(contextFactory.create()).thenReturn(executionContext); + + when(sarifValidationSupport.findingCanBeValidated(any())).thenReturn(true); + + /* execute */ + serviceToTest.execute(); + + /* test */ + verify(contextFactory, times(1)).create(); + verify(validationService, never()).validateFindingByRegion(any(), any(), anyBoolean()); + verify(categorizationService, never()).categorizeFindingByRegion(any(), any(), any()); + verify(sarifValidationSupport, times(1)).findingCanBeValidated(any()); + } + + @Test + void categorization_of_config_is_empty_results_in_validation_and_categorization_never_being_called() { + SarifSchema210 report = createEmptySarifReport(); + + SecretValidatorConfigurationModel config = new SecretValidatorConfigurationModel(); + SecretValidatorCategorization categorization = new SecretValidatorCategorization(); + config.setCategorization(categorization); + + @SuppressWarnings("unchecked") + Map ruleConfigurations = mock(Map.class); + when(ruleConfigurations.get(any())).thenReturn(config); + + SecretValidatorExecutionContext executionContext = SecretValidatorExecutionContext.builder().setSarifReport(report) + .setValidatorConfiguration(ruleConfigurations).setTrustAllCertificates(true).build(); + when(contextFactory.create()).thenReturn(executionContext); + + when(sarifValidationSupport.findingCanBeValidated(any())).thenReturn(true); + + /* execute */ + serviceToTest.execute(); + + /* test */ + verify(contextFactory, times(1)).create(); + verify(validationService, never()).validateFindingByRegion(any(), any(), anyBoolean()); + verify(categorizationService, never()).categorizeFindingByRegion(any(), any(), any()); + verify(sarifValidationSupport, times(1)).findingCanBeValidated(any()); + } + + @Test + void finding_location_cannot_be_validated_results_in_validation_and_categorization_never_being_called() { + SarifSchema210 report = createEmptySarifReport(); + + SecretValidatorConfigurationModel config = new SecretValidatorConfigurationModel(); + SecretValidatorCategorization categorization = mock(SecretValidatorCategorization.class); + categorization.setDefaultSeverity("high"); + config.setCategorization(categorization); + + @SuppressWarnings("unchecked") + Map ruleConfigurations = mock(Map.class); + when(ruleConfigurations.get(any())).thenReturn(config); + + SecretValidatorExecutionContext executionContext = SecretValidatorExecutionContext.builder().setSarifReport(report) + .setValidatorConfiguration(ruleConfigurations).setTrustAllCertificates(true).build(); + when(contextFactory.create()).thenReturn(executionContext); + + when(sarifValidationSupport.findingCanBeValidated(any())).thenReturn(true); + when(sarifValidationSupport.findingLocationCanBeValidated(any())).thenReturn(false); + + /* execute */ + serviceToTest.execute(); + + /* test */ + verify(contextFactory, times(1)).create(); + verify(validationService, never()).validateFindingByRegion(any(), any(), anyBoolean()); + verify(categorizationService, never()).categorizeFindingByRegion(any(), any(), any()); + verify(sarifValidationSupport, times(1)).findingCanBeValidated(any()); + verify(sarifValidationSupport, times(1)).findingLocationCanBeValidated(any()); + } + + @Test + void valid_config_and_valid_sarif_report_results_in_validation_and_categorization_being_called_for_configured_rule() { + /* prepare */ + SecretValidatorExecutionContext executionContext = createValidExecutionContext(); + when(contextFactory.create()).thenReturn(executionContext); + + SecretValidationResult secretValidationResult = new SecretValidationResult(); + when(validationService.validateFindingByRegion(any(), any(), anyBoolean())).thenReturn(secretValidationResult); + + doNothing().when(categorizationService).categorizeFindingByRegion(any(), any(), any()); + + when(sarifValidationSupport.findingCanBeValidated(any())).thenReturn(true); + when(sarifValidationSupport.findingLocationCanBeValidated(any())).thenReturn(true); + + /* execute */ + serviceToTest.execute(); + + /* test */ + verify(contextFactory, times(1)).create(); + verify(validationService, times(6)).validateFindingByRegion(any(), any(), anyBoolean()); + verify(categorizationService, times(6)).categorizeFindingByRegion(any(), any(), any()); + verify(sarifValidationSupport, times(6)).findingCanBeValidated(any()); + verify(sarifValidationSupport, times(6)).findingLocationCanBeValidated(any()); + } + + private SecretValidatorExecutionContext createValidExecutionContext() { + SarifSchema210 report = createSarifReport(new File("src/test/resources/config-test-files/valid-files/test-result.txt")); + + Map ruleConfigurations = createRuleConfigurations( + new File("src/test/resources/config-test-files/valid-files/test-config.json")); + + /* @formatter:off */ + return SecretValidatorExecutionContext.builder() + .setTrustAllCertificates(true) + .setSarifReport(report) + .setValidatorConfiguration(ruleConfigurations) + .build(); + /* @formatter:on */ + } + + private SarifSchema210 createSarifReport(File file) { + try { + String sarifReportJson = TestFileReader.loadTextFile(file); + return JSONConverter.get().fromJSON(SarifSchema210.class, sarifReportJson); + } catch (Exception e) { + throw new IllegalStateException("Creating SARIF report model from: " + file + " failed!", e); + } + } + + private Map createRuleConfigurations(File file) { + try { + String validatorConfigJson = TestFileReader.loadTextFile(file); + SecretValidatorConfigurationModelList configurationDataList = JSONConverter.get().fromJSON(SecretValidatorConfigurationModelList.class, + validatorConfigJson); + + Map ruleConfigurations = new HashMap<>(); + for (SecretValidatorConfigurationModel configData : configurationDataList.getValidatorConfigList()) { + ruleConfigurations.put(configData.getRuleId(), configData); + } + return ruleConfigurations; + } catch (Exception e) { + throw new IllegalStateException("Creating secret validator configuration from: " + file + " failed!", e); + } + } + + private SarifSchema210 createEmptySarifReport() { + List runs = new ArrayList<>(); + + Run run = new Run(); + + List results = new ArrayList<>(); + Result result = new Result(); + + ArrayList locations = new ArrayList<>(); + locations.add(new Location()); + + result.setLocations(locations); + results.add(result); + run.setResults(results); + ; + runs.add(run); + + SarifSchema210 report = new SarifSchema210(); + report.setRuns(runs); + + return report; + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestServiceTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestServiceTest.java new file mode 100644 index 0000000000..71b0677310 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/execution/SecretValidatorWebRequestServiceTest.java @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.execution; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.http.HttpClient; +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorRequest; +import com.mercedesbenz.sechub.wrapper.secret.validator.model.SecretValidatorRequestHeader; +import com.mercedesbenz.sechub.wrapper.secret.validator.support.SecretValidatorHttpClientFactory; + +class SecretValidatorWebRequestServiceTest { + + private SecretValidatorWebRequestService serviceTotest; + + private SecretValidatorHttpClientFactory httpClientFactory; + private ResponseValidationService responseValidationService; + + @BeforeEach + void beforeEach() { + serviceTotest = new SecretValidatorWebRequestService(); + httpClientFactory = new SecretValidatorHttpClientFactory(); + + httpClientFactory = mock(SecretValidatorHttpClientFactory.class); + responseValidationService = mock(ResponseValidationService.class); + + serviceTotest.httpClientFactory = httpClientFactory; + serviceTotest.responseValidationService = responseValidationService; + } + + @Test + void no_finding_snippet_text_available_results_in_finding_being_skipped_from_validation() { + /* execute */ + SecretValidationResult validationResult = serviceTotest.validateFinding(null, new ArrayList<>(), true); + + /* test */ + assertEquals(SecretValidationStatus.SARIF_SNIPPET_NOT_SET, validationResult.getValidationStatus()); + } + + @Test + void no_requests_defined_results_in_finding_being_skipped_from_validation() { + /* execute */ + SecretValidationResult validationResult = serviceTotest.validateFinding("not-empty", new ArrayList<>(), true); + + /* test */ + assertEquals(SecretValidationStatus.NO_VALIDATION_CONFIGURED, validationResult.getValidationStatus()); + } + + @Test + void request_config_inside_list_is_null_results_request_will_be_skipped() { + /* prepare */ + ArrayList requests = new ArrayList<>(); + requests.add(null); + + /* execute */ + SecretValidationResult validationResult = serviceTotest.validateFinding("not-empty", requests, true); + + /* test */ + // no validation request was performed ends up with the following status, only + // if at least 1 request was performed, the finding could be marked as invalid. + assertEquals(SecretValidationStatus.NO_VALIDATION_CONFIGURED, validationResult.getValidationStatus()); + } + + @Test + void request_url_is_null_results_request_will_be_skipped() { + /* prepare */ + ArrayList requests = new ArrayList<>(); + requests.add(new SecretValidatorRequest()); + + /* execute */ + SecretValidationResult validationResult = serviceTotest.validateFinding("no-empty", requests, true); + + /* test */ + // no validation request was performed ends up with the following status, only + // if at least 1 request was performed, the finding could be marked as invalid. + assertEquals(SecretValidationStatus.NO_VALIDATION_CONFIGURED, validationResult.getValidationStatus()); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void proxy_required_calls_the_correct_http_client_results_validation_result(boolean expectedValidation) throws IOException, InterruptedException { + /* prepare */ + List requests = createListOfRequests(true); + + HttpClient proxyHttpClient = mock(HttpClient.class); + when(proxyHttpClient.send(any(), any())).thenReturn(null); + + when(httpClientFactory.createProxyHttpClient(anyBoolean())).thenReturn(proxyHttpClient); + + when(responseValidationService.isValidResponse(any(), any())).thenReturn(expectedValidation); + + /* execute */ + SecretValidationResult validationResult = serviceTotest.validateFinding("no-empty", requests, true); + + /* test */ + if (expectedValidation) { + assertEquals(SecretValidationStatus.VALID, validationResult.getValidationStatus()); + assertEquals("http://example.com", validationResult.getValidatedByUrl()); + } else { + assertEquals(SecretValidationStatus.INVALID, validationResult.getValidationStatus()); + } + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void no_proxy_required_calls_the_correct_http_client_results_validation_result(boolean expectedValidation) throws IOException, InterruptedException { + /* prepare */ + List requests = createListOfRequests(false); + + HttpClient directHttpClient = mock(HttpClient.class); + when(directHttpClient.send(any(), any())).thenReturn(null); + + when(httpClientFactory.createDirectHttpClient(anyBoolean())).thenReturn(directHttpClient); + + when(responseValidationService.isValidResponse(any(), any())).thenReturn(expectedValidation); + + /* execute */ + SecretValidationResult validationResult = serviceTotest.validateFinding("no-empty", requests, true); + + /* test */ + if (expectedValidation) { + assertEquals(SecretValidationStatus.VALID, validationResult.getValidationStatus()); + assertEquals("http://example.com", validationResult.getValidatedByUrl()); + } else { + assertEquals(SecretValidationStatus.INVALID, validationResult.getValidationStatus()); + } + } + + private List createListOfRequests(boolean proxyRequired) throws MalformedURLException { + ArrayList requests = new ArrayList<>(); + SecretValidatorRequest secretValidatorRequest = new SecretValidatorRequest(); + secretValidatorRequest.setProxyRequired(proxyRequired); + secretValidatorRequest.setUrl(new URL("http://example.com")); + List headers = new ArrayList<>(); + SecretValidatorRequestHeader header = new SecretValidatorRequestHeader(); + header.setName("Authorization"); + headers.add(header); + secretValidatorRequest.setHeaders(headers); + requests.add(secretValidatorRequest); + return requests; + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelListTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelListTest.java new file mode 100644 index 0000000000..d443ad6705 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/model/SecretValidatorConfigurationModelListTest.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.model; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.mercedesbenz.sechub.commons.model.JSONConverter; + +class SecretValidatorConfigurationModelListTest { + + @Test + void test() { + /* prepare */ + String json = """ + { + "validatorConfigList" : [ { + "ruleId" : "rule-id", + "categorization" : { + "defaultSeverity" : "high", + "validationFailedSeverity" : "medium", + "validationSuccessSeverity" : "critical" + }, + "requests" : [ { + "url" : "https://api.example.com", + "proxyRequired" : true, + "headers" : [ { + "name" : "Authorization", + "valuePrefix" : "Bearer" + } ], + "expectedResponse" : { + "httpStatus" : 200, + "contains" : { + "allOf" : [ "is", "there" ], + "oneOf" : [ "success" ] + } + } + } ] + } ] + } + """; + + String expected = "{\"validatorConfigList\":[{\"ruleId\":\"rule-id\",\"categorization\":{\"defaultSeverity\":\"high\",\"validationFailedSeverity\":\"medium\",\"validationSuccessSeverity\":\"critical\"}," + + "\"requests\":[{\"url\":\"https://api.example.com\",\"proxyRequired\":true,\"headers\":[{\"name\":\"Authorization\",\"valuePrefix\":\"Bearer\"}]," + + "\"expectedResponse\":{\"httpStatus\":200,\"contains\":{\"allOf\":[\"is\",\"there\"],\"oneOf\":[\"success\"]}}}]}]}"; + + /* execute */ + SecretValidatorConfigurationModelList fromJson = JSONConverter.get().fromJSON(SecretValidatorConfigurationModelList.class, json); + String toJson = JSONConverter.get().toJSON(fromJson); + + /* test */ + assertEquals(expected, toJson); + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorConfigurationSpringBootTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorConfigurationSpringBootTest.java new file mode 100644 index 0000000000..2d303778f9 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/properties/SecretValidatorConfigurationSpringBootTest.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.properties; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@SpringBootTest(classes = { SecretValidatorProperties.class, SecretValidatorPDSJobResult.class }) +@ExtendWith(SpringExtension.class) +@EnableConfigurationProperties +@TestPropertySource(properties = { "secret.validator.config-file=src/test/resources/config-test-files/valid-files/test-config.json", + "secret.validator.trust-all-certificates=false", "pds.job.result.file=src/test/resources/config-test-files/valid-files/test-result.txt" }) +class SecretValidatorConfigurationSpringBootTest { + + @Autowired + private SecretValidatorProperties properties; + + @Autowired + private SecretValidatorPDSJobResult pdsJobResult; + + @Test + void properties_are_created_correctly() { + /* test */ + + // check if all SecretValidatorProperties are as expected + assertFalse(properties.isTrustAllCertificates()); + assertEquals("src/test/resources/config-test-files/valid-files/test-config.json", properties.getConfigFile().toString()); + + // check if the PDS job result file is as expected + assertEquals("src/test/resources/config-test-files/valid-files/test-result.txt", pdsJobResult.getFile().toString()); + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupportTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupportTest.java new file mode 100644 index 0000000000..1b944bc0fd --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SarifValidationSupportTest.java @@ -0,0 +1,122 @@ +package com.mercedesbenz.sechub.wrapper.secret.validator.support; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import de.jcup.sarif_2_1_0.model.Location; +import de.jcup.sarif_2_1_0.model.PhysicalLocation; +import de.jcup.sarif_2_1_0.model.Region; +import de.jcup.sarif_2_1_0.model.Result; + +class SarifValidationSupportTest { + + private SarifValidationSupport supportToTest = new SarifValidationSupport(); + + @Test + void finding_null_returns_false() { + /* execute */ + boolean findingCanBeValidated = supportToTest.findingCanBeValidated(null); + + /* test */ + assertFalse(findingCanBeValidated); + } + + @Test + void finding_locations_is_null_returns_false() { + /* prepare */ + Result finding = new Result(); + finding.setLocations(null); + + /* execute */ + boolean findingCanBeValidated = supportToTest.findingCanBeValidated(finding); + + /* test */ + assertFalse(findingCanBeValidated); + } + + @Test + void finding_locations_is_empty_returns_false() { + /* prepare */ + Result finding = new Result(); + finding.setLocations(new ArrayList<>()); + + /* execute */ + boolean findingCanBeValidated = supportToTest.findingCanBeValidated(finding); + + /* test */ + assertFalse(findingCanBeValidated); + } + + @Test + void finding_locations_conatins_one_location_object_returns_true() { + /* prepare */ + List locations = new ArrayList<>(); + locations.add(new Location()); + Result finding = new Result(); + finding.setLocations(locations); + + /* execute */ + boolean findingCanBeValidated = supportToTest.findingCanBeValidated(finding); + + /* test */ + assertTrue(findingCanBeValidated); + } + + @Test + void finding_location_is_null_returns_false() { + /* execute */ + boolean findingCanBeValidated = supportToTest.findingLocationCanBeValidated(null); + + /* test */ + assertFalse(findingCanBeValidated); + } + + @Test + void finding_location_physical_location_is_null_returns_false() { + /* prepare */ + Location location = new Location(); + location.setPhysicalLocation(null); + + /* execute */ + boolean findingCanBeValidated = supportToTest.findingLocationCanBeValidated(location); + + /* test */ + assertFalse(findingCanBeValidated); + } + + @Test + void finding_location_physical_location_region_is_null_returns_false() { + /* prepare */ + PhysicalLocation physicalLocation = new PhysicalLocation(); + physicalLocation.setRegion(null); + Location location = new Location(); + location.setPhysicalLocation(physicalLocation); + + /* execute */ + boolean findingCanBeValidated = supportToTest.findingLocationCanBeValidated(location); + + /* test */ + assertFalse(findingCanBeValidated); + } + + @Test + void finding_location_physical_location_region_is_not_null_returns_false() { + /* prepare */ + PhysicalLocation physicalLocation = new PhysicalLocation(); + physicalLocation.setRegion(new Region()); + Location location = new Location(); + location.setPhysicalLocation(physicalLocation); + + /* execute */ + boolean findingCanBeValidated = supportToTest.findingLocationCanBeValidated(location); + + /* test */ + assertTrue(findingCanBeValidated); + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactoryTest.java b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactoryTest.java new file mode 100644 index 0000000000..b577f34141 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/java/com/mercedesbenz/sechub/wrapper/secret/validator/support/SecretValidatorHttpClientFactoryTest.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.wrapper.secret.validator.support; + +import static org.junit.Assert.assertTrue; + +import java.net.http.HttpClient; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class SecretValidatorHttpClientFactoryTest { + + private SecretValidatorHttpClientFactory factoryToTest = new SecretValidatorHttpClientFactory(); + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void create_proxy_http_client_returns_expected_http_client(boolean trustAllCertificates) { + /* execute */ + HttpClient proxyHttpClient = factoryToTest.createProxyHttpClient(trustAllCertificates); + + /* test */ + assertTrue(proxyHttpClient.proxy().isPresent()); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void create_direct_http_client_returns_expected_http_client(boolean trustAllCertificates) { + /* execute */ + HttpClient proxyHttpClient = factoryToTest.createDirectHttpClient(trustAllCertificates); + + /* test */ + assertTrue(proxyHttpClient.proxy().isEmpty()); + } + +} diff --git a/sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-sarif.txt b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-sarif.txt new file mode 100644 index 0000000000..fb11c48106 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-sarif.txt @@ -0,0 +1 @@ +not valid sarif \ No newline at end of file diff --git a/sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-validator-config.txt b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-validator-config.txt new file mode 100644 index 0000000000..a6621a3896 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/invalid-files/invalid-validator-config.txt @@ -0,0 +1 @@ +invalid file \ No newline at end of file diff --git a/sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-config.json b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-config.json new file mode 100644 index 0000000000..9bdf28c27e --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-config.json @@ -0,0 +1,25 @@ +{ + "validatorConfigList" : [ { + "ruleId" : "generic-api-key", + "categorization" : { + "defaultSeverity" : "high", + "validationFailedSeverity" : "medium", + "validationSuccessSeverity" : "critical" + }, + "requests" : [ { + "proxyRequired" : false, + "url" : "https://localhost", + "headers" : [ { + "name" : "Authorization", + "valuePrefix" : "Bearer" + } ], + "expectedResponse" : { + "httpStatus" : 200, + "contains" : { + "allOf" : [ "is", "there" ], + "oneOf" : [ "success" ] + } + } + } ] + } ] +} \ No newline at end of file diff --git a/sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-result.txt b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-result.txt new file mode 100644 index 0000000000..ba37047594 --- /dev/null +++ b/sechub-wrapper-secret-validator/src/test/resources/config-test-files/valid-files/test-result.txt @@ -0,0 +1,956 @@ +{ + "$schema" : "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json", + "version" : "2.1.0", + "runs" : [ { + "tool" : { + "driver" : { + "name" : "gitleaks", + "semanticVersion" : "v8.0.0", + "rules" : [ { + "id" : "adafruit-api-key", + "name" : "Adafruit API Key", + "shortDescription" : { + "text" : "(?i)(?:adafruit)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "adobe-client-id", + "name" : "Adobe Client ID (Oauth Web)", + "shortDescription" : { + "text" : "(?i)(?:adobe)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "adobe-client-secret", + "name" : "Adobe Client Secret", + "shortDescription" : { + "text" : "(?i)\\b((p8e-)(?i)[a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "age secret key", + "name" : "Age secret key", + "shortDescription" : { + "text" : "AGE-SECRET-KEY-1[QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L]{58}" + } + }, { + "id" : "airtable-api-key", + "name" : "Airtable API Key", + "shortDescription" : { + "text" : "(?i)(?:airtable)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{17})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "algolia-api-key", + "name" : "Algolia API Key", + "shortDescription" : { + "text" : "(?i)(?:algolia)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "alibaba-access-key-id", + "name" : "Alibaba AccessKey ID", + "shortDescription" : { + "text" : "(?i)\\b((LTAI)(?i)[a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "alibaba-secret-key", + "name" : "Alibaba Secret Key", + "shortDescription" : { + "text" : "(?i)(?:alibaba)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "asana-client-id", + "name" : "Asana Client ID", + "shortDescription" : { + "text" : "(?i)(?:asana)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "asana-client-secret", + "name" : "Asana Client Secret", + "shortDescription" : { + "text" : "(?i)(?:asana)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "atlassian-api-token", + "name" : "Atlassian API token", + "shortDescription" : { + "text" : "(?i)(?:atlassian|confluence|jira)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "aws-access-token", + "name" : "AWS", + "shortDescription" : { + "text" : "(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}" + } + }, { + "id" : "bitbucket-client-id", + "name" : "BitBucket Client ID", + "shortDescription" : { + "text" : "(?i)(?:bitbucket)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bitbucket-client-secret", + "name" : "BitBucket Client Secret", + "shortDescription" : { + "text" : "(?i)(?:bitbucket)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bittrex-access-key", + "name" : "Bittrex Access Key", + "shortDescription" : { + "text" : "(?i)(?:bittrex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bittrex-secret-key", + "name" : "Bittrex Secret Key", + "shortDescription" : { + "text" : "(?i)(?:bittrex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "beamer-api-token", + "name" : "Beamer API token", + "shortDescription" : { + "text" : "(?i)(?:beamer)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(b_[a-z0-9=_\\-]{44})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "codecov-access-token", + "name" : "Codecov Access Token", + "shortDescription" : { + "text" : "(?i)(?:codecov)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "coinbase-access-token", + "name" : "Coinbase Access Token", + "shortDescription" : { + "text" : "(?i)(?:coinbase)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "clojars-api-token", + "name" : "Clojars API token", + "shortDescription" : { + "text" : "(?i)(CLOJARS_)[a-z0-9]{60}" + } + }, { + "id" : "confluent-access-token", + "name" : "Confluent Access Token", + "shortDescription" : { + "text" : "(?i)(?:confluent)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "confluent-secret-key", + "name" : "Confluent Secret Key", + "shortDescription" : { + "text" : "(?i)(?:confluent)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "contentful-delivery-api-token", + "name" : "Contentful delivery API token", + "shortDescription" : { + "text" : "(?i)(?:contentful)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{43})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "databricks-api-token", + "name" : "Databricks API token", + "shortDescription" : { + "text" : "(?i)\\b(dapi[a-h0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "datadog-access-token", + "name" : "Datadog Access Token", + "shortDescription" : { + "text" : "(?i)(?:datadog)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-api-token", + "name" : "Discord API key", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-client-id", + "name" : "Discord client ID", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{18})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-client-secret", + "name" : "Discord client secret", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "doppler-api-token", + "name" : "Doppler API token", + "shortDescription" : { + "text" : "(dp\\.pt\\.)(?i)[a-z0-9]{43}" + } + }, { + "id" : "dropbox-api-token", + "name" : "Dropbox API secret", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{15})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "dropbox-long-lived-api-token", + "name" : "Dropbox long lived API token", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{11}(AAAAAAAAAA)[a-z0-9\\-_=]{43})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "dropbox-short-lived-api-token", + "name" : "Dropbox short lived API token", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(sl\\.[a-z0-9\\-=_]{135})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "droneci-access-token", + "name" : "Droneci Access Token", + "shortDescription" : { + "text" : "(?i)(?:droneci)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "duffel-api-token", + "name" : "Duffel API token", + "shortDescription" : { + "text" : "duffel_(test|live)_(?i)[a-z0-9_\\-=]{43}" + } + }, { + "id" : "dynatrace-api-token", + "name" : "Dynatrace API token", + "shortDescription" : { + "text" : "dt0c01\\.(?i)[a-z0-9]{24}\\.[a-z0-9]{64}" + } + }, { + "id" : "easypost-api-token", + "name" : "EasyPost API token", + "shortDescription" : { + "text" : "EZAK(?i)[a-z0-9]{54}" + } + }, { + "id" : "easypost-test-api-token", + "name" : "EasyPost test API token", + "shortDescription" : { + "text" : "EZTK(?i)[a-z0-9]{54}" + } + }, { + "id" : "etsy-access-token", + "name" : "Etsy Access Token", + "shortDescription" : { + "text" : "(?i)(?:etsy)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "facebook", + "name" : "facebook", + "shortDescription" : { + "text" : "(?i)(?:facebook)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "fastly-api-token", + "name" : "Fastly API key", + "shortDescription" : { + "text" : "(?i)(?:fastly)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finicity-client-secret", + "name" : "Finicity Client Secret", + "shortDescription" : { + "text" : "(?i)(?:finicity)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finicity-api-token", + "name" : "Finicity API token", + "shortDescription" : { + "text" : "(?i)(?:finicity)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "flickr-access-token", + "name" : "Flickr Access Token", + "shortDescription" : { + "text" : "(?i)(?:flickr)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finnhub-access-token", + "name" : "Finnhub Access Token", + "shortDescription" : { + "text" : "(?i)(?:finnhub)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "flutterwave-public-key", + "name" : "Finicity Public Key", + "shortDescription" : { + "text" : "FLWPUBK_TEST-(?i)[a-h0-9]{32}-X" + } + }, { + "id" : "flutterwave-secret-key", + "name" : "Flutterwave Secret Key", + "shortDescription" : { + "text" : "FLWSECK_TEST-(?i)[a-h0-9]{32}-X" + } + }, { + "id" : "flutterwave-encryption-key", + "name" : "Flutterwave Encryption Key", + "shortDescription" : { + "text" : "FLWSECK_TEST-(?i)[a-h0-9]{12}" + } + }, { + "id" : "frameio-api-token", + "name" : "Frame.io API token", + "shortDescription" : { + "text" : "fio-u-(?i)[a-z0-9\\-_=]{64}" + } + }, { + "id" : "freshbooks-access-token", + "name" : "Freshbooks Access Token", + "shortDescription" : { + "text" : "(?i)(?:freshbooks)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "gocardless-api-token", + "name" : "GoCardless API token", + "shortDescription" : { + "text" : "(?i)(?:gocardless)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(live_(?i)[a-z0-9\\-_=]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "gcp-api-key", + "name" : "GCP API key", + "shortDescription" : { + "text" : "(?i)\\b(AIza[0-9A-Za-z\\\\-_]{35})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "github-pat", + "name" : "GitHub Personal Access Token", + "shortDescription" : { + "text" : "ghp_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-oauth", + "name" : "GitHub OAuth Access Token", + "shortDescription" : { + "text" : "gho_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-app-token", + "name" : "GitHub App Token", + "shortDescription" : { + "text" : "(ghu|ghs)_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-refresh-token", + "name" : "GitHub Refresh Token", + "shortDescription" : { + "text" : "ghr_[0-9a-zA-Z]{36}" + } + }, { + "id" : "gitlab-pat", + "name" : "Gitlab Personal Access Token", + "shortDescription" : { + "text" : "glpat-[0-9a-zA-Z\\-\\_]{20}" + } + }, { + "id" : "gitter-access-token", + "name" : "Gitter Access Token", + "shortDescription" : { + "text" : "(?i)(?:gitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "hashicorp-tf-api-token", + "name" : "HashiCorp Terraform user/org API token", + "shortDescription" : { + "text" : "(?i)[a-z0-9]{14}\\.atlasv1\\.[a-z0-9\\-_=]{60,70}" + } + }, { + "id" : "heroku-api-key", + "name" : "Heroku API Key", + "shortDescription" : { + "text" : "(?i)(?:heroku)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "hubspot-api-key", + "name" : "HubSpot API Token", + "shortDescription" : { + "text" : "(?i)(?:hubspot)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "intercom-api-key", + "name" : "Intercom API Token", + "shortDescription" : { + "text" : "(?i)(?:intercom)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{60})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kraken-access-token", + "name" : "Kraken Access Token", + "shortDescription" : { + "text" : "(?i)(?:kraken)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9\\/=_\\+\\-]{80,90})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kucoin-access-token", + "name" : "Kucoin Access Token", + "shortDescription" : { + "text" : "(?i)(?:kucoin)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kucoin-secret-key", + "name" : "Kucoin Secret Key", + "shortDescription" : { + "text" : "(?i)(?:kucoin)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "launchdarkly-access-token", + "name" : "Launchdarkly Access Token", + "shortDescription" : { + "text" : "(?i)(?:launchdarkly)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linear-api-key", + "name" : "Linear API Token", + "shortDescription" : { + "text" : "lin_api_(?i)[a-z0-9]{40}" + } + }, { + "id" : "linear-client-secret", + "name" : "Linear Client Secret", + "shortDescription" : { + "text" : "(?i)(?:linear)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linkedin-client-id", + "name" : "LinkedIn Client ID", + "shortDescription" : { + "text" : "(?i)(?:linkedin|linked-in)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{14})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linkedin-client-secret", + "name" : "LinkedIn Client secret", + "shortDescription" : { + "text" : "(?i)(?:linkedin|linked-in)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "lob-api-key", + "name" : "Lob API Key", + "shortDescription" : { + "text" : "(?i)(?:lob)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}((live|test)_[a-f0-9]{35})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "lob-pub-api-key", + "name" : "Lob Publishable API Key", + "shortDescription" : { + "text" : "(?i)(?:lob)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}((test|live)_pub_[a-f0-9]{31})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailchimp-api-key", + "name" : "Mailchimp API key", + "shortDescription" : { + "text" : "(?i)(?:mailchimp)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32}-us20)(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-pub-key", + "name" : "Mailgun public validation key", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(pubkey-[a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-private-api-token", + "name" : "Mailgun private API token", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(key-[a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-signing-key", + "name" : "Mailgun webhook signing key", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-h0-9]{32}-[a-h0-9]{8}-[a-h0-9]{8})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mapbox-api-token", + "name" : "MapBox API token", + "shortDescription" : { + "text" : "(?i)(?:mapbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(pk\\.[a-z0-9]{60}\\.[a-z0-9]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mattermost-access-token", + "name" : "Mattermost Access Token", + "shortDescription" : { + "text" : "(?i)(?:mattermost)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{26})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "messagebird-api-token", + "name" : "MessageBird API token", + "shortDescription" : { + "text" : "(?i)(?:messagebird|message-bird|message_bird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{25})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "messagebird-client-id", + "name" : "MessageBird client ID", + "shortDescription" : { + "text" : "(?i)(?:messagebird|message-bird|message_bird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "netlify-access-token", + "name" : "Netlify Access Token", + "shortDescription" : { + "text" : "(?i)(?:netlify)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{40,46})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-user-api-key", + "name" : "New Relic user API Key", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(NRAK-[a-z0-9]{27})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-user-api-id", + "name" : "New Relic user API ID", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-browser-api-token", + "name" : "New Relic ingest browser API token", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(NRJS-[a-f0-9]{19})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "npm-access-token", + "name" : "npm access token", + "shortDescription" : { + "text" : "(?i)\\b(npm_[a-z0-9]{36})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "nytimes-access-token", + "name" : "Nytimes Access Token", + "shortDescription" : { + "text" : "(?i)(?:nytimes|new-york-times,|newyorktimes)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "okta-access-token", + "name" : "Okta Access Token", + "shortDescription" : { + "text" : "(?i)(?:okta)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{42})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-client-id", + "name" : "Plaid Client ID", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-secret-key", + "name" : "Plaid Secret key", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-api-token", + "name" : "Plaid API Token", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(access-(?:sandbox|development|production)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-password", + "name" : "PlanetScale password", + "shortDescription" : { + "text" : "(?i)\\b(pscale_pw_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-api-token", + "name" : "PlanetScale API token", + "shortDescription" : { + "text" : "(?i)\\b(pscale_tkn_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-oauth-token", + "name" : "PlanetScale OAuth token", + "shortDescription" : { + "text" : "(?i)\\b(pscale_oauth_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "postman-api-token", + "name" : "Postman API token", + "shortDescription" : { + "text" : "(?i)\\b(PMAK-(?i)[a-f0-9]{24}\\-[a-f0-9]{34})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "private-key", + "name" : "Private Key", + "shortDescription" : { + "text" : "(?i)-----BEGIN[ A-Z0-9_-]{0,100}PRIVATE KEY-----[\\s\\S-]*KEY----" + } + }, { + "id" : "pulumi-api-token", + "name" : "Pulumi API token", + "shortDescription" : { + "text" : "(?i)\\b(pul-[a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "pypi-upload-token", + "name" : "PyPI upload token", + "shortDescription" : { + "text" : "pypi-AgEIcHlwaS5vcmc[A-Za-z0-9\\-_]{50,1000}" + } + }, { + "id" : "rubygems-api-token", + "name" : "Rubygem API token", + "shortDescription" : { + "text" : "(?i)\\b(rubygems_[a-f0-9]{48})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "rapidapi-access-token", + "name" : "RapidAPI Access Token", + "shortDescription" : { + "text" : "(?i)(?:rapidapi)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{50})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendbird-access-id", + "name" : "Sendbird Access ID", + "shortDescription" : { + "text" : "(?i)(?:sendbird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendbird-access-token", + "name" : "Sendbird Access Token", + "shortDescription" : { + "text" : "(?i)(?:sendbird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendgrid-api-token", + "name" : "SendGrid API token", + "shortDescription" : { + "text" : "(?i)\\b(SG\\.(?i)[a-z0-9=_\\-\\.]{66})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendinblue-api-token", + "name" : "Sendinblue API token", + "shortDescription" : { + "text" : "(?i)\\b(xkeysib-[a-f0-9]{64}\\-(?i)[a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sentry-access-token", + "name" : "Sentry Access Token", + "shortDescription" : { + "text" : "(?i)(?:sentry)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "shippo-api-token", + "name" : "Shippo API token", + "shortDescription" : { + "text" : "(?i)\\b(shippo_(live|test)_[a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "shopify-access-token", + "name" : "Shopify access token", + "shortDescription" : { + "text" : "shpat_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-custom-access-token", + "name" : "Shopify custom access token", + "shortDescription" : { + "text" : "shpca_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-private-app-access-token", + "name" : "Shopify private app access token", + "shortDescription" : { + "text" : "shppa_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-shared-secret", + "name" : "Shopify shared secret", + "shortDescription" : { + "text" : "shpss_[a-fA-F0-9]{32}" + } + }, { + "id" : "slack-access-token", + "name" : "Slack token", + "shortDescription" : { + "text" : "xox[baprs]-([0-9a-zA-Z]{10,48})" + } + }, { + "id" : "slack-web-hook", + "name" : "Slack Webhook", + "shortDescription" : { + "text" : "https:\\/\\/hooks.slack.com\\/services\\/[A-Za-z0-9+\\/]{44,46}" + } + }, { + "id" : "stripe-access-token", + "name" : "Stripe", + "shortDescription" : { + "text" : "(?i)(sk|pk)_(test|live)_[0-9a-z]{10,32}" + } + }, { + "id" : "square-access-token", + "name" : "Square Access Token", + "shortDescription" : { + "text" : "(?i)\\b(sq0atp-[0-9A-Za-z\\-_]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "squarespace-access-token", + "name" : "Squarespace Access Token", + "shortDescription" : { + "text" : "(?i)(?:squarespace)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sumologic-access-id", + "name" : "SumoLogic Access ID", + "shortDescription" : { + "text" : "(?i)(?:sumo)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{14})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sumologic-access-token", + "name" : "SumoLogic Access Token", + "shortDescription" : { + "text" : "(?i)(?:sumo)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "travisci-access-token", + "name" : "Travis CI Access Token", + "shortDescription" : { + "text" : "(?i)(?:travis)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twilio-api-key", + "name" : "Twilio API Key", + "shortDescription" : { + "text" : "SK[0-9a-fA-F]{32}" + } + }, { + "id" : "twitch-api-token", + "name" : "Twitch API token", + "shortDescription" : { + "text" : "(?i)(?:twitch)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-api-key", + "name" : "Twitter API Key", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{25})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-api-secret", + "name" : "Twitter API Secret", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{50})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-access-token", + "name" : "Twitter Access Token", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{15,25}-[a-zA-Z0-9]{20,40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-access-secret", + "name" : "Twitter Access Secret", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{45})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-bearer-token", + "name" : "Twitter Bearer Token", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(A{22}[a-zA-Z0-9%]{80,100})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "typeform-api-token", + "name" : "Typeform API token", + "shortDescription" : { + "text" : "(?i)(?:typeform)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(tfp_[a-z0-9\\-_\\.=]{59})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-api-key", + "name" : "Yandex API Key", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(AQVN[A-Za-z0-9_\\-]{35,38})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-aws-access-token", + "name" : "Yandex AWS Access Token", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(YC[a-zA-Z0-9_\\-]{38})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-access-token", + "name" : "Yandex Access Token", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(t1\\.[A-Z0-9a-z_-]+[=]{0,2}\\.[A-Z0-9a-z_-]{86}[=]{0,2})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "zendesk-secret-key", + "name" : "Zendesk Secret Key", + "shortDescription" : { + "text" : "(?i)(?:zendesk)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "generic-api-key", + "name" : "Generic API Key", + "shortDescription" : { + "text" : "(?i)(?:key|api|token|secret|client|passwd|password|auth)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-z\\-_.=]{10,150})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + } ] + } + }, + "results" : [ { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/docker-compose.yml." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/docker-compose.yml" + }, + "region" : { + "startLine" : 12, + "startColumn" : 14, + "endLine" : 13, + "endColumn" : 1, + "snippet" : { + "text" : "531486b2bf646636a6a1bba61e78ec4a4a54efbd" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/src/api/application/config/database.php." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/src/api/application/config/database.php" + }, + "region" : { + "startLine" : 80, + "startColumn" : 7, + "endLine" : 80, + "endColumn" : 61, + "snippet" : { + "text" : "531486b2bf646636a6a1bba61e78ec4a4a54efbd" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/web/src/app/thunks/Authentication/ForgotPassword/handleForgotPasswordGetOTPThunk.tsx." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/web/src/app/thunks/Authentication/ForgotPassword/handleForgotPasswordGetOTPThunk.tsx" + }, + "region" : { + "startLine" : 32, + "startColumn" : 14, + "endLine" : 32, + "endColumn" : 56, + "snippet" : { + "text" : "9bbc0d79e686e847bc305c9bd4cc2ea6" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/web/src/app/thunks/OTP/handleGetOTPThunk.tsx." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/web/src/app/thunks/OTP/handleGetOTPThunk.tsx" + }, + "region" : { + "startLine" : 31, + "startColumn" : 14, + "endLine" : 31, + "endColumn" : 56, + "snippet" : { + "text" : "9bbc0d79e686e847bc305c9bd4cc2ea6" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/iOS/Source Code/Podfile.lock." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/iOS/Source Code/Podfile.lock" + }, + "region" : { + "startLine" : 23, + "startColumn" : 4, + "endLine" : 24, + "endColumn" : 1, + "snippet" : { + "text" : "b3816fddcf28aa29d94b10ec305cd52be14c472b" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/iOS/Source Code/Pods/Manifest.lock." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/iOS/Source Code/Pods/Manifest.lock" + }, + "region" : { + "startLine" : 23, + "startColumn" : 4, + "endLine" : 24, + "endColumn" : 1, + "snippet" : { + "text" : "b3816fddcf28aa29d94b10ec305cd52be14c472b" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + } ] + } ] +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index e541f0c97e..6da99471bf 100644 --- a/settings.gradle +++ b/settings.gradle @@ -88,7 +88,10 @@ include 'sechub-cli', 'sechub-wrapper-prepare', /* webui */ -'sechub-webui-solution' +'sechub-webui-solution', + +/* secret validator */ +'sechub-wrapper-secret-validator' String buildStage = System.getProperty("sechub.build.stage"); From a16097af7266b41e4c614676eadfaffd87e83c49 Mon Sep 17 00:00:00 2001 From: Jan Winz Date: Mon, 8 Jul 2024 13:17:09 +0200 Subject: [PATCH 05/50] Extend SarifV1JSONImporter to enable import of custom gitleaks properties #3276 - extend workaround classes with te ability to resolve secret validation wrapper custom severities - add necessary changes to SarifV1JSONImporter and added test cases with test report files --- .../GitleaksSarifImportWorkaround.java | 40 +- .../SarifImportProductWorkaround.java | 4 + .../SarifImportProductWorkaroundSupport.java | 10 + .../sereco/importer/SarifImporterKeys.java | 31 + .../sereco/importer/SarifV1JSONImporter.java | 13 +- .../importer/SarifV1JSONImporterTest.java | 85 ++ ...invalid-validator-severity-properties.json | 850 +++++++++++++++ ....0-with-validator-severity-properties.json | 974 ++++++++++++++++++ 8 files changed, 1999 insertions(+), 8 deletions(-) create mode 100644 sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImporterKeys.java create mode 100644 sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-invalid-validator-severity-properties.json create mode 100644 sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-validator-severity-properties.json diff --git a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/GitleaksSarifImportWorkaround.java b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/GitleaksSarifImportWorkaround.java index bbc6ca0908..a21e41bbe4 100644 --- a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/GitleaksSarifImportWorkaround.java +++ b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/GitleaksSarifImportWorkaround.java @@ -1,16 +1,12 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.sereco.importer; +import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; -import de.jcup.sarif_2_1_0.model.PartialFingerprints; -import de.jcup.sarif_2_1_0.model.ReportingDescriptor; -import de.jcup.sarif_2_1_0.model.Result; -import de.jcup.sarif_2_1_0.model.Run; -import de.jcup.sarif_2_1_0.model.Tool; -import de.jcup.sarif_2_1_0.model.ToolComponent; +import de.jcup.sarif_2_1_0.model.*; @Component public class GitleaksSarifImportWorkaround implements SarifImportProductWorkaround { @@ -42,6 +38,38 @@ public String resolveFindingRevisionId(Result result, Run run) { return null; } + @Override + public String resolveCustomSechubSeverity(Result result, Run run) { + if (result == null) { + return null; + } + if (!isGitleaksRun(run)) { + return null; + } + List locations = result.getLocations(); + if (locations == null || locations.isEmpty()) { + return null; + } + PhysicalLocation physicalLocation = locations.get(0).getPhysicalLocation(); + if (physicalLocation == null) { + return null; + } + Region region = physicalLocation.getRegion(); + if (region == null) { + return null; + } + PropertyBag properties = region.getProperties(); + if (properties == null) { + return null; + } + Map additionalProperties = properties.getAdditionalProperties(); + if (additionalProperties == null) { + return null; + } + String severityKey = SarifImporterKeys.SECRETSCAN_SECHUB_SEVERITY.getKey(); + return (String) additionalProperties.get(severityKey); + } + private boolean isGitleaksRun(Run run) { if (run == null) { return false; diff --git a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaround.java b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaround.java index f4fdb73be4..9e3e460719 100644 --- a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaround.java +++ b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaround.java @@ -22,4 +22,8 @@ public default String resolveType(ReportingDescriptor rule, Run run) { public default String resolveFindingRevisionId(Result result, Run run) { return null; } + + public default String resolveCustomSechubSeverity(Result result, Run run) { + return null; + } } diff --git a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaroundSupport.java b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaroundSupport.java index c88da22c92..7bb20f5072 100644 --- a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaroundSupport.java +++ b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImportProductWorkaroundSupport.java @@ -58,6 +58,16 @@ private R visitAllWorkaroundsAndUseFirstResultNotNull(E element, Run run, return null; } + public String resolveCustomSechubSeverity(Result result, Run run) { + return visitAllWorkaroundsAndUseFirstResultNotNull(result, run, new WorkaroundVisitor() { + + @Override + public String visit(Result element, Run run, SarifImportProductWorkaround workaround) { + return workaround.resolveCustomSechubSeverity(result, run); + } + }); + } + public interface WorkaroundVisitor { public R visit(E element, Run run, SarifImportProductWorkaround workaround); diff --git a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImporterKeys.java b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImporterKeys.java new file mode 100644 index 0000000000..cee7ee8df1 --- /dev/null +++ b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifImporterKeys.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.sereco.importer; + +/* + * If this needs to get changed, make sure to change + * com.mercedesbenz.sechub.wrapper.secret.validator.support.SarifImporterKeys accordingly + */ +public enum SarifImporterKeys { + + SECRETSCAN_SECHUB_SEVERITY("secretscan.sechub.severity", "The key for the sechub severity which is more precise than the SARIF Level enum."), + + SECRETSCAN_VALIDATED_BY_URL("secretscan.validated.by.url", "The key for the URL the secret was validated with."), + + ; + + private String key; + private String description; + + private SarifImporterKeys(String key, String description) { + this.key = key; + this.description = description; + } + + public String getKey() { + return key; + } + + public String getDescription() { + return description; + } +} diff --git a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporter.java b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporter.java index ab1205a593..32389bbcfb 100644 --- a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporter.java +++ b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporter.java @@ -285,8 +285,13 @@ private void handleWebRequest(Result result, SerecoWeb serecoWeb) { } private SerecoSeverity resolveSeverity(Result result, Run run) { - Level level = sarifSchema210LogicSupport.resolveLevel(result, run); - return mapToSeverity(level); + String customSecHubSeverity = workaroundSupport.resolveCustomSechubSeverity(result, run); + SerecoSeverity serecoSeverity = severityFromString(customSecHubSeverity); + if (serecoSeverity == null) { + Level level = sarifSchema210LogicSupport.resolveLevel(result, run); + return mapToSeverity(level); + } + return serecoSeverity; } private class ResultData { @@ -523,6 +528,10 @@ private SerecoSeverity mapToSeverity(Level level) { } } + private SerecoSeverity severityFromString(String customSecHubSeverity) { + return SerecoSeverity.fromString(customSecHubSeverity); + } + @Override public boolean isAbleToImportForProduct(ImportParameter param) { /* first we do the simple check... */ diff --git a/sechub-sereco/src/test/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporterTest.java b/sechub-sereco/src/test/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporterTest.java index 000af5dca5..ab90d5f2e2 100644 --- a/sechub-sereco/src/test/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporterTest.java +++ b/sechub-sereco/src/test/java/com/mercedesbenz/sechub/sereco/importer/SarifV1JSONImporterTest.java @@ -36,6 +36,8 @@ class SarifV1JSONImporterTest { private static String sarif_2_1_0_gosec2_9_5_example5_cosdescan; private static String sarif_2_1_0_sarif_2_1_0_gitleaks_8_0; private static String sarif_2_1_0_sarif_2_1_0_gitleaks_8_0_one_finding_with_revision_id; + private static String sarif_2_1_0_gitleaks_8_0_with_validator_severity_properties; + private static String sarif_2_1_0_gitleaks_8_0_with_invalid_validator_severity_properties; private SarifV1JSONImporter importerToTest; @@ -51,6 +53,9 @@ public static void before() { sarif_2_1_0_owasp_zap = loadSarifTestFile("sarif_2.1.0_owasp_zap.json"); sarif_2_1_0_sarif_2_1_0_gitleaks_8_0 = loadSarifTestFile("sarif_2.1.0_gitleaks_8.0.json"); sarif_2_1_0_sarif_2_1_0_gitleaks_8_0_one_finding_with_revision_id = loadSarifTestFile("sarif_2.1.0_gitleaks_8.0-one-finding-with-revision.json"); + sarif_2_1_0_gitleaks_8_0_with_validator_severity_properties = loadSarifTestFile("sarif_2.1.0_gitleaks_8.0-with-validator-severity-properties.json"); + sarif_2_1_0_gitleaks_8_0_with_invalid_validator_severity_properties = loadSarifTestFile( + "sarif_2.1.0_gitleaks_8.0-with-invalid-validator-severity-properties.json"); } @BeforeEach @@ -319,6 +324,86 @@ void gitleaks_8_0_simple_example_secretscan__can_be_imported_and_revision_inform /* @formatter:on */ } + @Test + void sarif_2_1_0_gitleaks_8_0_with_validator_severity_properties__can_be_imported_and_severities_are_available() throws Exception { + /* prepare */ + importerToTest.workaroundSupport.workarounds.add(new GitleaksSarifImportWorkaround()); + SerecoMetaData result = importerToTest.importResult(sarif_2_1_0_gitleaks_8_0_with_validator_severity_properties, ScanType.SECRET_SCAN); + + /* execute */ + List vulnerabilities = result.getVulnerabilities(); + + /* test */ + /* @formatter:off */ + assertVulnerabilities(vulnerabilities). + hasVulnerabilities(6). + verifyVulnerability(). + withSeverity(SerecoSeverity.INFO). + withCodeLocation("UnSAFE_Bank/Backend/docker-compose.yml", 12, 14). + containingSource("531486b2bf646636a6a1bba61e78ec4a4a54efbd"). + done(). + isContained(). + verifyVulnerability(). + withSeverity(SerecoSeverity.UNCLASSIFIED). + withCodeLocation("UnSAFE_Bank/Backend/src/api/application/config/database.php", 80, 7). + containingSource("531486b2bf646636a6a1bba61e78ec4a4a54efbd"). + done(). + isContained(). + verifyVulnerability(). + withSeverity(SerecoSeverity.LOW). + withCodeLocation("UnSAFE_Bank/Backend/web/src/app/thunks/Authentication/ForgotPassword/handleForgotPasswordGetOTPThunk.tsx", 32, 14). + containingSource("9bbc0d79e686e847bc305c9bd4cc2ea6"). + done(). + isContained(). + verifyVulnerability(). + withSeverity(SerecoSeverity.MEDIUM). + withCodeLocation("UnSAFE_Bank/Backend/web/src/app/thunks/OTP/handleGetOTPThunk.tsx", 31, 14). + containingSource("9bbc0d79e686e847bc305c9bd4cc2ea6"). + done(). + isContained(). + verifyVulnerability(). + withSeverity(SerecoSeverity.HIGH). + withCodeLocation("UnSAFE_Bank/iOS/Source Code/Podfile.lock", 23, 4). + containingSource("b3816fddcf28aa29d94b10ec305cd52be14c472b"). + done(). + isContained(). + verifyVulnerability(). + withSeverity(SerecoSeverity.CRITICAL). + withCodeLocation("UnSAFE_Bank/iOS/Source Code/Pods/Manifest.lock", 23, 4). + containingSource("b3816fddcf28aa29d94b10ec305cd52be14c472b"). + done(). + isContained(); + /* @formatter:on */ + } + + @Test + void sarif_2_1_0_gitleaks_8_0_with_invalid_validator_severity_properties__can_be_imported_and_severities_are_set_to_sarif_default() throws Exception { + /* prepare */ + importerToTest.workaroundSupport.workarounds.add(new GitleaksSarifImportWorkaround()); + SerecoMetaData result = importerToTest.importResult(sarif_2_1_0_gitleaks_8_0_with_invalid_validator_severity_properties, ScanType.SECRET_SCAN); + + /* execute */ + List vulnerabilities = result.getVulnerabilities(); + + /* test */ + /* @formatter:off */ + assertVulnerabilities(vulnerabilities). + hasVulnerabilities(2). + verifyVulnerability(). + withSeverity(SerecoSeverity.MEDIUM). + withCodeLocation("UnSAFE_Bank/Backend/docker-compose.yml", 12, 14). + containingSource("531486b2bf646636a6a1bba61e78ec4a4a54efbd"). + done(). + isContained(). + verifyVulnerability(). + withSeverity(SerecoSeverity.MEDIUM). + withCodeLocation("UnSAFE_Bank/Backend/src/api/application/config/database.php", 80, 7). + containingSource("531486b2bf646636a6a1bba61e78ec4a4a54efbd"). + done(). + isContained(); + /* @formatter:on */ + } + @Test void brakeman_sarif_report_can_be_imported() { /* prepare */ diff --git a/sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-invalid-validator-severity-properties.json b/sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-invalid-validator-severity-properties.json new file mode 100644 index 0000000000..41b8a849e4 --- /dev/null +++ b/sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-invalid-validator-severity-properties.json @@ -0,0 +1,850 @@ +{ + "$schema" : "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json", + "version" : "2.1.0", + "runs" : [ { + "tool" : { + "driver" : { + "name" : "gitleaks", + "semanticVersion" : "v8.0.0", + "rules" : [ { + "id" : "adafruit-api-key", + "name" : "Adafruit API Key", + "shortDescription" : { + "text" : "(?i)(?:adafruit)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "adobe-client-id", + "name" : "Adobe Client ID (Oauth Web)", + "shortDescription" : { + "text" : "(?i)(?:adobe)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "adobe-client-secret", + "name" : "Adobe Client Secret", + "shortDescription" : { + "text" : "(?i)\\b((p8e-)(?i)[a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "age secret key", + "name" : "Age secret key", + "shortDescription" : { + "text" : "AGE-SECRET-KEY-1[QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L]{58}" + } + }, { + "id" : "airtable-api-key", + "name" : "Airtable API Key", + "shortDescription" : { + "text" : "(?i)(?:airtable)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{17})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "algolia-api-key", + "name" : "Algolia API Key", + "shortDescription" : { + "text" : "(?i)(?:algolia)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "alibaba-access-key-id", + "name" : "Alibaba AccessKey ID", + "shortDescription" : { + "text" : "(?i)\\b((LTAI)(?i)[a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "alibaba-secret-key", + "name" : "Alibaba Secret Key", + "shortDescription" : { + "text" : "(?i)(?:alibaba)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "asana-client-id", + "name" : "Asana Client ID", + "shortDescription" : { + "text" : "(?i)(?:asana)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "asana-client-secret", + "name" : "Asana Client Secret", + "shortDescription" : { + "text" : "(?i)(?:asana)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "atlassian-api-token", + "name" : "Atlassian API token", + "shortDescription" : { + "text" : "(?i)(?:atlassian|confluence|jira)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "aws-access-token", + "name" : "AWS", + "shortDescription" : { + "text" : "(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}" + } + }, { + "id" : "bitbucket-client-id", + "name" : "BitBucket Client ID", + "shortDescription" : { + "text" : "(?i)(?:bitbucket)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bitbucket-client-secret", + "name" : "BitBucket Client Secret", + "shortDescription" : { + "text" : "(?i)(?:bitbucket)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bittrex-access-key", + "name" : "Bittrex Access Key", + "shortDescription" : { + "text" : "(?i)(?:bittrex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bittrex-secret-key", + "name" : "Bittrex Secret Key", + "shortDescription" : { + "text" : "(?i)(?:bittrex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "beamer-api-token", + "name" : "Beamer API token", + "shortDescription" : { + "text" : "(?i)(?:beamer)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(b_[a-z0-9=_\\-]{44})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "codecov-access-token", + "name" : "Codecov Access Token", + "shortDescription" : { + "text" : "(?i)(?:codecov)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "coinbase-access-token", + "name" : "Coinbase Access Token", + "shortDescription" : { + "text" : "(?i)(?:coinbase)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "clojars-api-token", + "name" : "Clojars API token", + "shortDescription" : { + "text" : "(?i)(CLOJARS_)[a-z0-9]{60}" + } + }, { + "id" : "confluent-access-token", + "name" : "Confluent Access Token", + "shortDescription" : { + "text" : "(?i)(?:confluent)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "confluent-secret-key", + "name" : "Confluent Secret Key", + "shortDescription" : { + "text" : "(?i)(?:confluent)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "contentful-delivery-api-token", + "name" : "Contentful delivery API token", + "shortDescription" : { + "text" : "(?i)(?:contentful)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{43})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "databricks-api-token", + "name" : "Databricks API token", + "shortDescription" : { + "text" : "(?i)\\b(dapi[a-h0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "datadog-access-token", + "name" : "Datadog Access Token", + "shortDescription" : { + "text" : "(?i)(?:datadog)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-api-token", + "name" : "Discord API key", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-client-id", + "name" : "Discord client ID", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{18})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-client-secret", + "name" : "Discord client secret", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "doppler-api-token", + "name" : "Doppler API token", + "shortDescription" : { + "text" : "(dp\\.pt\\.)(?i)[a-z0-9]{43}" + } + }, { + "id" : "dropbox-api-token", + "name" : "Dropbox API secret", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{15})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "dropbox-long-lived-api-token", + "name" : "Dropbox long lived API token", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{11}(AAAAAAAAAA)[a-z0-9\\-_=]{43})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "dropbox-short-lived-api-token", + "name" : "Dropbox short lived API token", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(sl\\.[a-z0-9\\-=_]{135})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "droneci-access-token", + "name" : "Droneci Access Token", + "shortDescription" : { + "text" : "(?i)(?:droneci)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "duffel-api-token", + "name" : "Duffel API token", + "shortDescription" : { + "text" : "duffel_(test|live)_(?i)[a-z0-9_\\-=]{43}" + } + }, { + "id" : "dynatrace-api-token", + "name" : "Dynatrace API token", + "shortDescription" : { + "text" : "dt0c01\\.(?i)[a-z0-9]{24}\\.[a-z0-9]{64}" + } + }, { + "id" : "easypost-api-token", + "name" : "EasyPost API token", + "shortDescription" : { + "text" : "EZAK(?i)[a-z0-9]{54}" + } + }, { + "id" : "easypost-test-api-token", + "name" : "EasyPost test API token", + "shortDescription" : { + "text" : "EZTK(?i)[a-z0-9]{54}" + } + }, { + "id" : "etsy-access-token", + "name" : "Etsy Access Token", + "shortDescription" : { + "text" : "(?i)(?:etsy)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "facebook", + "name" : "facebook", + "shortDescription" : { + "text" : "(?i)(?:facebook)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "fastly-api-token", + "name" : "Fastly API key", + "shortDescription" : { + "text" : "(?i)(?:fastly)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finicity-client-secret", + "name" : "Finicity Client Secret", + "shortDescription" : { + "text" : "(?i)(?:finicity)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finicity-api-token", + "name" : "Finicity API token", + "shortDescription" : { + "text" : "(?i)(?:finicity)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "flickr-access-token", + "name" : "Flickr Access Token", + "shortDescription" : { + "text" : "(?i)(?:flickr)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finnhub-access-token", + "name" : "Finnhub Access Token", + "shortDescription" : { + "text" : "(?i)(?:finnhub)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "flutterwave-public-key", + "name" : "Finicity Public Key", + "shortDescription" : { + "text" : "FLWPUBK_TEST-(?i)[a-h0-9]{32}-X" + } + }, { + "id" : "flutterwave-secret-key", + "name" : "Flutterwave Secret Key", + "shortDescription" : { + "text" : "FLWSECK_TEST-(?i)[a-h0-9]{32}-X" + } + }, { + "id" : "flutterwave-encryption-key", + "name" : "Flutterwave Encryption Key", + "shortDescription" : { + "text" : "FLWSECK_TEST-(?i)[a-h0-9]{12}" + } + }, { + "id" : "frameio-api-token", + "name" : "Frame.io API token", + "shortDescription" : { + "text" : "fio-u-(?i)[a-z0-9\\-_=]{64}" + } + }, { + "id" : "freshbooks-access-token", + "name" : "Freshbooks Access Token", + "shortDescription" : { + "text" : "(?i)(?:freshbooks)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "gocardless-api-token", + "name" : "GoCardless API token", + "shortDescription" : { + "text" : "(?i)(?:gocardless)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(live_(?i)[a-z0-9\\-_=]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "gcp-api-key", + "name" : "GCP API key", + "shortDescription" : { + "text" : "(?i)\\b(AIza[0-9A-Za-z\\\\-_]{35})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "github-pat", + "name" : "GitHub Personal Access Token", + "shortDescription" : { + "text" : "ghp_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-oauth", + "name" : "GitHub OAuth Access Token", + "shortDescription" : { + "text" : "gho_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-app-token", + "name" : "GitHub App Token", + "shortDescription" : { + "text" : "(ghu|ghs)_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-refresh-token", + "name" : "GitHub Refresh Token", + "shortDescription" : { + "text" : "ghr_[0-9a-zA-Z]{36}" + } + }, { + "id" : "gitlab-pat", + "name" : "Gitlab Personal Access Token", + "shortDescription" : { + "text" : "glpat-[0-9a-zA-Z\\-\\_]{20}" + } + }, { + "id" : "gitter-access-token", + "name" : "Gitter Access Token", + "shortDescription" : { + "text" : "(?i)(?:gitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "hashicorp-tf-api-token", + "name" : "HashiCorp Terraform user/org API token", + "shortDescription" : { + "text" : "(?i)[a-z0-9]{14}\\.atlasv1\\.[a-z0-9\\-_=]{60,70}" + } + }, { + "id" : "heroku-api-key", + "name" : "Heroku API Key", + "shortDescription" : { + "text" : "(?i)(?:heroku)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "hubspot-api-key", + "name" : "HubSpot API Token", + "shortDescription" : { + "text" : "(?i)(?:hubspot)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "intercom-api-key", + "name" : "Intercom API Token", + "shortDescription" : { + "text" : "(?i)(?:intercom)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{60})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kraken-access-token", + "name" : "Kraken Access Token", + "shortDescription" : { + "text" : "(?i)(?:kraken)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9\\/=_\\+\\-]{80,90})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kucoin-access-token", + "name" : "Kucoin Access Token", + "shortDescription" : { + "text" : "(?i)(?:kucoin)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kucoin-secret-key", + "name" : "Kucoin Secret Key", + "shortDescription" : { + "text" : "(?i)(?:kucoin)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "launchdarkly-access-token", + "name" : "Launchdarkly Access Token", + "shortDescription" : { + "text" : "(?i)(?:launchdarkly)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linear-api-key", + "name" : "Linear API Token", + "shortDescription" : { + "text" : "lin_api_(?i)[a-z0-9]{40}" + } + }, { + "id" : "linear-client-secret", + "name" : "Linear Client Secret", + "shortDescription" : { + "text" : "(?i)(?:linear)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linkedin-client-id", + "name" : "LinkedIn Client ID", + "shortDescription" : { + "text" : "(?i)(?:linkedin|linked-in)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{14})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linkedin-client-secret", + "name" : "LinkedIn Client secret", + "shortDescription" : { + "text" : "(?i)(?:linkedin|linked-in)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "lob-api-key", + "name" : "Lob API Key", + "shortDescription" : { + "text" : "(?i)(?:lob)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}((live|test)_[a-f0-9]{35})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "lob-pub-api-key", + "name" : "Lob Publishable API Key", + "shortDescription" : { + "text" : "(?i)(?:lob)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}((test|live)_pub_[a-f0-9]{31})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailchimp-api-key", + "name" : "Mailchimp API key", + "shortDescription" : { + "text" : "(?i)(?:mailchimp)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32}-us20)(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-pub-key", + "name" : "Mailgun public validation key", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(pubkey-[a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-private-api-token", + "name" : "Mailgun private API token", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(key-[a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-signing-key", + "name" : "Mailgun webhook signing key", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-h0-9]{32}-[a-h0-9]{8}-[a-h0-9]{8})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mapbox-api-token", + "name" : "MapBox API token", + "shortDescription" : { + "text" : "(?i)(?:mapbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(pk\\.[a-z0-9]{60}\\.[a-z0-9]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mattermost-access-token", + "name" : "Mattermost Access Token", + "shortDescription" : { + "text" : "(?i)(?:mattermost)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{26})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "messagebird-api-token", + "name" : "MessageBird API token", + "shortDescription" : { + "text" : "(?i)(?:messagebird|message-bird|message_bird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{25})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "messagebird-client-id", + "name" : "MessageBird client ID", + "shortDescription" : { + "text" : "(?i)(?:messagebird|message-bird|message_bird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "netlify-access-token", + "name" : "Netlify Access Token", + "shortDescription" : { + "text" : "(?i)(?:netlify)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{40,46})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-user-api-key", + "name" : "New Relic user API Key", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(NRAK-[a-z0-9]{27})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-user-api-id", + "name" : "New Relic user API ID", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-browser-api-token", + "name" : "New Relic ingest browser API token", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(NRJS-[a-f0-9]{19})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "npm-access-token", + "name" : "npm access token", + "shortDescription" : { + "text" : "(?i)\\b(npm_[a-z0-9]{36})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "nytimes-access-token", + "name" : "Nytimes Access Token", + "shortDescription" : { + "text" : "(?i)(?:nytimes|new-york-times,|newyorktimes)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "okta-access-token", + "name" : "Okta Access Token", + "shortDescription" : { + "text" : "(?i)(?:okta)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{42})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-client-id", + "name" : "Plaid Client ID", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-secret-key", + "name" : "Plaid Secret key", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-api-token", + "name" : "Plaid API Token", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(access-(?:sandbox|development|production)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-password", + "name" : "PlanetScale password", + "shortDescription" : { + "text" : "(?i)\\b(pscale_pw_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-api-token", + "name" : "PlanetScale API token", + "shortDescription" : { + "text" : "(?i)\\b(pscale_tkn_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-oauth-token", + "name" : "PlanetScale OAuth token", + "shortDescription" : { + "text" : "(?i)\\b(pscale_oauth_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "postman-api-token", + "name" : "Postman API token", + "shortDescription" : { + "text" : "(?i)\\b(PMAK-(?i)[a-f0-9]{24}\\-[a-f0-9]{34})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "private-key", + "name" : "Private Key", + "shortDescription" : { + "text" : "(?i)-----BEGIN[ A-Z0-9_-]{0,100}PRIVATE KEY-----[\\s\\S-]*KEY----" + } + }, { + "id" : "pulumi-api-token", + "name" : "Pulumi API token", + "shortDescription" : { + "text" : "(?i)\\b(pul-[a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "pypi-upload-token", + "name" : "PyPI upload token", + "shortDescription" : { + "text" : "pypi-AgEIcHlwaS5vcmc[A-Za-z0-9\\-_]{50,1000}" + } + }, { + "id" : "rubygems-api-token", + "name" : "Rubygem API token", + "shortDescription" : { + "text" : "(?i)\\b(rubygems_[a-f0-9]{48})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "rapidapi-access-token", + "name" : "RapidAPI Access Token", + "shortDescription" : { + "text" : "(?i)(?:rapidapi)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{50})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendbird-access-id", + "name" : "Sendbird Access ID", + "shortDescription" : { + "text" : "(?i)(?:sendbird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendbird-access-token", + "name" : "Sendbird Access Token", + "shortDescription" : { + "text" : "(?i)(?:sendbird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendgrid-api-token", + "name" : "SendGrid API token", + "shortDescription" : { + "text" : "(?i)\\b(SG\\.(?i)[a-z0-9=_\\-\\.]{66})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendinblue-api-token", + "name" : "Sendinblue API token", + "shortDescription" : { + "text" : "(?i)\\b(xkeysib-[a-f0-9]{64}\\-(?i)[a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sentry-access-token", + "name" : "Sentry Access Token", + "shortDescription" : { + "text" : "(?i)(?:sentry)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "shippo-api-token", + "name" : "Shippo API token", + "shortDescription" : { + "text" : "(?i)\\b(shippo_(live|test)_[a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "shopify-access-token", + "name" : "Shopify access token", + "shortDescription" : { + "text" : "shpat_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-custom-access-token", + "name" : "Shopify custom access token", + "shortDescription" : { + "text" : "shpca_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-private-app-access-token", + "name" : "Shopify private app access token", + "shortDescription" : { + "text" : "shppa_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-shared-secret", + "name" : "Shopify shared secret", + "shortDescription" : { + "text" : "shpss_[a-fA-F0-9]{32}" + } + }, { + "id" : "slack-access-token", + "name" : "Slack token", + "shortDescription" : { + "text" : "xox[baprs]-([0-9a-zA-Z]{10,48})" + } + }, { + "id" : "slack-web-hook", + "name" : "Slack Webhook", + "shortDescription" : { + "text" : "https:\\/\\/hooks.slack.com\\/services\\/[A-Za-z0-9+\\/]{44,46}" + } + }, { + "id" : "stripe-access-token", + "name" : "Stripe", + "shortDescription" : { + "text" : "(?i)(sk|pk)_(test|live)_[0-9a-z]{10,32}" + } + }, { + "id" : "square-access-token", + "name" : "Square Access Token", + "shortDescription" : { + "text" : "(?i)\\b(sq0atp-[0-9A-Za-z\\-_]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "squarespace-access-token", + "name" : "Squarespace Access Token", + "shortDescription" : { + "text" : "(?i)(?:squarespace)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sumologic-access-id", + "name" : "SumoLogic Access ID", + "shortDescription" : { + "text" : "(?i)(?:sumo)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{14})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sumologic-access-token", + "name" : "SumoLogic Access Token", + "shortDescription" : { + "text" : "(?i)(?:sumo)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "travisci-access-token", + "name" : "Travis CI Access Token", + "shortDescription" : { + "text" : "(?i)(?:travis)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twilio-api-key", + "name" : "Twilio API Key", + "shortDescription" : { + "text" : "SK[0-9a-fA-F]{32}" + } + }, { + "id" : "twitch-api-token", + "name" : "Twitch API token", + "shortDescription" : { + "text" : "(?i)(?:twitch)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-api-key", + "name" : "Twitter API Key", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{25})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-api-secret", + "name" : "Twitter API Secret", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{50})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-access-token", + "name" : "Twitter Access Token", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{15,25}-[a-zA-Z0-9]{20,40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-access-secret", + "name" : "Twitter Access Secret", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{45})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-bearer-token", + "name" : "Twitter Bearer Token", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(A{22}[a-zA-Z0-9%]{80,100})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "typeform-api-token", + "name" : "Typeform API token", + "shortDescription" : { + "text" : "(?i)(?:typeform)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(tfp_[a-z0-9\\-_\\.=]{59})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-api-key", + "name" : "Yandex API Key", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(AQVN[A-Za-z0-9_\\-]{35,38})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-aws-access-token", + "name" : "Yandex AWS Access Token", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(YC[a-zA-Z0-9_\\-]{38})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-access-token", + "name" : "Yandex Access Token", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(t1\\.[A-Z0-9a-z_-]+[=]{0,2}\\.[A-Z0-9a-z_-]{86}[=]{0,2})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "zendesk-secret-key", + "name" : "Zendesk Secret Key", + "shortDescription" : { + "text" : "(?i)(?:zendesk)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "generic-api-key", + "name" : "Generic API Key", + "shortDescription" : { + "text" : "(?i)(?:key|api|token|secret|client|passwd|password|auth)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-z\\-_.=]{10,150})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + } ] + } + }, + "results" : [ { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/docker-compose.yml." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/docker-compose.yml" + }, + "region" : { + "startLine" : 12, + "startColumn" : 14, + "endLine" : 13, + "endColumn" : 1, + "snippet" : { + "text" : "531486b2bf646636a6a1bba61e78ec4a4a54efbd" + }, + "properties" : { + "secretscan.sechub.severity" : "invalid-value" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/src/api/application/config/database.php." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/src/api/application/config/database.php" + }, + "region" : { + "startLine" : 80, + "startColumn" : 7, + "endLine" : 80, + "endColumn" : 61, + "snippet" : { + "text" : "531486b2bf646636a6a1bba61e78ec4a4a54efbd" + }, + "properties" : { + "secretscan.sechub.severity" : "another-invalid-value-1234" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + } ] + } ] +} \ No newline at end of file diff --git a/sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-validator-severity-properties.json b/sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-validator-severity-properties.json new file mode 100644 index 0000000000..5d99a890f8 --- /dev/null +++ b/sechub-sereco/src/test/resources/sarif/sarif_2.1.0_gitleaks_8.0-with-validator-severity-properties.json @@ -0,0 +1,974 @@ +{ + "$schema" : "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json", + "version" : "2.1.0", + "runs" : [ { + "tool" : { + "driver" : { + "name" : "gitleaks", + "semanticVersion" : "v8.0.0", + "rules" : [ { + "id" : "adafruit-api-key", + "name" : "Adafruit API Key", + "shortDescription" : { + "text" : "(?i)(?:adafruit)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "adobe-client-id", + "name" : "Adobe Client ID (Oauth Web)", + "shortDescription" : { + "text" : "(?i)(?:adobe)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "adobe-client-secret", + "name" : "Adobe Client Secret", + "shortDescription" : { + "text" : "(?i)\\b((p8e-)(?i)[a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "age secret key", + "name" : "Age secret key", + "shortDescription" : { + "text" : "AGE-SECRET-KEY-1[QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7L]{58}" + } + }, { + "id" : "airtable-api-key", + "name" : "Airtable API Key", + "shortDescription" : { + "text" : "(?i)(?:airtable)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{17})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "algolia-api-key", + "name" : "Algolia API Key", + "shortDescription" : { + "text" : "(?i)(?:algolia)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "alibaba-access-key-id", + "name" : "Alibaba AccessKey ID", + "shortDescription" : { + "text" : "(?i)\\b((LTAI)(?i)[a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "alibaba-secret-key", + "name" : "Alibaba Secret Key", + "shortDescription" : { + "text" : "(?i)(?:alibaba)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "asana-client-id", + "name" : "Asana Client ID", + "shortDescription" : { + "text" : "(?i)(?:asana)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "asana-client-secret", + "name" : "Asana Client Secret", + "shortDescription" : { + "text" : "(?i)(?:asana)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "atlassian-api-token", + "name" : "Atlassian API token", + "shortDescription" : { + "text" : "(?i)(?:atlassian|confluence|jira)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "aws-access-token", + "name" : "AWS", + "shortDescription" : { + "text" : "(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}" + } + }, { + "id" : "bitbucket-client-id", + "name" : "BitBucket Client ID", + "shortDescription" : { + "text" : "(?i)(?:bitbucket)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bitbucket-client-secret", + "name" : "BitBucket Client Secret", + "shortDescription" : { + "text" : "(?i)(?:bitbucket)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bittrex-access-key", + "name" : "Bittrex Access Key", + "shortDescription" : { + "text" : "(?i)(?:bittrex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "bittrex-secret-key", + "name" : "Bittrex Secret Key", + "shortDescription" : { + "text" : "(?i)(?:bittrex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "beamer-api-token", + "name" : "Beamer API token", + "shortDescription" : { + "text" : "(?i)(?:beamer)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(b_[a-z0-9=_\\-]{44})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "codecov-access-token", + "name" : "Codecov Access Token", + "shortDescription" : { + "text" : "(?i)(?:codecov)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "coinbase-access-token", + "name" : "Coinbase Access Token", + "shortDescription" : { + "text" : "(?i)(?:coinbase)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "clojars-api-token", + "name" : "Clojars API token", + "shortDescription" : { + "text" : "(?i)(CLOJARS_)[a-z0-9]{60}" + } + }, { + "id" : "confluent-access-token", + "name" : "Confluent Access Token", + "shortDescription" : { + "text" : "(?i)(?:confluent)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "confluent-secret-key", + "name" : "Confluent Secret Key", + "shortDescription" : { + "text" : "(?i)(?:confluent)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "contentful-delivery-api-token", + "name" : "Contentful delivery API token", + "shortDescription" : { + "text" : "(?i)(?:contentful)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{43})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "databricks-api-token", + "name" : "Databricks API token", + "shortDescription" : { + "text" : "(?i)\\b(dapi[a-h0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "datadog-access-token", + "name" : "Datadog Access Token", + "shortDescription" : { + "text" : "(?i)(?:datadog)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-api-token", + "name" : "Discord API key", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-client-id", + "name" : "Discord client ID", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{18})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "discord-client-secret", + "name" : "Discord client secret", + "shortDescription" : { + "text" : "(?i)(?:discord)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "doppler-api-token", + "name" : "Doppler API token", + "shortDescription" : { + "text" : "(dp\\.pt\\.)(?i)[a-z0-9]{43}" + } + }, { + "id" : "dropbox-api-token", + "name" : "Dropbox API secret", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{15})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "dropbox-long-lived-api-token", + "name" : "Dropbox long lived API token", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{11}(AAAAAAAAAA)[a-z0-9\\-_=]{43})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "dropbox-short-lived-api-token", + "name" : "Dropbox short lived API token", + "shortDescription" : { + "text" : "(?i)(?:dropbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(sl\\.[a-z0-9\\-=_]{135})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "droneci-access-token", + "name" : "Droneci Access Token", + "shortDescription" : { + "text" : "(?i)(?:droneci)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "duffel-api-token", + "name" : "Duffel API token", + "shortDescription" : { + "text" : "duffel_(test|live)_(?i)[a-z0-9_\\-=]{43}" + } + }, { + "id" : "dynatrace-api-token", + "name" : "Dynatrace API token", + "shortDescription" : { + "text" : "dt0c01\\.(?i)[a-z0-9]{24}\\.[a-z0-9]{64}" + } + }, { + "id" : "easypost-api-token", + "name" : "EasyPost API token", + "shortDescription" : { + "text" : "EZAK(?i)[a-z0-9]{54}" + } + }, { + "id" : "easypost-test-api-token", + "name" : "EasyPost test API token", + "shortDescription" : { + "text" : "EZTK(?i)[a-z0-9]{54}" + } + }, { + "id" : "etsy-access-token", + "name" : "Etsy Access Token", + "shortDescription" : { + "text" : "(?i)(?:etsy)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "facebook", + "name" : "facebook", + "shortDescription" : { + "text" : "(?i)(?:facebook)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "fastly-api-token", + "name" : "Fastly API key", + "shortDescription" : { + "text" : "(?i)(?:fastly)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finicity-client-secret", + "name" : "Finicity Client Secret", + "shortDescription" : { + "text" : "(?i)(?:finicity)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finicity-api-token", + "name" : "Finicity API token", + "shortDescription" : { + "text" : "(?i)(?:finicity)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "flickr-access-token", + "name" : "Flickr Access Token", + "shortDescription" : { + "text" : "(?i)(?:flickr)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "finnhub-access-token", + "name" : "Finnhub Access Token", + "shortDescription" : { + "text" : "(?i)(?:finnhub)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{20})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "flutterwave-public-key", + "name" : "Finicity Public Key", + "shortDescription" : { + "text" : "FLWPUBK_TEST-(?i)[a-h0-9]{32}-X" + } + }, { + "id" : "flutterwave-secret-key", + "name" : "Flutterwave Secret Key", + "shortDescription" : { + "text" : "FLWSECK_TEST-(?i)[a-h0-9]{32}-X" + } + }, { + "id" : "flutterwave-encryption-key", + "name" : "Flutterwave Encryption Key", + "shortDescription" : { + "text" : "FLWSECK_TEST-(?i)[a-h0-9]{12}" + } + }, { + "id" : "frameio-api-token", + "name" : "Frame.io API token", + "shortDescription" : { + "text" : "fio-u-(?i)[a-z0-9\\-_=]{64}" + } + }, { + "id" : "freshbooks-access-token", + "name" : "Freshbooks Access Token", + "shortDescription" : { + "text" : "(?i)(?:freshbooks)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "gocardless-api-token", + "name" : "GoCardless API token", + "shortDescription" : { + "text" : "(?i)(?:gocardless)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(live_(?i)[a-z0-9\\-_=]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "gcp-api-key", + "name" : "GCP API key", + "shortDescription" : { + "text" : "(?i)\\b(AIza[0-9A-Za-z\\\\-_]{35})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "github-pat", + "name" : "GitHub Personal Access Token", + "shortDescription" : { + "text" : "ghp_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-oauth", + "name" : "GitHub OAuth Access Token", + "shortDescription" : { + "text" : "gho_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-app-token", + "name" : "GitHub App Token", + "shortDescription" : { + "text" : "(ghu|ghs)_[0-9a-zA-Z]{36}" + } + }, { + "id" : "github-refresh-token", + "name" : "GitHub Refresh Token", + "shortDescription" : { + "text" : "ghr_[0-9a-zA-Z]{36}" + } + }, { + "id" : "gitlab-pat", + "name" : "Gitlab Personal Access Token", + "shortDescription" : { + "text" : "glpat-[0-9a-zA-Z\\-\\_]{20}" + } + }, { + "id" : "gitter-access-token", + "name" : "Gitter Access Token", + "shortDescription" : { + "text" : "(?i)(?:gitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "hashicorp-tf-api-token", + "name" : "HashiCorp Terraform user/org API token", + "shortDescription" : { + "text" : "(?i)[a-z0-9]{14}\\.atlasv1\\.[a-z0-9\\-_=]{60,70}" + } + }, { + "id" : "heroku-api-key", + "name" : "Heroku API Key", + "shortDescription" : { + "text" : "(?i)(?:heroku)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "hubspot-api-key", + "name" : "HubSpot API Token", + "shortDescription" : { + "text" : "(?i)(?:hubspot)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "intercom-api-key", + "name" : "Intercom API Token", + "shortDescription" : { + "text" : "(?i)(?:intercom)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{60})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kraken-access-token", + "name" : "Kraken Access Token", + "shortDescription" : { + "text" : "(?i)(?:kraken)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9\\/=_\\+\\-]{80,90})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kucoin-access-token", + "name" : "Kucoin Access Token", + "shortDescription" : { + "text" : "(?i)(?:kucoin)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "kucoin-secret-key", + "name" : "Kucoin Secret Key", + "shortDescription" : { + "text" : "(?i)(?:kucoin)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "launchdarkly-access-token", + "name" : "Launchdarkly Access Token", + "shortDescription" : { + "text" : "(?i)(?:launchdarkly)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linear-api-key", + "name" : "Linear API Token", + "shortDescription" : { + "text" : "lin_api_(?i)[a-z0-9]{40}" + } + }, { + "id" : "linear-client-secret", + "name" : "Linear Client Secret", + "shortDescription" : { + "text" : "(?i)(?:linear)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linkedin-client-id", + "name" : "LinkedIn Client ID", + "shortDescription" : { + "text" : "(?i)(?:linkedin|linked-in)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{14})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "linkedin-client-secret", + "name" : "LinkedIn Client secret", + "shortDescription" : { + "text" : "(?i)(?:linkedin|linked-in)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "lob-api-key", + "name" : "Lob API Key", + "shortDescription" : { + "text" : "(?i)(?:lob)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}((live|test)_[a-f0-9]{35})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "lob-pub-api-key", + "name" : "Lob Publishable API Key", + "shortDescription" : { + "text" : "(?i)(?:lob)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}((test|live)_pub_[a-f0-9]{31})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailchimp-api-key", + "name" : "Mailchimp API key", + "shortDescription" : { + "text" : "(?i)(?:mailchimp)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{32}-us20)(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-pub-key", + "name" : "Mailgun public validation key", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(pubkey-[a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-private-api-token", + "name" : "Mailgun private API token", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(key-[a-f0-9]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mailgun-signing-key", + "name" : "Mailgun webhook signing key", + "shortDescription" : { + "text" : "(?i)(?:mailgun)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-h0-9]{32}-[a-h0-9]{8}-[a-h0-9]{8})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mapbox-api-token", + "name" : "MapBox API token", + "shortDescription" : { + "text" : "(?i)(?:mapbox)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(pk\\.[a-z0-9]{60}\\.[a-z0-9]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "mattermost-access-token", + "name" : "Mattermost Access Token", + "shortDescription" : { + "text" : "(?i)(?:mattermost)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{26})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "messagebird-api-token", + "name" : "MessageBird API token", + "shortDescription" : { + "text" : "(?i)(?:messagebird|message-bird|message_bird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{25})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "messagebird-client-id", + "name" : "MessageBird client ID", + "shortDescription" : { + "text" : "(?i)(?:messagebird|message-bird|message_bird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "netlify-access-token", + "name" : "Netlify Access Token", + "shortDescription" : { + "text" : "(?i)(?:netlify)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{40,46})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-user-api-key", + "name" : "New Relic user API Key", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(NRAK-[a-z0-9]{27})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-user-api-id", + "name" : "New Relic user API ID", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "new-relic-browser-api-token", + "name" : "New Relic ingest browser API token", + "shortDescription" : { + "text" : "(?i)(?:new-relic|newrelic|new_relic)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(NRJS-[a-f0-9]{19})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "npm-access-token", + "name" : "npm access token", + "shortDescription" : { + "text" : "(?i)\\b(npm_[a-z0-9]{36})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "nytimes-access-token", + "name" : "Nytimes Access Token", + "shortDescription" : { + "text" : "(?i)(?:nytimes|new-york-times,|newyorktimes)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{32})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "okta-access-token", + "name" : "Okta Access Token", + "shortDescription" : { + "text" : "(?i)(?:okta)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9=_\\-]{42})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-client-id", + "name" : "Plaid Client ID", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{24})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-secret-key", + "name" : "Plaid Secret key", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "plaid-api-token", + "name" : "Plaid API Token", + "shortDescription" : { + "text" : "(?i)(?:plaid)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(access-(?:sandbox|development|production)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-password", + "name" : "PlanetScale password", + "shortDescription" : { + "text" : "(?i)\\b(pscale_pw_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-api-token", + "name" : "PlanetScale API token", + "shortDescription" : { + "text" : "(?i)\\b(pscale_tkn_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "planetscale-oauth-token", + "name" : "PlanetScale OAuth token", + "shortDescription" : { + "text" : "(?i)\\b(pscale_oauth_(?i)[a-z0-9=\\-_\\.]{32,64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "postman-api-token", + "name" : "Postman API token", + "shortDescription" : { + "text" : "(?i)\\b(PMAK-(?i)[a-f0-9]{24}\\-[a-f0-9]{34})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "private-key", + "name" : "Private Key", + "shortDescription" : { + "text" : "(?i)-----BEGIN[ A-Z0-9_-]{0,100}PRIVATE KEY-----[\\s\\S-]*KEY----" + } + }, { + "id" : "pulumi-api-token", + "name" : "Pulumi API token", + "shortDescription" : { + "text" : "(?i)\\b(pul-[a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "pypi-upload-token", + "name" : "PyPI upload token", + "shortDescription" : { + "text" : "pypi-AgEIcHlwaS5vcmc[A-Za-z0-9\\-_]{50,1000}" + } + }, { + "id" : "rubygems-api-token", + "name" : "Rubygem API token", + "shortDescription" : { + "text" : "(?i)\\b(rubygems_[a-f0-9]{48})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "rapidapi-access-token", + "name" : "RapidAPI Access Token", + "shortDescription" : { + "text" : "(?i)(?:rapidapi)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9_-]{50})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendbird-access-id", + "name" : "Sendbird Access ID", + "shortDescription" : { + "text" : "(?i)(?:sendbird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendbird-access-token", + "name" : "Sendbird Access Token", + "shortDescription" : { + "text" : "(?i)(?:sendbird)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendgrid-api-token", + "name" : "SendGrid API token", + "shortDescription" : { + "text" : "(?i)\\b(SG\\.(?i)[a-z0-9=_\\-\\.]{66})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sendinblue-api-token", + "name" : "Sendinblue API token", + "shortDescription" : { + "text" : "(?i)\\b(xkeysib-[a-f0-9]{64}\\-(?i)[a-z0-9]{16})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sentry-access-token", + "name" : "Sentry Access Token", + "shortDescription" : { + "text" : "(?i)(?:sentry)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-f0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "shippo-api-token", + "name" : "Shippo API token", + "shortDescription" : { + "text" : "(?i)\\b(shippo_(live|test)_[a-f0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "shopify-access-token", + "name" : "Shopify access token", + "shortDescription" : { + "text" : "shpat_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-custom-access-token", + "name" : "Shopify custom access token", + "shortDescription" : { + "text" : "shpca_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-private-app-access-token", + "name" : "Shopify private app access token", + "shortDescription" : { + "text" : "shppa_[a-fA-F0-9]{32}" + } + }, { + "id" : "shopify-shared-secret", + "name" : "Shopify shared secret", + "shortDescription" : { + "text" : "shpss_[a-fA-F0-9]{32}" + } + }, { + "id" : "slack-access-token", + "name" : "Slack token", + "shortDescription" : { + "text" : "xox[baprs]-([0-9a-zA-Z]{10,48})" + } + }, { + "id" : "slack-web-hook", + "name" : "Slack Webhook", + "shortDescription" : { + "text" : "https:\\/\\/hooks.slack.com\\/services\\/[A-Za-z0-9+\\/]{44,46}" + } + }, { + "id" : "stripe-access-token", + "name" : "Stripe", + "shortDescription" : { + "text" : "(?i)(sk|pk)_(test|live)_[0-9a-z]{10,32}" + } + }, { + "id" : "square-access-token", + "name" : "Square Access Token", + "shortDescription" : { + "text" : "(?i)\\b(sq0atp-[0-9A-Za-z\\-_]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "squarespace-access-token", + "name" : "Squarespace Access Token", + "shortDescription" : { + "text" : "(?i)(?:squarespace)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sumologic-access-id", + "name" : "SumoLogic Access ID", + "shortDescription" : { + "text" : "(?i)(?:sumo)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{14})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "sumologic-access-token", + "name" : "SumoLogic Access Token", + "shortDescription" : { + "text" : "(?i)(?:sumo)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{64})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "travisci-access-token", + "name" : "Travis CI Access Token", + "shortDescription" : { + "text" : "(?i)(?:travis)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{22})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twilio-api-key", + "name" : "Twilio API Key", + "shortDescription" : { + "text" : "SK[0-9a-fA-F]{32}" + } + }, { + "id" : "twitch-api-token", + "name" : "Twitch API token", + "shortDescription" : { + "text" : "(?i)(?:twitch)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{30})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-api-key", + "name" : "Twitter API Key", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{25})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-api-secret", + "name" : "Twitter API Secret", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{50})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-access-token", + "name" : "Twitter Access Token", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9]{15,25}-[a-zA-Z0-9]{20,40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-access-secret", + "name" : "Twitter Access Secret", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{45})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "twitter-bearer-token", + "name" : "Twitter Bearer Token", + "shortDescription" : { + "text" : "(?i)(?:twitter)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(A{22}[a-zA-Z0-9%]{80,100})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "typeform-api-token", + "name" : "Typeform API token", + "shortDescription" : { + "text" : "(?i)(?:typeform)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(tfp_[a-z0-9\\-_\\.=]{59})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-api-key", + "name" : "Yandex API Key", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(AQVN[A-Za-z0-9_\\-]{35,38})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-aws-access-token", + "name" : "Yandex AWS Access Token", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(YC[a-zA-Z0-9_\\-]{38})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "yandex-access-token", + "name" : "Yandex Access Token", + "shortDescription" : { + "text" : "(?i)(?:yandex)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}(t1\\.[A-Z0-9a-z_-]+[=]{0,2}\\.[A-Z0-9a-z_-]{86}[=]{0,2})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "zendesk-secret-key", + "name" : "Zendesk Secret Key", + "shortDescription" : { + "text" : "(?i)(?:zendesk)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([a-z0-9]{40})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + }, { + "id" : "generic-api-key", + "name" : "Generic API Key", + "shortDescription" : { + "text" : "(?i)(?:key|api|token|secret|client|passwd|password|auth)(?:[0-9a-z\\-_\\t .]{0,20})(?:[\\s|']|[\\s|\"]){0,3}(?:=|>|:=|\\|\\|:|<=|=>|:)(?:'|\\\"|\\s|=|\\x60){0,5}([0-9a-z\\-_.=]{10,150})(?:['|\\\"|\\n|\\r|\\s|\\x60]|$)" + } + } ] + } + }, + "results" : [ { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/docker-compose.yml." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/docker-compose.yml" + }, + "region" : { + "startLine" : 12, + "startColumn" : 14, + "endLine" : 13, + "endColumn" : 1, + "snippet" : { + "text" : "531486b2bf646636a6a1bba61e78ec4a4a54efbd" + }, + "properties" : { + "secretscan.sechub.severity" : "info" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/src/api/application/config/database.php." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/src/api/application/config/database.php" + }, + "region" : { + "startLine" : 80, + "startColumn" : 7, + "endLine" : 80, + "endColumn" : 61, + "snippet" : { + "text" : "531486b2bf646636a6a1bba61e78ec4a4a54efbd" + }, + "properties" : { + "secretscan.sechub.severity" : "unclassified" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/web/src/app/thunks/Authentication/ForgotPassword/handleForgotPasswordGetOTPThunk.tsx." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/web/src/app/thunks/Authentication/ForgotPassword/handleForgotPasswordGetOTPThunk.tsx" + }, + "region" : { + "startLine" : 32, + "startColumn" : 14, + "endLine" : 32, + "endColumn" : 56, + "snippet" : { + "text" : "9bbc0d79e686e847bc305c9bd4cc2ea6" + }, + "properties" : { + "secretscan.sechub.severity" : "low" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/Backend/web/src/app/thunks/OTP/handleGetOTPThunk.tsx." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/Backend/web/src/app/thunks/OTP/handleGetOTPThunk.tsx" + }, + "region" : { + "startLine" : 31, + "startColumn" : 14, + "endLine" : 31, + "endColumn" : 56, + "snippet" : { + "text" : "9bbc0d79e686e847bc305c9bd4cc2ea6" + }, + "properties" : { + "secretscan.sechub.severity" : "medium" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/iOS/Source Code/Podfile.lock." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/iOS/Source Code/Podfile.lock" + }, + "region" : { + "startLine" : 23, + "startColumn" : 4, + "endLine" : 24, + "endColumn" : 1, + "snippet" : { + "text" : "b3816fddcf28aa29d94b10ec305cd52be14c472b" + }, + "properties" : { + "secretscan.sechub.severity" : "high" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + }, { + "ruleId" : "generic-api-key", + "message" : { + "text" : "generic-api-key has detected secret for file UnSAFE_Bank/iOS/Source Code/Pods/Manifest.lock." + }, + "locations" : [ { + "physicalLocation" : { + "artifactLocation" : { + "uri" : "UnSAFE_Bank/iOS/Source Code/Pods/Manifest.lock" + }, + "region" : { + "startLine" : 23, + "startColumn" : 4, + "endLine" : 24, + "endColumn" : 1, + "snippet" : { + "text" : "b3816fddcf28aa29d94b10ec305cd52be14c472b" + }, + "properties" : { + "secretscan.sechub.severity" : "critical" + } + } + } + } ], + "partialFingerprints" : { + "commitSha" : "", + "email" : "", + "author" : "", + "date" : "", + "commitMessage" : "" + } + } ] + } ] +} \ No newline at end of file From 523b01ac10e27dfa669c97d55283c5c5f2073d42 Mon Sep 17 00:00:00 2001 From: Rouven Haertel Date: Thu, 11 Jul 2024 09:07:22 +0200 Subject: [PATCH 06/50] Added build and release steps --- .../workflows/_build+publish-pds-solution.yml | 1 + .../build+publish-all-pds-solutions.yml | 6 + .github/workflows/release-wrapper-prepare.yml | 213 ++++++++++++++++++ 3 files changed, 220 insertions(+) create mode 100644 .github/workflows/release-wrapper-prepare.yml diff --git a/.github/workflows/_build+publish-pds-solution.yml b/.github/workflows/_build+publish-pds-solution.yml index 70719bc656..f03f614679 100644 --- a/.github/workflows/_build+publish-pds-solution.yml +++ b/.github/workflows/_build+publish-pds-solution.yml @@ -68,6 +68,7 @@ jobs: export OWASPZAP_VERSION export OWASPZAP_SHA256SUM export OWASPZAP_WRAPPER_VERSION + export PREPARE_WRAPPER_VERSION export PMD_VERSION export SCANCODE_VERSION export SPDX_TOOL_VERSION diff --git a/.github/workflows/build+publish-all-pds-solutions.yml b/.github/workflows/build+publish-all-pds-solutions.yml index 4728f1116b..0396b48193 100644 --- a/.github/workflows/build+publish-all-pds-solutions.yml +++ b/.github/workflows/build+publish-all-pds-solutions.yml @@ -62,6 +62,12 @@ jobs: pds-solution: owaspzap pds-version: ${{ inputs.pds-version }} + call_build_pds-prepare: + uses: mercedes-benz/sechub/.github/workflows/_build+publish-pds-solution.yml@develop + with: + pds-solution: prepare + pds-version: ${{ inputs.pds-version }} + call_build-and-publish-pmd: uses: mercedes-benz/sechub/.github/workflows/_build+publish-pds-solution.yml@develop with: diff --git a/.github/workflows/release-wrapper-prepare.yml b/.github/workflows/release-wrapper-prepare.yml new file mode 100644 index 0000000000..2444ecbc80 --- /dev/null +++ b/.github/workflows/release-wrapper-prepare.yml @@ -0,0 +1,213 @@ +# SPDX-License-Identifier: MIT +name: Release wrapper for Prepare + +on: + workflow_dispatch: + inputs: + actor-email: + description: Insert your email address here. It will be used in the generated pull requests + required: true + prepare-wrapper-version: + description: Prepare-wrapper Version (e.g. 1.0.0) + required: true + prepare-wrapper-milestone-number: + description: Prepare-wrapper Milestone number (e.g. 91) + required: true +jobs: + release-version: + name: Create Prepare-wrapper release + runs-on: ubuntu-latest + steps: + - name: "Show Inputs" + run: | + echo "actor-email: '${{ inputs.actor-email }}'" + echo "Prepare-wrapper '${{ inputs.prepare-wrapper-version }}' - Milestone '${{ inputs.prepare-wrapper-milestone-number }}'" + + - name: Checkout branch master + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + with: + ref: master + + # Create temporary local tags, so we build documentation for this tag... + # The final tag on git server side will be done automatically by the release when the draft is saved as "real" release + - name: Tag Prepare Wrapper version v${{ inputs.prepare-wrapper-version }}-prepare-wrapper (temporarily) + run: git tag v${{ inputs.prepare-wrapper-version }}-prepare-wrapper + + # ---------------------- + # Setup + Caching + # ---------------------- + - name: Set up JDK 17 + uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 + with: + java-version: 17 + distribution: temurin + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda + with: + cache-read-only: false + + # ---------------------- + # Create a pull request if license headers are missing + # ---------------------- + - name: run apply-headers.sh + id: apply-headers + run: | + git config user.name "$GITHUB_TRIGGERING_ACTOR (via github-actions)" + git config user.email "${{ inputs.actor-email }}" + ./apply-headers.sh + git commit -am "SPDX headers added by SecHub release job @github-actions" || true + COMMITS=`git log --oneline --branches --not --remotes` + echo "commits=$COMMITS" >> $GITHUB_OUTPUT + + - name: Create a pull request for SPDX license headers + id: pr_spdx_headers + if: steps.apply-headers.outputs.commits != '' + uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e + with: + branch: release-spdx-headers + branch-suffix: short-commit-hash + delete-branch: true + title: '0 - Before prepare-wrapper release: Add missing SPDX license headers [auto-generated]' + body: | + Auto-generated by Github Actions prepare-wrapper release job. + + -> Please review and merge **before** publishing the prepare-wrapper release. + + - name: Print PR infos + if: steps.apply-headers.outputs.commits != '' + run: | + echo "Pull Request Number - ${{ steps.pr_spdx_headers.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.pr_spdx_headers.outputs.pull-request-url }}" + + - name: Switch back to master branch + run: git checkout master + + # ----------------------------------------- + # Build SecHub Prepare Wrapper + # ----------------------------------------- + - name: Build Prepare Wrapper + run: ./gradlew :sechub-wrapper-prepare:buildWrapperPrepare + + # ----------------------------------------- + # Upload build artifacts + # ----------------------------------------- + - name: Inspect GIT status + if: always() + run: | + mkdir build/reports -p + git status > build/reports/git-status.txt + + - name: Archive GIT status + if: always() + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 + with: + name: git-status.txt + path: build/reports/git-status.txt + retention-days: 14 + + - name: Archive Prepare Wrapper libs directory + if: always() + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 + with: + name: sechub-wrapper-prepare + path: sechub-wrapper-prepare/build/libs + retention-days: 14 + + - name: Switch back to master branch + run: git checkout master + + # ----------------------------------------- + # Assert releaseable, so no dirty flags on releases + # even when all artifact creation parts are done! + # ----------------------------------------- + - name: Assert releasable + run: ./gradlew assertReleaseable + + - name: Create Prepare Wrapper release + id: create_prepare-wrapper_release + uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: v${{ inputs.prepare-wrapper-version }}-prepare-wrapper + commitish: master + release_name: Prepare Wrapper Version ${{ inputs.prepare-wrapper-version }} + body: | + Changes in this Release + - Some minor changes on Prepare Wrapper implementation + + For more details please look at [Milestone ${{inputs.prepare-wrapper-milestone-number}}]( https://github.com/mercedes-benz/sechub/milestone/${{inputs.prepare-wrapper-milestone-number}}?closed=1) + draft: true + prerelease: false + + # ----------------------------------------- + # Upload release artifacts + # ----------------------------------------- + - name: Create files and sha256 checksum for Prepare Wrapper jar + run: | + cd sechub-wrapper-prepare/build/libs/ + sha256sum sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar > sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum + + - name: Upload asset sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar + uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_prepare-wrapper_release.outputs.upload_url }} + asset_path: sechub-wrapper-prepare/build/libs/sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar + asset_name: sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar + asset_content_type: application/zip + + - name: Upload asset sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum + uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_prepare-wrapper_release.outputs.upload_url }} + asset_path: sechub-wrapper-prepare/build/libs/sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum + asset_name: sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum + asset_content_type: text/plain + + # ----------------------------------------- + # Create release issue + # ----------------------------------------- + - name: Create Prepare Wrapper ${{ inputs.prepare-wrapper-version }} release issue + uses: dacbd/create-issue-action@main + with: + token: ${{ github.token }} + title: Release Prepare Wrapper ${{ inputs.prepare-wrapper-version }} + body: | + See [Milestone ${{inputs.prepare-wrapper-milestone-number}}]( https://github.com/mercedes-benz/sechub/milestone/${{inputs.prepare-wrapper-milestone-number}}?closed=1) for details. + + Please close this issue after the release. + milestone: ${{ inputs.prepare-wrapper-milestone-number }} + + # ----------------------------------------- + # Create a pull request for merging back `master` into `develop` + # ----------------------------------------- + - name: pull-request master to develop + id: pr_master_to_develop + continue-on-error: true + uses: repo-sync/pull-request@7e79a9f5dc3ad0ce53138f01df2fad14a04831c5 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + source_branch: "master" + destination_branch: "develop" + pr_allow_empty: true # should allow an empty PR, but seems not to work + pr_title: '2 - After Prepare Wrapper release: Merge master back into develop [auto-generated]' + pr_body: | + Merge master branch back into develop + + -> Please merge **after** the release has been published. + + - name: Print PR infos if PR was created + if: steps.pr_master_to_develop.outcome == 'success' + run: | + echo "Pull Request Number - ${{ steps.pr_master_to_develop.outputs.pr_number }}" + echo "Pull Request URL - ${{ steps.pr_master_to_develop.outputs.pr_url }}" + + - name: Print info if no PR was created + if: steps.pr_master_to_develop.outcome != 'success' + run: | + echo "Nothing to merge - no pull request necessary." From 45653a58c27cf62c8261c8851a748be13a01f10c Mon Sep 17 00:00:00 2001 From: haerter-tss <98736006+haerter-tss@users.noreply.github.com> Date: Thu, 11 Jul 2024 10:42:49 +0200 Subject: [PATCH 07/50] Apply suggestions from code review Co-authored-by: Laura --- .github/workflows/release-wrapper-prepare.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-wrapper-prepare.yml b/.github/workflows/release-wrapper-prepare.yml index 2444ecbc80..1345560e35 100644 --- a/.github/workflows/release-wrapper-prepare.yml +++ b/.github/workflows/release-wrapper-prepare.yml @@ -87,7 +87,7 @@ jobs: # Build SecHub Prepare Wrapper # ----------------------------------------- - name: Build Prepare Wrapper - run: ./gradlew :sechub-wrapper-prepare:buildWrapperPrepare + run: ./gradlew :sechub-wrapper-prepare:bootjar # ----------------------------------------- # Upload build artifacts @@ -155,18 +155,18 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_prepare-wrapper_release.outputs.upload_url }} - asset_path: sechub-wrapper-prepare/build/libs/sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar - asset_name: sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar + asset_path: sechub-wrapper-prepare/build/libs/sechub-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar + asset_name: sechub-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar asset_content_type: application/zip - - name: Upload asset sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum + - name: Upload asset sechub-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_prepare-wrapper_release.outputs.upload_url }} - asset_path: sechub-wrapper-prepare/build/libs/sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum - asset_name: sechub-pds-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum + asset_path: sechub-wrapper-prepare/build/libs/sechub-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum + asset_name: sechub-wrapper-prepare-${{ inputs.prepare-wrapper-version }}.jar.sha256sum asset_content_type: text/plain # ----------------------------------------- From a9efbb40b5c5310b74f299718a4f1c8871519963 Mon Sep 17 00:00:00 2001 From: Laura Date: Thu, 11 Jul 2024 14:36:14 +0200 Subject: [PATCH 08/50] Add PDS prepare mock #3297 (#3298) --- .../prepare/docker/mocks/prepare-mock-status-ok.txt | 1 + .../prepare/docker/scripts/prepare_mock.sh | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 sechub-pds-solutions/prepare/docker/mocks/prepare-mock-status-ok.txt diff --git a/sechub-pds-solutions/prepare/docker/mocks/prepare-mock-status-ok.txt b/sechub-pds-solutions/prepare/docker/mocks/prepare-mock-status-ok.txt new file mode 100644 index 0000000000..a637007a82 --- /dev/null +++ b/sechub-pds-solutions/prepare/docker/mocks/prepare-mock-status-ok.txt @@ -0,0 +1 @@ +SECHUB_PREPARE_RESULT;status=ok \ No newline at end of file diff --git a/sechub-pds-solutions/prepare/docker/scripts/prepare_mock.sh b/sechub-pds-solutions/prepare/docker/scripts/prepare_mock.sh index ffa5865cbe..5d302a0333 100755 --- a/sechub-pds-solutions/prepare/docker/scripts/prepare_mock.sh +++ b/sechub-pds-solutions/prepare/docker/scripts/prepare_mock.sh @@ -10,8 +10,5 @@ echo "SecHub Job UUID: $SECHUB_JOB_UUID" echo "PDS Job UUID: $PDS_JOB_UUID" echo "" -echo "SECHUB_PREPARE_RESULT;status=ok" > "$PDS_JOB_RESULT_FILE" - - - - +echo "Running PDS Prepare Mock" +cp "$MOCK_FOLDER/prepare-mock-status-ok.txt" "$PDS_JOB_RESULT_FILE" \ No newline at end of file From 90cd88c6403749d67fae74c64897de08e66d0e60 Mon Sep 17 00:00:00 2001 From: Laura Date: Thu, 11 Jul 2024 14:42:59 +0200 Subject: [PATCH 09/50] Documentation Update for Formatter set up --- CONTRIBUTING.md | 2 -- .../eclipse-java-sechub-formatter-setup.adoc | 15 ++++++++++++++ .../intelliJ-java-sechub-formatter-setup.adoc | 15 ++++++++++++++ .../documents/techdoc/01_development.adoc | 7 +++++++ .../eclipse-java-formatter-activate.png | Bin 0 -> 87008 bytes .../images/eclipse-java-formatter-import.png | Bin 0 -> 87590 bytes .../intelliJ-java-formatter-activate.png | Bin 0 -> 70581 bytes .../images/intelliJ-java-formatter-import.png | Bin 0 -> 76048 bytes .../sechub-developer-quickstart-guide.adoc | 19 +++++++++++++++--- 9 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 sechub-doc/src/docs/asciidoc/documents/shared/configuration/eclipse-java-sechub-formatter-setup.adoc create mode 100644 sechub-doc/src/docs/asciidoc/documents/shared/configuration/intelliJ-java-sechub-formatter-setup.adoc create mode 100644 sechub-doc/src/docs/asciidoc/images/eclipse-java-formatter-activate.png create mode 100644 sechub-doc/src/docs/asciidoc/images/eclipse-java-formatter-import.png create mode 100644 sechub-doc/src/docs/asciidoc/images/intelliJ-java-formatter-activate.png create mode 100644 sechub-doc/src/docs/asciidoc/images/intelliJ-java-formatter-import.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fd8d8f3c04..8f9b0aa5f1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -95,8 +95,6 @@ This depends on you which kind of IDE you use for development. But we have some Please check our [development-setup documentation](https://mercedes-benz.github.io/sechub/latest/sechub-techdoc.html#development-setup) for details. -Please look into https://github.com/mercedes-benz/sechub/issues/168 for source formatter config files and description for usage. - ### Coding conventions Please look at our [coding-conventions documentation](https://mercedes-benz.github.io/sechub/latest/sechub-techdoc.html#section-coding-conventions) for details. diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/configuration/eclipse-java-sechub-formatter-setup.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/configuration/eclipse-java-sechub-formatter-setup.adoc new file mode 100644 index 0000000000..51555b734c --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/configuration/eclipse-java-sechub-formatter-setup.adoc @@ -0,0 +1,15 @@ +. Download the formatter xml file https://github.com/Daimler/sechub/files/4158667/sechub-eclipse-sourceformatter-setup.zip[here] and unzip it. + +. Open Java Formatter page in preferences (Window->Preferences). Then press the import button and select the former unpacked xml file. ++ +image::eclipse-java-formatter-import.png[] + +. Ensure SecHub is your active profile. Select `SecHub` as active profile, then press apply and close. ++ +image::eclipse-java-formatter-activate.png[] + +. Before pushing your code please check your java format by executing spotless check. ++ +---- +./gradlew clean spotlessCheck +---- \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/configuration/intelliJ-java-sechub-formatter-setup.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/configuration/intelliJ-java-sechub-formatter-setup.adoc new file mode 100644 index 0000000000..8ce6faba06 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/configuration/intelliJ-java-sechub-formatter-setup.adoc @@ -0,0 +1,15 @@ +. Download the formatter xml file https://github.com/Daimler/sechub/files/4158667/sechub-eclipse-sourceformatter-setup.zip[here] and unzip it. + +. Open Java Formatter page in preferences (File->Settings). Then press the import button and select the former unpacked xml file. ++ +image::intelliJ-java-formatter-import.png[] + +. Ensure SecHub is your active profile. Select `SecHub` as active profile, then press apply and close. ++ +image::intelliJ-java-formatter-activate.png[] + +. Before pushing your code please check your java format by executing spotless check. ++ +---- +./gradlew clean spotlessCheck +---- \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/01_development.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/01_development.adoc index ea6cbb27fc..50a7174622 100644 --- a/sechub-doc/src/docs/asciidoc/documents/techdoc/01_development.adoc +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/01_development.adoc @@ -57,6 +57,10 @@ of your choice. ====== Create localhost server certificate This is automatically done by former gradle call, so not necessary here. +====== Add Sechub Java Code Formatter + +include::../shared/configuration/eclipse-java-sechub-formatter-setup.adoc[] + ===== Others ====== Import projects Import as you would normally do in your IDE. @@ -67,6 +71,9 @@ just call `./gradlew ensureLocalhostCertificate` This will generate a self signed server certificate for localhost. +====== Add Sechub Java Code Formatter (IntelliJ) + +include::../shared/configuration/intelliJ-java-sechub-formatter-setup.adoc[] ==== Special developer files diff --git a/sechub-doc/src/docs/asciidoc/images/eclipse-java-formatter-activate.png b/sechub-doc/src/docs/asciidoc/images/eclipse-java-formatter-activate.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd3f69c4e460d262b0d96ea8aa709b27900eeaf GIT binary patch literal 87008 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®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. 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 literal 0 HcmV?d00001 diff --git a/sechub-doc/src/docs/asciidoc/images/eclipse-java-formatter-import.png b/sechub-doc/src/docs/asciidoc/images/eclipse-java-formatter-import.png new file mode 100644 index 0000000000000000000000000000000000000000..cf216a12d3ba1e6253846f04d584dad2d23a7145 GIT binary patch literal 87590 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

nb+PqYLiSjufs{xjPZWV25Ui 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 literal 0 HcmV?d00001 diff --git a/sechub-doc/src/docs/asciidoc/images/intelliJ-java-formatter-activate.png b/sechub-doc/src/docs/asciidoc/images/intelliJ-java-formatter-activate.png new file mode 100644 index 0000000000000000000000000000000000000000..822c0fd643e890860176d2bd876c55d40f5a2d88 GIT binary patch literal 70581 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 literal 0 HcmV?d00001 diff --git a/sechub-doc/src/docs/asciidoc/images/intelliJ-java-formatter-import.png b/sechub-doc/src/docs/asciidoc/images/intelliJ-java-formatter-import.png new file mode 100644 index 0000000000000000000000000000000000000000..5d4265796c6d63e6594ec0214b907a8bc60ae13f GIT binary patch literal 76048 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 LbHg%y=ZOCT?xHKs literal 0 HcmV?d00001 diff --git a/sechub-doc/src/docs/asciidoc/sechub-developer-quickstart-guide.adoc b/sechub-doc/src/docs/asciidoc/sechub-developer-quickstart-guide.adoc index f1879ecf39..c87c1a1889 100644 --- a/sechub-doc/src/docs/asciidoc/sechub-developer-quickstart-guide.adoc +++ b/sechub-doc/src/docs/asciidoc/sechub-developer-quickstart-guide.adoc @@ -256,13 +256,18 @@ Issues have labels a good way to start is to look for issues with https://github Issues with labels https://github.com/mercedes-benz/sechub/labels/beginner[`beginner`], https://github.com/mercedes-benz/sechub/labels/intermediate[`intermediate`], https://github.com/mercedes-benz/sechub/labels/advanced[`advanced`] indicate the level of difficulty. However, not all issues are labeled. In addition, if you like an issue just comment on it, so that we can assign you to it. -** In case, the issue you want to work on does not yet exists, please create an issue. +** In case, the issue you want to work on does not yet exist, please create an issue. . Create a new branch on your local fork following the naming pattern `feature--` + TIP: Example: `feature-36-go-client-supports-env-variable`. -. Implement your changes +. Set Up git configurations as explained here: https://mercedes-benz.github.io/sechub/latest/sechub-techdoc.html#sechub-git-configuration[Configure your git settings] + +. Set up your IDE + +. Implement your changes + +Please follow our coding conventions: https://mercedes-benz.github.io/sechub/latest/sechub-techdoc.html#section-coding-conventions[Coding conventions] + TIP: In case, you have any questions or need clarification ask inside the issues @@ -455,6 +460,10 @@ image::eclipse-import-gradle-projects-sechub-selected.png[] + image::eclipse-egradle-sechub-imported.png[] +==== Add Sechub Java Code Formatter + +include::documents/shared/configuration/eclipse-java-sechub-formatter-setup.adoc[] + ==== Switch to `Dark` theme (Optional) Needs to be done for every new workspace. @@ -471,7 +480,7 @@ image::eclipse-dark-theme.png[] . Press the `Apply and Close` button -== Set up IntelliJ for SecHub +=== Set up IntelliJ for SecHub Requirements: IntelliJ IDE (Community or Ultimate) is installed. @@ -487,6 +496,10 @@ image::intelliJ_javac_compiler.png[] + image::intelliJ_switch_to_intelliJ_compiler.png[] +==== Add Sechub Java Code Formatter + +include::documents/shared/configuration/intelliJ-java-sechub-formatter-setup.adoc[] + == Run Integration Tests from IDE === Run Integration Tests From Eclipse IDE From f9333472926c66ea107aab135865bd19be497864 Mon Sep 17 00:00:00 2001 From: "haerter-tss (via github-actions)" Date: Wed, 10 Jul 2024 13:44:04 +0000 Subject: [PATCH 10/50] SPDX headers added by SecHub release job @github-actions --- .../java/com/mercedesbenz/sechub/api/internal/gen/AdminApi.java | 1 + .../com/mercedesbenz/sechub/api/internal/gen/AnonymousApi.java | 1 + .../com/mercedesbenz/sechub/api/internal/gen/ProjectApi.java | 1 + .../mercedesbenz/sechub/api/internal/gen/invoker/ApiClient.java | 1 + .../sechub/api/internal/gen/invoker/ApiException.java | 1 + .../sechub/api/internal/gen/invoker/ApiResponse.java | 1 + .../sechub/api/internal/gen/invoker/Configuration.java | 1 + .../com/mercedesbenz/sechub/api/internal/gen/invoker/JSON.java | 1 + .../com/mercedesbenz/sechub/api/internal/gen/invoker/Pair.java | 1 + .../sechub/api/internal/gen/invoker/RFC3339DateFormat.java | 1 + .../sechub/api/internal/gen/invoker/ServerConfiguration.java | 1 + .../sechub/api/internal/gen/invoker/ServerVariable.java | 1 + .../sechub/api/internal/gen/model/AbstractOpenApiSchema.java | 1 + .../api/internal/gen/model/OpenApiExecutionProfileCreate.java | 1 + .../api/internal/gen/model/OpenApiExecutionProfileFetch.java | 1 + .../model/OpenApiExecutionProfileFetchConfigurationsInner.java | 1 + .../api/internal/gen/model/OpenApiExecutionProfileUpdate.java | 1 + .../model/OpenApiExecutionProfileUpdateConfigurationsInner.java | 1 + .../api/internal/gen/model/OpenApiExecutorConfiguration.java | 1 + .../internal/gen/model/OpenApiExecutorConfigurationSetup.java | 1 + .../gen/model/OpenApiExecutorConfigurationSetupCredentials.java | 1 + .../OpenApiExecutorConfigurationSetupJobParametersInner.java | 1 + .../internal/gen/model/OpenApiExecutorConfigurationWithUUID.java | 1 + .../sechub/api/internal/gen/model/OpenApiFalsePositives.java | 1 + .../gen/model/OpenApiFalsePositivesFalsePositivesInner.java | 1 + .../model/OpenApiFalsePositivesFalsePositivesInnerJobData.java | 1 + .../model/OpenApiFalsePositivesFalsePositivesInnerMetaData.java | 1 + .../OpenApiFalsePositivesFalsePositivesInnerMetaDataCode.java | 1 + .../OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeEnd.java | 1 + ...penApiFalsePositivesFalsePositivesInnerMetaDataCodeStart.java | 1 + .../api/internal/gen/model/OpenApiFalsePositivesForJob.java | 1 + .../gen/model/OpenApiFalsePositivesForJobJobDataInner.java | 1 + .../mercedesbenz/sechub/api/internal/gen/model/OpenApiJobId.java | 1 + .../sechub/api/internal/gen/model/OpenApiJobStatus.java | 1 + .../api/internal/gen/model/OpenApiListOfExecutionProfiles.java | 1 + .../OpenApiListOfExecutionProfilesExecutionProfilesInner.java | 1 + .../internal/gen/model/OpenApiListOfExecutorConfigurations.java | 1 + ...iListOfExecutorConfigurationsExecutorConfigurationsInner.java | 1 + .../api/internal/gen/model/OpenApiListOfRunningJobsInner.java | 1 + .../sechub/api/internal/gen/model/OpenApiListOfSignupsInner.java | 1 + .../api/internal/gen/model/OpenApiMappingConfiguration.java | 1 + .../gen/model/OpenApiMappingConfigurationEntriesInner.java | 1 + .../sechub/api/internal/gen/model/OpenApiProject.java | 1 + .../sechub/api/internal/gen/model/OpenApiProjectDetails.java | 1 + .../api/internal/gen/model/OpenApiProjectDetailsMetaData.java | 1 + .../sechub/api/internal/gen/model/OpenApiProjectJobList.java | 1 + .../internal/gen/model/OpenApiProjectJobListContentInner.java | 1 + .../gen/model/OpenApiProjectJobListContentInnerMetaData.java | 1 + .../sechub/api/internal/gen/model/OpenApiProjectMetaData.java | 1 + .../api/internal/gen/model/OpenApiProjectMetaDataMetaData.java | 1 + .../api/internal/gen/model/OpenApiProjectScanLogsInner.java | 1 + .../sechub/api/internal/gen/model/OpenApiProjectWhiteList.java | 1 + .../api/internal/gen/model/OpenApiProjectWhitelistUpdate.java | 1 + .../gen/model/OpenApiProjectWhitelistUpdateWhiteList.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJob.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJobCodeScan.java | 1 + .../api/internal/gen/model/OpenApiScanJobCodeScanFileSystem.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJobData.java | 1 + .../api/internal/gen/model/OpenApiScanJobDataBinariesInner.java | 1 + .../gen/model/OpenApiScanJobDataBinariesInnerFileSystem.java | 1 + .../api/internal/gen/model/OpenApiScanJobDataSourcesInner.java | 1 + .../gen/model/OpenApiScanJobDataSourcesInnerFileSystem.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJobInfraScan.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJobLicenseScan.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJobSecretScan.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJobWebScan.java | 1 + .../sechub/api/internal/gen/model/OpenApiScanJobWebScanApi.java | 1 + .../gen/model/OpenApiScanJobWebScanClientCertificate.java | 1 + .../internal/gen/model/OpenApiScanJobWebScanHeadersInner.java | 1 + .../api/internal/gen/model/OpenApiScanJobWebScanLogin.java | 1 + .../api/internal/gen/model/OpenApiScanJobWebScanLoginBasic.java | 1 + .../api/internal/gen/model/OpenApiScanJobWebScanLoginForm.java | 1 + .../internal/gen/model/OpenApiScanJobWebScanLoginFormScript.java | 1 + .../model/OpenApiScanJobWebScanLoginFormScriptPagesInner.java | 1 + ...enApiScanJobWebScanLoginFormScriptPagesInnerActionsInner.java | 1 + .../internal/gen/model/OpenApiScanJobWebScanMaxScanDuration.java | 1 + .../sechub/api/internal/gen/model/OpenApiServerRuntimeData.java | 1 + .../api/internal/gen/model/OpenApiStatusInformationInner.java | 1 + .../sechub/api/internal/gen/model/OpenApiUserDetails.java | 1 + .../sechub/api/internal/gen/model/OpenApiUserSignup.java | 1 + sechub-api-java/src/main/resources/openapi.yaml | 1 + .../sechub/commons/archive/SafeArchiveInputStream.java | 1 + sechub-openapi-java/src/main/resources/openapi.yaml | 1 + .../sechub/wrapper/prepare/PrepareWrapperProxySupport.java | 1 + .../wrapper/prepare/PrepareWrapperSystemPropertySupport.java | 1 + .../wrapper/prepare/PrepareWrapperApplicationGitManualTest.java | 1 + .../prepare/PrepareWrapperApplicationSkopeoManualTest.java | 1 + .../sechub/wrapper/prepare/PrepareWrapperManualTestUtil.java | 1 + .../sechub/wrapper/prepare/PrepareWrapperProxySupportTest.java | 1 + 89 files changed, 89 insertions(+) diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AdminApi.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AdminApi.java index 33836c7746..c261ec6f0e 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AdminApi.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AdminApi.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AnonymousApi.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AnonymousApi.java index 1f7219c06f..68f56f5c82 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AnonymousApi.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/AnonymousApi.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/ProjectApi.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/ProjectApi.java index 429acb2e6b..3b80045531 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/ProjectApi.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/ProjectApi.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiClient.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiClient.java index 9f18e55cbd..46bc1e89cb 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiClient.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiClient.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiException.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiException.java index 55c1fafd95..eae2b5bfc2 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiException.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiException.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiResponse.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiResponse.java index edac9cfecc..833bd7ce0b 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiResponse.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ApiResponse.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Configuration.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Configuration.java index ac4c80a26c..01125795de 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Configuration.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Configuration.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/JSON.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/JSON.java index 2e7c2c1b3a..517a3102da 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/JSON.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/JSON.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.api.internal.gen.invoker; import java.text.DateFormat; diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Pair.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Pair.java index 5df8840f37..e908da1b64 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Pair.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/Pair.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/RFC3339DateFormat.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/RFC3339DateFormat.java index 67d73cfe40..86495d32ec 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/RFC3339DateFormat.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/RFC3339DateFormat.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerConfiguration.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerConfiguration.java index aac16593de..18ed659339 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerConfiguration.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerConfiguration.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.api.internal.gen.invoker; import java.util.Map; diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerVariable.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerVariable.java index f79c4e774e..726d5bd374 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerVariable.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/invoker/ServerVariable.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.api.internal.gen.invoker; import java.util.HashSet; diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/AbstractOpenApiSchema.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/AbstractOpenApiSchema.java index 58eb013245..39856b9222 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/AbstractOpenApiSchema.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/AbstractOpenApiSchema.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileCreate.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileCreate.java index 257a3765b6..f0fd7a841c 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileCreate.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileCreate.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetch.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetch.java index 7db8a6213d..8717b72d98 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetch.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetch.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetchConfigurationsInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetchConfigurationsInner.java index 753f47de40..74f52fdc51 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetchConfigurationsInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileFetchConfigurationsInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdate.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdate.java index 61ec009da2..70562b83f4 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdate.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdate.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdateConfigurationsInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdateConfigurationsInner.java index 98c37fa580..6a89f1353e 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdateConfigurationsInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutionProfileUpdateConfigurationsInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfiguration.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfiguration.java index fdbe9f4cb7..6cb4112a60 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfiguration.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfiguration.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetup.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetup.java index 4dd726a0d8..bc2cb64115 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetup.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetup.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupCredentials.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupCredentials.java index 850b635fd2..e0f5abf2cc 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupCredentials.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupCredentials.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupJobParametersInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupJobParametersInner.java index 3e7c0bc180..0a5c861cf1 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupJobParametersInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationSetupJobParametersInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationWithUUID.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationWithUUID.java index fb08dded0c..67f0968d98 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationWithUUID.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiExecutorConfigurationWithUUID.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositives.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositives.java index 74f762f47e..614e09e1eb 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositives.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositives.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInner.java index 334987a32a..3e05825bfb 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerJobData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerJobData.java index 763de7f96b..2121cd8f7a 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerJobData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerJobData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaData.java index 99cbf15e1a..4bd52bfbeb 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCode.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCode.java index 5111edfd02..6d4953f6d3 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCode.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCode.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeEnd.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeEnd.java index 1975c8d70b..c6b4d651ac 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeEnd.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeEnd.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeStart.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeStart.java index 182b1f1a23..707ce5d1d4 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeStart.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesFalsePositivesInnerMetaDataCodeStart.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJob.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJob.java index 30fbec0af2..319b0dcb7e 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJob.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJob.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJobJobDataInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJobJobDataInner.java index 1ff2c1d6a7..c1ad88f50c 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJobJobDataInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiFalsePositivesForJobJobDataInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobId.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobId.java index 58991d0bb0..cef29ed87b 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobId.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobId.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobStatus.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobStatus.java index c9568eaff7..382bb60918 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobStatus.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiJobStatus.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfiles.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfiles.java index e9ce4ff73a..7f20b36c09 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfiles.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfiles.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfilesExecutionProfilesInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfilesExecutionProfilesInner.java index f0c37f9516..5bbe3a7643 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfilesExecutionProfilesInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutionProfilesExecutionProfilesInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurations.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurations.java index 2d79fadff6..f0e0d70037 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurations.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurations.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurationsExecutorConfigurationsInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurationsExecutorConfigurationsInner.java index c91e0416c7..815844ba9a 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurationsExecutorConfigurationsInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfExecutorConfigurationsExecutorConfigurationsInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfRunningJobsInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfRunningJobsInner.java index 57dcc1d9d6..4f9171dc82 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfRunningJobsInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfRunningJobsInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfSignupsInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfSignupsInner.java index 3374ac30f7..190fa084c7 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfSignupsInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiListOfSignupsInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfiguration.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfiguration.java index 647ef34737..b6172bee8d 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfiguration.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfiguration.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfigurationEntriesInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfigurationEntriesInner.java index 76492685fd..2ed8238c91 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfigurationEntriesInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiMappingConfigurationEntriesInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProject.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProject.java index ca2749fdc1..d9a79cbeaa 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProject.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProject.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetails.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetails.java index 804fcc19af..39e2031155 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetails.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetails.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetailsMetaData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetailsMetaData.java index 4f9b033700..d13f9736cc 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetailsMetaData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectDetailsMetaData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobList.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobList.java index e6f6dfd22a..887de15744 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobList.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobList.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInner.java index f8cd449819..c2bf469de2 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInnerMetaData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInnerMetaData.java index 27b7451bbd..cfee995adc 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInnerMetaData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectJobListContentInnerMetaData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaData.java index 852a63db0f..ef2447a651 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaDataMetaData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaDataMetaData.java index 7d3f767689..18f08e3e24 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaDataMetaData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectMetaDataMetaData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectScanLogsInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectScanLogsInner.java index 6d768d5cad..3638205021 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectScanLogsInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectScanLogsInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhiteList.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhiteList.java index ec6a8972c1..20828f69f6 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhiteList.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhiteList.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdate.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdate.java index f19b7d9919..2aa295957b 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdate.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdate.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdateWhiteList.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdateWhiteList.java index 4c6bb9faa2..20bac0d9e1 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdateWhiteList.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiProjectWhitelistUpdateWhiteList.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJob.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJob.java index 9e5499a371..1bd0283c9a 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJob.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJob.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScan.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScan.java index bbe7869e97..6b1dbf54a0 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScan.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScan.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScanFileSystem.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScanFileSystem.java index a43cde14a4..30302795bf 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScanFileSystem.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobCodeScanFileSystem.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobData.java index c296c58ba3..35a3547d54 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInner.java index 1db270c43a..d1713491d4 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInnerFileSystem.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInnerFileSystem.java index e8b715fa7f..1257e81891 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInnerFileSystem.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataBinariesInnerFileSystem.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInner.java index c3cf730560..54cf975f4b 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInnerFileSystem.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInnerFileSystem.java index a8abd03f4c..98b6c66fd0 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInnerFileSystem.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobDataSourcesInnerFileSystem.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobInfraScan.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobInfraScan.java index 70d1b7d354..08b5505b2e 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobInfraScan.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobInfraScan.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobLicenseScan.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobLicenseScan.java index e0ff7546dc..bec42d426e 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobLicenseScan.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobLicenseScan.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobSecretScan.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobSecretScan.java index 8fe0bb793e..695c2ebc48 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobSecretScan.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobSecretScan.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScan.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScan.java index 0d46140675..dc3c4f2ae2 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScan.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScan.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanApi.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanApi.java index 4503985dac..0843d250e6 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanApi.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanApi.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanClientCertificate.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanClientCertificate.java index 49ebf559d3..8a12a32bd4 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanClientCertificate.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanClientCertificate.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanHeadersInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanHeadersInner.java index 20c62d9614..56f2d2f796 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanHeadersInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanHeadersInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLogin.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLogin.java index 8b84175860..52ba8d1bf1 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLogin.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLogin.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginBasic.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginBasic.java index 7907b88e32..3f218daf55 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginBasic.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginBasic.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginForm.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginForm.java index 83709e4a99..3dd4e4f016 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginForm.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginForm.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScript.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScript.java index b060351f41..7f6383319d 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScript.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScript.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInner.java index f918601154..d497fb6f01 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInnerActionsInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInnerActionsInner.java index 4dd94e30a3..c53301a3dc 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInnerActionsInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanLoginFormScriptPagesInnerActionsInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanMaxScanDuration.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanMaxScanDuration.java index 88fb6968fc..ff3587c58a 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanMaxScanDuration.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiScanJobWebScanMaxScanDuration.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiServerRuntimeData.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiServerRuntimeData.java index 8862e574ca..2f1d15a948 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiServerRuntimeData.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiServerRuntimeData.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiStatusInformationInner.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiStatusInformationInner.java index 249ae2c8ae..5b15f8c3bd 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiStatusInformationInner.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiStatusInformationInner.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserDetails.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserDetails.java index 3d6bf17ed1..798a1d31ed 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserDetails.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserDetails.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserSignup.java b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserSignup.java index 8f90ccf844..916cd0f4c4 100644 --- a/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserSignup.java +++ b/sechub-api-java/src/main/java/com/mercedesbenz/sechub/api/internal/gen/model/OpenApiUserSignup.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT /* * SecHub API * SecHub API description diff --git a/sechub-api-java/src/main/resources/openapi.yaml b/sechub-api-java/src/main/resources/openapi.yaml index 3774a5223a..a45ffa07d3 100644 --- a/sechub-api-java/src/main/resources/openapi.yaml +++ b/sechub-api-java/src/main/resources/openapi.yaml @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: MIT openapi: 3.0.1 info: description: SecHub API description diff --git a/sechub-commons-archive/src/main/java/com/mercedesbenz/sechub/commons/archive/SafeArchiveInputStream.java b/sechub-commons-archive/src/main/java/com/mercedesbenz/sechub/commons/archive/SafeArchiveInputStream.java index 5d2e0571ae..fe1b6530ee 100644 --- a/sechub-commons-archive/src/main/java/com/mercedesbenz/sechub/commons/archive/SafeArchiveInputStream.java +++ b/sechub-commons-archive/src/main/java/com/mercedesbenz/sechub/commons/archive/SafeArchiveInputStream.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.commons.archive; import static java.util.Objects.requireNonNull; diff --git a/sechub-openapi-java/src/main/resources/openapi.yaml b/sechub-openapi-java/src/main/resources/openapi.yaml index 5e8f9fec61..446e5cad94 100644 --- a/sechub-openapi-java/src/main/resources/openapi.yaml +++ b/sechub-openapi-java/src/main/resources/openapi.yaml @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: MIT openapi: 3.0.3 info: diff --git a/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupport.java b/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupport.java index 7384f0e535..da10ef1199 100644 --- a/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupport.java +++ b/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupport.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.wrapper.prepare; import static com.mercedesbenz.sechub.wrapper.prepare.cli.PrepareWrapperKeyConstants.*; diff --git a/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperSystemPropertySupport.java b/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperSystemPropertySupport.java index d5702fa588..ffc7ff8e4f 100644 --- a/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperSystemPropertySupport.java +++ b/sechub-wrapper-prepare/src/main/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperSystemPropertySupport.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.wrapper.prepare; import org.springframework.stereotype.Component; diff --git a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationGitManualTest.java b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationGitManualTest.java index 50ffa35595..57ecdbb5d8 100644 --- a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationGitManualTest.java +++ b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationGitManualTest.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.wrapper.prepare; import org.junit.jupiter.api.BeforeAll; diff --git a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationSkopeoManualTest.java b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationSkopeoManualTest.java index bc1dca5044..d8769fd24c 100644 --- a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationSkopeoManualTest.java +++ b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperApplicationSkopeoManualTest.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.wrapper.prepare; import org.junit.jupiter.api.BeforeAll; diff --git a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperManualTestUtil.java b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperManualTestUtil.java index 5e2281c843..c9499bb773 100644 --- a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperManualTestUtil.java +++ b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperManualTestUtil.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.wrapper.prepare; import java.io.File; diff --git a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupportTest.java b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupportTest.java index 17455fbfb5..c329a04165 100644 --- a/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupportTest.java +++ b/sechub-wrapper-prepare/src/test/java/com/mercedesbenz/sechub/wrapper/prepare/PrepareWrapperProxySupportTest.java @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.wrapper.prepare; import static org.junit.jupiter.api.Assertions.*; From ec4bfa1e4c9c5e4ed3dc0d7b3e50a53db22eb940 Mon Sep 17 00:00:00 2001 From: "haerter-tss (via github-actions)" Date: Wed, 10 Jul 2024 13:59:13 +0000 Subject: [PATCH 11/50] docs update by SecHub release job @github-actions --- .../images/diagram_pds_events_storage.svg | 2 +- .../diagram_sechub_job_cancellation.svg | 2 +- .../images/diagram_target_architecture.svg | 2 +- ...w_uc_admin_unassigns_user_from_project.svg | 2 +- ...ing_auto_cleanup_configuration_changed.svg | 2 +- ...en_domain_messaging_binary_upload_done.svg | 2 +- ...ain_messaging_job_cancellation_running.svg | 2 +- .../gen_domain_messaging_job_created.svg | 2 +- .../images/gen_domain_messaging_job_done.svg | 2 +- ...omain_messaging_job_execution_starting.svg | 2 +- .../gen_domain_messaging_job_failed.svg | 2 +- ..._domain_messaging_job_restart_canceled.svg | 2 +- ...domain_messaging_job_restart_triggered.svg | 2 +- ...en_domain_messaging_job_results_purged.svg | 2 +- .../gen_domain_messaging_job_started.svg | 2 +- ...essaging_mapping_configuration_changed.svg | 2 +- .../images/gen_domain_messaging_overview.svg | 2 +- ...roduct_executor_cancel_operations_done.svg | 2 +- ...messaging_project_access_level_changed.svg | 2 +- .../gen_domain_messaging_project_created.svg | 2 +- .../gen_domain_messaging_project_deleted.svg | 2 +- ...domain_messaging_project_owner_changed.svg | 2 +- ...in_messaging_project_whitelist_updated.svg | 2 +- ...ain_messaging_request_job_cancellation.svg | 2 +- ...n_domain_messaging_request_job_restart.svg | 2 +- ...ain_messaging_request_job_restart_hard.svg | 2 +- ...in_messaging_request_purge_job_results.svg | 2 +- ...quest_scheduler_disable_job_processing.svg | 2 +- ...equest_scheduler_enable_job_processing.svg | 2 +- ...messaging_request_scheduler_job_status.svg | 2 +- ...saging_request_scheduler_status_update.svg | 2 +- ...saging_request_user_role_recalculation.svg | 2 +- ...ging_scheduler_job_processing_disabled.svg | 2 +- ...aging_scheduler_job_processing_enabled.svg | 2 +- ..._domain_messaging_scheduler_job_status.svg | 2 +- ...gen_domain_messaging_scheduler_started.svg | 2 +- ...main_messaging_scheduler_status_update.svg | 2 +- ...en_domain_messaging_source_upload_done.svg | 2 +- .../gen_domain_messaging_start_scan.svg | 2 +- ...domain_messaging_user_added_to_project.svg | 2 +- ...omain_messaging_user_api_token_changed.svg | 2 +- ...main_messaging_user_becomes_superadmin.svg | 2 +- .../gen_domain_messaging_user_created.svg | 2 +- .../gen_domain_messaging_user_deleted.svg | 2 +- ...n_messaging_user_email_address_changed.svg | 2 +- ...messaging_user_new_api_token_requested.svg | 2 +- ...in_messaging_user_no_longer_superadmin.svg | 2 +- ...in_messaging_user_removed_from_project.svg | 2 +- ...en_domain_messaging_user_roles_changed.svg | 2 +- ...domain_messaging_user_signup_requested.svg | 2 +- docs/latest/images/gen_springprofiles-dev.svg | 2 +- .../gen_springprofiles-integrationtest.svg | 2 +- .../latest/images/gen_springprofiles-prod.svg | 2 +- docs/latest/images/gen_springprofiles.svg | 2 +- ...J-server-application-run-configuration.png | Bin 0 -> 79876 bytes .../latest/images/intelliJ_javac_compiler.png | Bin 0 -> 83320 bytes .../intelliJ_run_configurations_edit.png | Bin 0 -> 14840 bytes .../intelliJ_switch_to_intelliJ_compiler.png | Bin 0 -> 89895 bytes .../latest/images/remote_data_preparation.png | Bin 0 -> 161066 bytes docs/latest/pds-download.html | 2 +- docs/latest/sechub-architecture.html | 243 ++++++------ docs/latest/sechub-client.html | 195 +++++++++- .../sechub-developer-quickstart-guide.html | 357 ++++++++++++++++-- docs/latest/sechub-getting-started.html | 6 +- docs/latest/sechub-operations.html | 81 ++-- .../sechub-product-delegation-server.html | 210 +++++++---- docs/latest/sechub-restapi.html | 313 +++++++++++---- docs/latest/sechub-techdoc.html | 314 ++++++++------- docs/latest/sechub-tutorials.html | 6 +- docs/latest/server-download.html | 2 +- 70 files changed, 1325 insertions(+), 512 deletions(-) create mode 100644 docs/latest/images/intelliJ-server-application-run-configuration.png create mode 100644 docs/latest/images/intelliJ_javac_compiler.png create mode 100644 docs/latest/images/intelliJ_run_configurations_edit.png create mode 100644 docs/latest/images/intelliJ_switch_to_intelliJ_compiler.png create mode 100644 docs/latest/images/remote_data_preparation.png diff --git a/docs/latest/images/diagram_pds_events_storage.svg b/docs/latest/images/diagram_pds_events_storage.svg index 7c258467ba..f60aa33e0f 100644 --- a/docs/latest/images/diagram_pds_events_storage.svg +++ b/docs/latest/images/diagram_pds_events_storage.svg @@ -1 +1 @@ -$workspace/$jobUUID/eventsPDS-Job-QueuelauncherScriptEvent FilePDSWorkspaceServicevoid sendEvent(UUID jobUUID, ExecutionEventType eventType,ExecutionEventData eventData)ExecutionEventData fetchEventDataOrNull(UUID jobUUID, ExecutionEventType eventType) {ExecutionEventDataPDSExecutionCallableFactoryPDSExecutionCallablePDSBatchTriggerServicevoid triggerExecutionOfNextJob()PDSJobCancelTriggerServicevoid triggerHandleCancelRequests()PDSCancelServicevoid handleJobCancelRequests()PDSExecutionServiceInside the event folder we havefiles with name pattern"${eventTypeName}.json". Someevents have only one file.Remark: Currently not implemented,but if an event type shall supports multiplefiles in fture the name pattern shall be:"${eventTypeName}[${nr}].json"cancel job by job UUIDcreatescreates/useswrites/reads event filesinto workspace foldercontains files whichhave JSOn contentcan readcreates processprepares workspace, sends eventscallsuses \ No newline at end of file +$workspace/$jobUUID/eventsPDS-Job-QueuelauncherScriptEvent FilePDSWorkspaceServicevoid sendEvent(UUID jobUUID, ExecutionEventType eventType,ExecutionEventData eventData)ExecutionEventData fetchEventDataOrNull(UUID jobUUID, ExecutionEventType eventType) {ExecutionEventDataPDSExecutionCallableFactoryPDSExecutionCallablePDSBatchTriggerServicevoid triggerExecutionOfNextJob()PDSJobCancelTriggerServicevoid triggerHandleCancelRequests()PDSCancelServicevoid handleJobCancelRequests()PDSExecutionServiceInside the event folder we havefiles with name pattern"${eventTypeName}.json". Someevents have only one file.Remark: Currently not implemented,but if an event type shall supports multiplefiles in fture the name pattern shall be:"${eventTypeName}[${nr}].json"cancel job by job UUIDcreatescreates/useswrites/reads event filesinto workspace foldercontains files whichhave JSOn contentcan readcreates processprepares workspace, sends eventscallsuses \ No newline at end of file diff --git a/docs/latest/images/diagram_sechub_job_cancellation.svg b/docs/latest/images/diagram_sechub_job_cancellation.svg index 8858a3cf3f..02671e84c8 100644 --- a/docs/latest/images/diagram_sechub_job_cancellation.svg +++ b/docs/latest/images/diagram_sechub_job_cancellation.svg @@ -1 +1 @@ -Event Nr.Message IDWhat happens at this event ?A1START_SCANScan - runningB1REQUEST_SCHEDULER_JOB_STATUSScan - periodic inspection if scheduler job marked as cancel requestedC1REQUEST_JOB_CANCELLATIONCancel request startedD1CANCELLATION_RUNNINGCancel scan running/ ongoingE1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEProduct execucutor cancel operations have finished (post processing donecom.mercedesbenz.sechub.domain.schedulecom.mercedesbenz.sechub.sharedkernelcom.mercedesbenz.sechub.domain.scancom.mercedesbenz.sechub.domain.administrationcom.mercedesbenz.sechub.domain.notification«Entity»ScheduleSecHubJobExecutionStateINITIALIZINGREADY_TO_STARTSTARTEDCANCEL_REQUESTEDCANCELEDENDEDExecutionResultNONEOKFAILEDSynchronSecHubJobExecutorSchedulerJobStatusRequestHandlerScheduleJobLauncherServiceSchedulerJobBatchTriggerServiceScheduleMessagehandlerhandleCancelJobRequested()SchedulerCancelJobServiceThe steps- D*are only triggered when the SecHub job hasthe execution result NONE.The execution state isnotinspected.DomainMessageServiceEventBus«Entity»ProductResultUUID uuidUUID secHubJobUUIDUUID productExecutorConfigUUIDString resultString messagesString metaDataLocalDateTime startedLocalDateTime endedSecHubExecutionContextmarkCancelRequested()ScanProgressMonitorProductExecutorList<ProductResult> execute(SecHubExecutionContext context, ProductExecutorContext executorContext)ScanServicestartScan()ScanJobExecutorScanJobExecutionRunnableScanJobCancellationRunnableAdapterAdapterExecutionResult start(C config, AdapterMetaDataCallback callback)boolean cancel(C config, AdapterMetaDataCallback callback)ProductExecutionStoreServiceexecuteProductsAndStoreResults(SecHubExecutionContext context)AbstractProductExecutionServiceAbstractProductExecutorCanceableProductExecutorboolean cancel(ProductExecutorData data)ScanJobRunnableDataProductExecutorDataSecHubExecutionHistorySecHubExecutionHistoryElementThe scan job executor is central point ofthe scan steep in scan domain.It does the start of the scan itself anddoes also periodically the inspect the schedulerjob status via event busExecutorThreadCancellationThreadJobAdministrationRestControllerJobAdministrationMessageHandlerJobCancelServiceNotificationMessageHandlerProcuctIs used to have eventcommunications between domainssends async REQUEST_JOB_CANCELLATION (C1)sends async CANCELLATION_RUNNING (D1)sends async CANCELLATION_RUNNING (D1)stores resultusescalls cancel servicebecause of C2marks as CANCEL_REQUESTED (C3)callssends async CANCELLATION_RUNNING (D1)sends async REQUEST_JOB_CANCELLATION (C1)receives "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRONsends synch REQUEST_SCHEDULER_JOB_STATUS (B1)set SecHub job finally as CANCELEDcreatesusesstores resultsusescallsusesconfigures and usesusescreates + uses (A3)runsinterrupts ExecutorThreadwhen being canceled.This immediately interrupts all product calls hard.runscreatescancelsstartscreates if necessarystarts when necessarycreates contextcreatesmarks as cancel requestedso available in product executorscallsuses information aboutproduct executors and datasends "START_SCAN" (A1) SYNCHRONsends synchron REQUEST_SCHEDULER_JOB_STATUS (B1)and receives job statusrecevies "START_SCAN" (A2) SYNCHRON (returns result)communicationsends "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRON \ No newline at end of file +Event Nr.Message IDWhat happens at this event ?A1START_SCANScan - runningB1REQUEST_SCHEDULER_JOB_STATUSScan - periodic inspection if scheduler job marked as cancel requestedC1REQUEST_JOB_CANCELLATIONCancel request startedD1CANCELLATION_RUNNINGCancel scan running/ ongoingE1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEProduct execucutor cancel operations have finished (post processing donecom.mercedesbenz.sechub.domain.schedulecom.mercedesbenz.sechub.sharedkernelcom.mercedesbenz.sechub.domain.scancom.mercedesbenz.sechub.domain.administrationcom.mercedesbenz.sechub.domain.notification«Entity»ScheduleSecHubJobExecutionStateINITIALIZINGREADY_TO_STARTSTARTEDCANCEL_REQUESTEDCANCELEDENDEDExecutionResultNONEOKFAILEDSynchronSecHubJobExecutorSchedulerJobStatusRequestHandlerScheduleJobLauncherServiceSchedulerJobBatchTriggerServiceScheduleMessagehandlerhandleCancelJobRequested()SchedulerCancelJobServiceThe steps- D*are only triggered when the SecHub job hasthe execution result NONE.The execution state isnotinspected.DomainMessageServiceEventBus«Entity»ProductResultUUID uuidUUID secHubJobUUIDUUID productExecutorConfigUUIDString resultString messagesString metaDataLocalDateTime startedLocalDateTime endedSecHubExecutionContextmarkCancelRequested()ScanProgressMonitorProductExecutorList<ProductResult> execute(SecHubExecutionContext context, ProductExecutorContext executorContext)ScanServicestartScan()ScanJobExecutorScanJobExecutionRunnableScanJobCancellationRunnableAdapterAdapterExecutionResult start(C config, AdapterMetaDataCallback callback)boolean cancel(C config, AdapterMetaDataCallback callback)ProductExecutionStoreServiceexecuteProductsAndStoreResults(SecHubExecutionContext context)AbstractProductExecutionServiceAbstractProductExecutorCanceableProductExecutorboolean cancel(ProductExecutorData data)ScanJobRunnableDataProductExecutorDataSecHubExecutionHistorySecHubExecutionHistoryElementThe scan job executor is central point ofthe scan steep in scan domain.It does the start of the scan itself anddoes also periodically the inspect the schedulerjob status via event busExecutorThreadCancellationThreadJobAdministrationRestControllerJobAdministrationMessageHandlerJobCancelServiceNotificationMessageHandlerProcuctIs used to have eventcommunications between domainssends async REQUEST_JOB_CANCELLATION (C1)sends async CANCELLATION_RUNNING (D1)sends async CANCELLATION_RUNNING (D1)stores resultusescalls cancel servicebecause of C2marks as CANCEL_REQUESTED (C3)callssends async CANCELLATION_RUNNING (D1)sends async REQUEST_JOB_CANCELLATION (C1)receives "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRONsends synch REQUEST_SCHEDULER_JOB_STATUS (B1)set SecHub job finally as CANCELEDcreatesusesstores resultsusescallsusesconfigures and usesusescreates + uses (A3)runsinterrupts ExecutorThreadwhen being canceled.This immediately interrupts all product calls hard.runscreatescancelsstartscreates if necessarystarts when necessarycreates contextcreatesmarks as cancel requestedso available in product executorscallsuses information aboutproduct executors and datasends "START_SCAN" (A1) SYNCHRONsends synchron REQUEST_SCHEDULER_JOB_STATUS (B1)and receives job statusrecevies "START_SCAN" (A2) SYNCHRON (returns result)communicationsends "PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE" (E1) ASYNCHRON \ No newline at end of file diff --git a/docs/latest/images/diagram_target_architecture.svg b/docs/latest/images/diagram_target_architecture.svg index d521998e7b..5ce19c0f7d 100644 --- a/docs/latest/images/diagram_target_architecture.svg +++ b/docs/latest/images/diagram_target_architecture.svg @@ -1 +1 @@ -ProductExecutorList<ProductResult> execute()ScanType getScanType()int getVersion()boolean isMultipleConfigurationAllowed()SerecoReportProductExecutorProductExecutorDataNetworkLocationProviderList<URI> getURIs();List<InetAddress> getInetAdresses();NetworkTargetProductServerDataProviderString getIdentifierWhenInternetTarget();String getIdentifierWhenIntranetTarget();String getBaseURLWhenInternetTarget();String getBaseURLWhenIntranetTarget();String getUsernameWhenInternetTarget();String getUsernameWhenIntranetTarget();String getPasswordWhenInternetTarget();String getPasswordWhenIntranetTarget();boolean hasUntrustedCertificateWhenIntranetTarget();boolean hasUntrustedCertificateWhenInternetTarget();NetworkTargetInfoNetworkTargetType getNetworkTargetType()Set<URI> getNetworkTargetURIs()Set<InetAddress> getNetworkTargetIPs()AbstractProductExecutorabstract void customize(ProductExecutorData data);abstract List<ProductResult> executeByAdapter(ProductExecutorData data)NetworkTargetResolverNetworkTarget resolveTarget(URI uri);NetworkTarget resolveTarget(InetAddress inetAdress);The base class for mostly all product executors (except for Sereco).The child classes must implmemnt the `customize` method andconfigure the product executor data object accordingly.It will handle automatically target specific partsfor scan types where it is necessary (WebScan, InfraScan).All other scan types (e.g. CodeScan) do notneed to setup specific product executor data(like NetworkLocationProvider).NetworkTargetgetURI()getInetAdress()NetworkTargetType getType()Represents a network targetto use for a dedicated network typeNetworkTargetTypeNetworkTargetRegistryNetworkTargetInfoFactoryNetworkTargetInfo createInfo()Represents (final) information about whichURIs /IPs are for a dedicated networktarget type (e.g. INTERNET).NetworkTargetProductServerDataSuppportString getIdentifier(NetworkTargetType target)boolean isAbletoScan(NetworkTargetType target)String getBaseURL(NetworkTargetType type)String getUserId(NetworkTargetType type)String getPassword(NetworkTargetType target)Data normally comes fromsechub configurationData normally comes from aninstall setupcreates + customizesusesuses data supportcreate+use (if necessary)create+use (if necessary)internally created + usedusesusescontains1nprovides \ No newline at end of file +ProductExecutorList<ProductResult> execute()ScanType getScanType()int getVersion()boolean isMultipleConfigurationAllowed()SerecoReportProductExecutorProductExecutorDataNetworkLocationProviderList<URI> getURIs();List<InetAddress> getInetAdresses();NetworkTargetProductServerDataProviderString getIdentifierWhenInternetTarget();String getIdentifierWhenIntranetTarget();String getBaseURLWhenInternetTarget();String getBaseURLWhenIntranetTarget();String getUsernameWhenInternetTarget();String getUsernameWhenIntranetTarget();String getPasswordWhenInternetTarget();String getPasswordWhenIntranetTarget();boolean hasUntrustedCertificateWhenIntranetTarget();boolean hasUntrustedCertificateWhenInternetTarget();NetworkTargetInfoNetworkTargetType getNetworkTargetType()Set<URI> getNetworkTargetURIs()Set<InetAddress> getNetworkTargetIPs()AbstractProductExecutorabstract void customize(ProductExecutorData data);abstract List<ProductResult> executeByAdapter(ProductExecutorData data)NetworkTargetResolverNetworkTarget resolveTarget(URI uri);NetworkTarget resolveTarget(InetAddress inetAdress);The base class for mostly all product executors (except for Sereco).The child classes must implmemnt the `customize` method andconfigure the product executor data object accordingly.It will handle automatically target specific partsfor scan types where it is necessary (WebScan, InfraScan).All other scan types (e.g. CodeScan) do notneed to setup specific product executor data(like NetworkLocationProvider).NetworkTargetgetURI()getInetAdress()NetworkTargetType getType()Represents a network targetto use for a dedicated network typeNetworkTargetTypeNetworkTargetRegistryNetworkTargetInfoFactoryNetworkTargetInfo createInfo()Represents (final) information about whichURIs /IPs are for a dedicated networktarget type (e.g. INTERNET).NetworkTargetProductServerDataSuppportString getIdentifier(NetworkTargetType target)boolean isAbletoScan(NetworkTargetType target)String getBaseURL(NetworkTargetType type)String getUserId(NetworkTargetType type)String getPassword(NetworkTargetType target)Data normally comes fromsechub configurationData normally comes from aninstall setupcreates + customizesusesuses data supportcreate+use (if necessary)create+use (if necessary)internally created + usedusesusescontains1nprovides \ No newline at end of file diff --git a/docs/latest/images/event_overview_uc_admin_unassigns_user_from_project.svg b/docs/latest/images/event_overview_uc_admin_unassigns_user_from_project.svg index 282852d6a7..ae98eb91be 100644 --- a/docs/latest/images/event_overview_uc_admin_unassigns_user_from_project.svg +++ b/docs/latest/images/event_overview_uc_admin_unassigns_user_from_project.svg @@ -1 +1 @@ -UC_ADMIN_UNASSIGNS_USER_FROM_PROJECTadministrationauthorizationscanschedule0executedUSER_REMOVED_FROM_PROJECTUSER_REMOVED_FROM_PROJECT1REQUEST_USER_ROLE_RECALCULATION2USER_ROLES_CHANGED \ No newline at end of file +UC_ADMIN_UNASSIGNS_USER_FROM_PROJECTadministrationauthorizationscanschedule0executedUSER_REMOVED_FROM_PROJECTUSER_REMOVED_FROM_PROJECT1REQUEST_USER_ROLE_RECALCULATION2USER_ROLES_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg b/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg index ebf043b6c2..8b3a03128c 100644 --- a/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg +++ b/docs/latest/images/gen_domain_messaging_auto_cleanup_configuration_changed.svg @@ -1 +1 @@ -Communication detailsofmessage AUTO_CLEANUP_CONFIGURATION_CHANGEDschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerJobAdministrationMessageHandlerAdministrationConfigService1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED \ No newline at end of file +Communication detailsofmessage AUTO_CLEANUP_CONFIGURATION_CHANGEDadministrationscanscheduleEventBusAdministrationConfigServiceJobAdministrationMessageHandlerScanMessageHandlerScheduleMessageHandler1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_binary_upload_done.svg b/docs/latest/images/gen_domain_messaging_binary_upload_done.svg index eba3001b2b..9c1b12d5f9 100644 --- a/docs/latest/images/gen_domain_messaging_binary_upload_done.svg +++ b/docs/latest/images/gen_domain_messaging_binary_upload_done.svg @@ -1 +1 @@ -Communication detailsofmessage BINARY_UPLOAD_DONEschedulestatisticEventBusSchedulerBinariesUploadServiceStatisticMessageHandler1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE \ No newline at end of file +Communication detailsofmessage BINARY_UPLOAD_DONEschedulestatisticEventBusSchedulerBinariesUploadServiceStatisticMessageHandler1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg b/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg index 10024dd26d..757e8c6fcd 100644 --- a/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg +++ b/docs/latest/images/gen_domain_messaging_job_cancellation_running.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_CANCELLATION_RUNNINGscheduleadministrationnotificationEventBusSchedulerCancelJobServiceJobAdministrationMessageHandlerNotificationMessageHandler1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING \ No newline at end of file +Communication detailsofmessage JOB_CANCELLATION_RUNNINGadministrationschedulenotificationEventBusJobAdministrationMessageHandlerSchedulerCancelJobServiceNotificationMessageHandler1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_created.svg b/docs/latest/images/gen_domain_messaging_job_created.svg index 05bb4cc63a..2d72d85371 100644 --- a/docs/latest/images/gen_domain_messaging_job_created.svg +++ b/docs/latest/images/gen_domain_messaging_job_created.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_CREATEDschedulestatisticEventBusSchedulerCreateJobServiceStatisticMessageHandler1JOB_CREATED2JOB_CREATED \ No newline at end of file +Communication detailsofmessage JOB_CREATEDschedulestatisticEventBusSchedulerCreateJobServiceStatisticMessageHandler1JOB_CREATED2JOB_CREATED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_done.svg b/docs/latest/images/gen_domain_messaging_job_done.svg index 975b6de3e8..84dcb8a3a3 100644 --- a/docs/latest/images/gen_domain_messaging_job_done.svg +++ b/docs/latest/images/gen_domain_messaging_job_done.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_DONEschedulestatisticadministrationEventBusSynchronSecHubJobExecutorStatisticMessageHandlerJobAdministrationMessageHandler1JOB_DONE2JOB_DONE3JOB_DONE \ No newline at end of file +Communication detailsofmessage JOB_DONEadministrationschedulestatisticEventBusJobAdministrationMessageHandlerSynchronSecHubJobExecutorStatisticMessageHandler1JOB_DONE2JOB_DONE3JOB_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_execution_starting.svg b/docs/latest/images/gen_domain_messaging_job_execution_starting.svg index 9a5709c760..b4a9da9b6f 100644 --- a/docs/latest/images/gen_domain_messaging_job_execution_starting.svg +++ b/docs/latest/images/gen_domain_messaging_job_execution_starting.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_EXECUTION_STARTINGschedulestatisticEventBusSynchronSecHubJobExecutorStatisticMessageHandler1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING \ No newline at end of file +Communication detailsofmessage JOB_EXECUTION_STARTINGschedulestatisticEventBusSynchronSecHubJobExecutorStatisticMessageHandler1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_failed.svg b/docs/latest/images/gen_domain_messaging_job_failed.svg index 13c3ef2264..88a6f7f8c7 100644 --- a/docs/latest/images/gen_domain_messaging_job_failed.svg +++ b/docs/latest/images/gen_domain_messaging_job_failed.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_FAILEDschedulestatisticadministrationEventBusSynchronSecHubJobExecutorStatisticMessageHandlerJobAdministrationMessageHandler1JOB_FAILED2JOB_FAILED3JOB_FAILED \ No newline at end of file +Communication detailsofmessage JOB_FAILEDadministrationschedulestatisticEventBusJobAdministrationMessageHandlerSynchronSecHubJobExecutorStatisticMessageHandler1JOB_FAILED2JOB_FAILED3JOB_FAILED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg b/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg index eb842a74c5..7294b320e8 100644 --- a/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg +++ b/docs/latest/images/gen_domain_messaging_job_restart_canceled.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_RESTART_CANCELEDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED \ No newline at end of file +Communication detailsofmessage JOB_RESTART_CANCELEDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg b/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg index 019a5b92ac..9b04162f22 100644 --- a/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg +++ b/docs/latest/images/gen_domain_messaging_job_restart_triggered.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_RESTART_TRIGGEREDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED \ No newline at end of file +Communication detailsofmessage JOB_RESTART_TRIGGEREDschedulenotificationEventBusSchedulerRestartJobServiceNotificationMessageHandler1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_results_purged.svg b/docs/latest/images/gen_domain_messaging_job_results_purged.svg index cd3d31362b..87eb646c9f 100644 --- a/docs/latest/images/gen_domain_messaging_job_results_purged.svg +++ b/docs/latest/images/gen_domain_messaging_job_results_purged.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_RESULTS_PURGEDscannotificationEventBusProductResultServiceNotificationMessageHandler1JOB_RESULTS_PURGED2JOB_RESULTS_PURGED \ No newline at end of file +Communication detailsofmessage JOB_RESULTS_PURGEDscannotificationEventBusProductResultServiceNotificationMessageHandler1JOB_RESULTS_PURGED2JOB_RESULTS_PURGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_job_started.svg b/docs/latest/images/gen_domain_messaging_job_started.svg index ab312fce39..13eaf0eb48 100644 --- a/docs/latest/images/gen_domain_messaging_job_started.svg +++ b/docs/latest/images/gen_domain_messaging_job_started.svg @@ -1 +1 @@ -Communication detailsofmessage JOB_STARTEDscheduleadministrationEventBusScheduleJobLauncherServiceJobAdministrationMessageHandler1JOB_STARTED2JOB_STARTED \ No newline at end of file +Communication detailsofmessage JOB_STARTEDadministrationscheduleEventBusJobAdministrationMessageHandlerScheduleJobLauncherService1JOB_STARTED2JOB_STARTED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg b/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg index 2388d169d4..d85fec5b91 100644 --- a/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg +++ b/docs/latest/images/gen_domain_messaging_mapping_configuration_changed.svg @@ -1 +1 @@ -Communication detailsofmessage MAPPING_CONFIGURATION_CHANGEDscanadministrationEventBusScanMessageHandlerUpdateMappingService1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED \ No newline at end of file +Communication detailsofmessage MAPPING_CONFIGURATION_CHANGEDadministrationscanEventBusUpdateMappingServiceScanMessageHandler1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_overview.svg b/docs/latest/images/gen_domain_messaging_overview.svg index e9364b1854..d18dd1bd77 100644 --- a/docs/latest/images/gen_domain_messaging_overview.svg +++ b/docs/latest/images/gen_domain_messaging_overview.svg @@ -1 +1 @@ -Overviewof domainmessagingschedulescanstatisticadministrationnotificationauthorizationEventBusschedulescanstatisticadministrationnotificationauthorization1START_SCAN2START_SCANalt[failure]3UNSUPPORTED_OPERATION[success]4SCAN_DONE[failure]5SCAN_FAILED61USER_CREATED2USER_CREATED3USER_CREATED1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED1USER_NEW_API_TOKEN_REQUESTED2USER_NEW_API_TOKEN_REQUESTED3USER_NEW_API_TOKEN_REQUESTED1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT1USER_ROLES_CHANGED2USER_ROLES_CHANGED1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED1PROJECT_CREATED2PROJECT_CREATED1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED1JOB_CREATED2JOB_CREATED1JOB_STARTED2JOB_STARTED1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING1JOB_DONE2JOB_DONE3JOB_DONE1USER_SIGNUP_REQUESTED2USER_SIGNUP_REQUESTED1JOB_FAILED2JOB_FAILED3JOB_FAILED1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION1USER_BECOMES_SUPERADMIN2USER_BECOMES_SUPERADMIN1USER_NO_LONGER_SUPERADMIN2USER_NO_LONGER_SUPERADMIN1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED1JOB_RESULTS_PURGED2JOB_RESULTS_PURGED1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED51REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS41SCHEDULER_STARTED2SCHEDULER_STARTED1PROJECT_OWNER_CHANGED2PROJECT_OWNER_CHANGED1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED1USER_EMAIL_ADDRESS_CHANGED2USER_EMAIL_ADDRESS_CHANGED1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE1ANALYZE_SCAN_RESULTS_AVAILABLE2ANALYZE_SCAN_RESULTS_AVAILABLE1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE \ No newline at end of file +Overviewof domainmessagingadministrationscanauthorizationschedulestatisticnotificationEventBusadministrationscanauthorizationschedulestatisticnotification1START_SCAN2START_SCANalt[success]3SCAN_DONE[failure]4SCAN_FAILED[failure]5UNSUPPORTED_OPERATION61USER_CREATED2USER_CREATED3USER_CREATED1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED1USER_NEW_API_TOKEN_REQUESTED2USER_NEW_API_TOKEN_REQUESTED3USER_NEW_API_TOKEN_REQUESTED1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT1USER_ROLES_CHANGED2USER_ROLES_CHANGED1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED1PROJECT_CREATED2PROJECT_CREATED1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED1JOB_CREATED2JOB_CREATED1JOB_STARTED2JOB_STARTED1JOB_EXECUTION_STARTING2JOB_EXECUTION_STARTING1JOB_DONE2JOB_DONE3JOB_DONE1USER_SIGNUP_REQUESTED2USER_SIGNUP_REQUESTED1JOB_FAILED2JOB_FAILED3JOB_FAILED1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION1USER_BECOMES_SUPERADMIN2USER_BECOMES_SUPERADMIN1USER_NO_LONGER_SUPERADMIN2USER_NO_LONGER_SUPERADMIN1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION1JOB_CANCELLATION_RUNNING2JOB_CANCELLATION_RUNNING3JOB_CANCELLATION_RUNNING1MAPPING_CONFIGURATION_CHANGED2MAPPING_CONFIGURATION_CHANGED1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD1JOB_RESTART_TRIGGERED2JOB_RESTART_TRIGGERED1JOB_RESTART_CANCELED2JOB_RESTART_CANCELED1JOB_RESULTS_PURGED2JOB_RESULTS_PURGED1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED51REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS41SCHEDULER_STARTED2SCHEDULER_STARTED1PROJECT_OWNER_CHANGED2PROJECT_OWNER_CHANGED1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED1USER_EMAIL_ADDRESS_CHANGED2USER_EMAIL_ADDRESS_CHANGED1AUTO_CLEANUP_CONFIGURATION_CHANGED2AUTO_CLEANUP_CONFIGURATION_CHANGED3AUTO_CLEANUP_CONFIGURATION_CHANGED4AUTO_CLEANUP_CONFIGURATION_CHANGED1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE1ANALYZE_SCAN_RESULTS_AVAILABLE2ANALYZE_SCAN_RESULTS_AVAILABLE1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE1BINARY_UPLOAD_DONE2BINARY_UPLOAD_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg b/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg index 8b50069c6a..8847b44c80 100644 --- a/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg +++ b/docs/latest/images/gen_domain_messaging_product_executor_cancel_operations_done.svg @@ -1 +1 @@ -Communication detailsofmessage PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEschedulescanEventBusScheduleMessageHandlerScanJobCancellationRunnable1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE \ No newline at end of file +Communication detailsofmessage PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONEscanscheduleEventBusScanJobCancellationRunnableScheduleMessageHandler1PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE2PRODUCT_EXECUTOR_CANCEL_OPERATIONS_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg b/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg index 497c0f186c..5dbf9919d5 100644 --- a/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg +++ b/docs/latest/images/gen_domain_messaging_project_access_level_changed.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_ACCESS_LEVEL_CHANGEDschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerProjectChangeAccessLevelService1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED \ No newline at end of file +Communication detailsofmessage PROJECT_ACCESS_LEVEL_CHANGEDadministrationscanscheduleEventBusProjectChangeAccessLevelServiceScanMessageHandlerScheduleMessageHandler1PROJECT_ACCESS_LEVEL_CHANGED2PROJECT_ACCESS_LEVEL_CHANGED3PROJECT_ACCESS_LEVEL_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_created.svg b/docs/latest/images/gen_domain_messaging_project_created.svg index 283ba377cc..715f2e7406 100644 --- a/docs/latest/images/gen_domain_messaging_project_created.svg +++ b/docs/latest/images/gen_domain_messaging_project_created.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_CREATEDscheduleadministrationEventBusScheduleMessageHandlerProjectCreationService1PROJECT_CREATED2PROJECT_CREATED \ No newline at end of file +Communication detailsofmessage PROJECT_CREATEDadministrationscheduleEventBusProjectCreationServiceScheduleMessageHandler1PROJECT_CREATED2PROJECT_CREATED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_deleted.svg b/docs/latest/images/gen_domain_messaging_project_deleted.svg index b7d7dafd6a..db3c5cc336 100644 --- a/docs/latest/images/gen_domain_messaging_project_deleted.svg +++ b/docs/latest/images/gen_domain_messaging_project_deleted.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_DELETEDschedulescanadministrationnotificationEventBusScheduleMessageHandlerScanMessageHandlerProjectDeleteServiceNotificationMessageHandler1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED \ No newline at end of file +Communication detailsofmessage PROJECT_DELETEDadministrationscanschedulenotificationEventBusProjectDeleteServiceScanMessageHandlerScheduleMessageHandlerNotificationMessageHandler1PROJECT_DELETED2PROJECT_DELETED3PROJECT_DELETED4PROJECT_DELETED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_owner_changed.svg b/docs/latest/images/gen_domain_messaging_project_owner_changed.svg index cbb5ed8f27..02cba5eaef 100644 --- a/docs/latest/images/gen_domain_messaging_project_owner_changed.svg +++ b/docs/latest/images/gen_domain_messaging_project_owner_changed.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_OWNER_CHANGEDadministrationnotificationEventBusProjectChangeOwnerServiceNotificationMessageHandler1PROJECT_OWNER_CHANGED2PROJECT_OWNER_CHANGED \ No newline at end of file +Communication detailsofmessage PROJECT_OWNER_CHANGEDadministrationnotificationEventBusProjectChangeOwnerServiceNotificationMessageHandler1PROJECT_OWNER_CHANGED2PROJECT_OWNER_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg b/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg index 9099c1408b..75e18c4696 100644 --- a/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg +++ b/docs/latest/images/gen_domain_messaging_project_whitelist_updated.svg @@ -1 +1 @@ -Communication detailsofmessage PROJECT_WHITELIST_UPDATEDscheduleadministrationEventBusScheduleMessageHandlerProjectUpdateWhitelistService1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED \ No newline at end of file +Communication detailsofmessage PROJECT_WHITELIST_UPDATEDadministrationscheduleEventBusProjectUpdateWhitelistServiceScheduleMessageHandler1PROJECT_WHITELIST_UPDATED2PROJECT_WHITELIST_UPDATED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg b/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg index ddbc8262e9..9c28bd3b3e 100644 --- a/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg +++ b/docs/latest/images/gen_domain_messaging_request_job_cancellation.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_JOB_CANCELLATIONscheduleadministrationEventBusScheduleMessageHandlerJobCancelService1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION \ No newline at end of file +Communication detailsofmessage REQUEST_JOB_CANCELLATIONadministrationscheduleEventBusJobCancelServiceScheduleMessageHandler1REQUEST_JOB_CANCELLATION2REQUEST_JOB_CANCELLATION \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_job_restart.svg b/docs/latest/images/gen_domain_messaging_request_job_restart.svg index 5c87daab51..b96b2aa0de 100644 --- a/docs/latest/images/gen_domain_messaging_request_job_restart.svg +++ b/docs/latest/images/gen_domain_messaging_request_job_restart.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_JOB_RESTARTscheduleadministrationEventBusScheduleMessageHandlerJobRestartRequestService1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART \ No newline at end of file +Communication detailsofmessage REQUEST_JOB_RESTARTadministrationscheduleEventBusJobRestartRequestServiceScheduleMessageHandler1REQUEST_JOB_RESTART2REQUEST_JOB_RESTART \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg b/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg index 1818a23446..87ffcde0e5 100644 --- a/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg +++ b/docs/latest/images/gen_domain_messaging_request_job_restart_hard.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_JOB_RESTART_HARDscheduleadministrationEventBusScheduleMessageHandlerJobRestartRequestService1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD \ No newline at end of file +Communication detailsofmessage REQUEST_JOB_RESTART_HARDadministrationscheduleEventBusJobRestartRequestServiceScheduleMessageHandler1REQUEST_JOB_RESTART_HARD2REQUEST_JOB_RESTART_HARD \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg b/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg index dfc75650f3..6bb8b3fb5e 100644 --- a/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg +++ b/docs/latest/images/gen_domain_messaging_request_purge_job_results.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_PURGE_JOB_RESULTSschedulescanEventBusSchedulerRestartJobServiceScanMessageHandler1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED5 \ No newline at end of file +Communication detailsofmessage REQUEST_PURGE_JOB_RESULTSscanscheduleEventBusScanMessageHandlerSchedulerRestartJobService1REQUEST_PURGE_JOB_RESULTS2REQUEST_PURGE_JOB_RESULTSalt[success]3JOB_RESULT_PURGE_DONE[failed]4JOB_RESULT_PURGE_FAILED5 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg index 1725f6bced..076e97c2fd 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_disable_job_processing.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_DISABLE_JOB_PROCESSINGscheduleadministrationEventBusScheduleMessageHandlerSwitchSchedulerJobProcessingService1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_DISABLE_JOB_PROCESSINGadministrationscheduleEventBusSwitchSchedulerJobProcessingServiceScheduleMessageHandler1REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING2REQUEST_SCHEDULER_DISABLE_JOB_PROCESSING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg index dc447cf5af..66d755f59f 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_enable_job_processing.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_ENABLE_JOB_PROCESSINGscheduleadministrationEventBusScheduleMessageHandlerSwitchSchedulerJobProcessingService1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_ENABLE_JOB_PROCESSINGadministrationscheduleEventBusSwitchSchedulerJobProcessingServiceScheduleMessageHandler1REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING2REQUEST_SCHEDULER_ENABLE_JOB_PROCESSING \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg index 456b84cad9..770656600e 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_job_status.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_JOB_STATUSschedulescanEventBusSchedulerJobStatusRequestHandlerScanProgressMonitor1REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS4 \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_JOB_STATUSscanscheduleEventBusScanProgressMonitorSchedulerJobStatusRequestHandler1REQUEST_SCHEDULER_JOB_STATUS2REQUEST_SCHEDULER_JOB_STATUS3SCHEDULER_JOB_STATUS4 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg b/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg index 38a99ffe06..dbf03a1b95 100644 --- a/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg +++ b/docs/latest/images/gen_domain_messaging_request_scheduler_status_update.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_SCHEDULER_STATUS_UPDATEscheduleadministrationEventBusScheduleMessageHandlerTriggerSchedulerStatusRefreshService1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE \ No newline at end of file +Communication detailsofmessage REQUEST_SCHEDULER_STATUS_UPDATEadministrationscheduleEventBusTriggerSchedulerStatusRefreshServiceScheduleMessageHandler1REQUEST_SCHEDULER_STATUS_UPDATE2REQUEST_SCHEDULER_STATUS_UPDATE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg b/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg index b3a9056efa..3d95b5833f 100644 --- a/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg +++ b/docs/latest/images/gen_domain_messaging_request_user_role_recalculation.svg @@ -1 +1 @@ -Communication detailsofmessage REQUEST_USER_ROLE_RECALCULATIONadministrationauthorizationEventBusUserRoleAdministrationMessageHandlerProjectChangeOwnerServiceProjectDeleteServiceProjectCreationServiceProjectUnassignUserServiceProjectAssignUserServiceUserGrantSuperAdminRightsServiceUserRevokeSuperAdminRightsServiceAuthUserCreationService1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION \ No newline at end of file +Communication detailsofmessage REQUEST_USER_ROLE_RECALCULATIONadministrationauthorizationEventBusUserRevokeSuperAdminRightsServiceUserGrantSuperAdminRightsServiceProjectCreationServiceProjectAssignUserServiceProjectUnassignUserServiceProjectDeleteServiceProjectChangeOwnerServiceUserRoleAdministrationMessageHandlerAuthUserCreationService1REQUEST_USER_ROLE_RECALCULATION2REQUEST_USER_ROLE_RECALCULATION3REQUEST_USER_ROLE_RECALCULATION4REQUEST_USER_ROLE_RECALCULATION5REQUEST_USER_ROLE_RECALCULATION6REQUEST_USER_ROLE_RECALCULATION7REQUEST_USER_ROLE_RECALCULATION8REQUEST_USER_ROLE_RECALCULATION9REQUEST_USER_ROLE_RECALCULATION \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg index 73db044693..1610fdf2f9 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_disabled.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_JOB_PROCESSING_DISABLEDscheduleadministrationnotificationEventBusSchedulerConfigServiceSchedulerAdministrationMessageHandlerNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED \ No newline at end of file +Communication detailsofmessage SCHEDULER_JOB_PROCESSING_DISABLEDadministrationschedulenotificationEventBusSchedulerAdministrationMessageHandlerSchedulerConfigServiceNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_DISABLED2SCHEDULER_JOB_PROCESSING_DISABLED3SCHEDULER_JOB_PROCESSING_DISABLED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg index 58ee3c5f01..8408e7dec3 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_job_processing_enabled.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_JOB_PROCESSING_ENABLEDscheduleadministrationnotificationEventBusSchedulerConfigServiceSchedulerAdministrationMessageHandlerNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED \ No newline at end of file +Communication detailsofmessage SCHEDULER_JOB_PROCESSING_ENABLEDadministrationschedulenotificationEventBusSchedulerAdministrationMessageHandlerSchedulerConfigServiceNotificationMessageHandler1SCHEDULER_JOB_PROCESSING_ENABLED2SCHEDULER_JOB_PROCESSING_ENABLED3SCHEDULER_JOB_PROCESSING_ENABLED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg b/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg index 8b38e1c31d..0f2627ab51 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_job_status.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_JOB_STATUSscheduleEventBusSchedulerJobStatusRequestHandler \ No newline at end of file +Communication detailsofmessage SCHEDULER_JOB_STATUSscheduleEventBusSchedulerJobStatusRequestHandler \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_started.svg b/docs/latest/images/gen_domain_messaging_scheduler_started.svg index 759b3f1901..9c48036c84 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_started.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_started.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_STARTEDschedulenotificationEventBusSchedulerStartHandlerNotificationMessageHandler1SCHEDULER_STARTED2SCHEDULER_STARTED \ No newline at end of file +Communication detailsofmessage SCHEDULER_STARTEDschedulenotificationEventBusSchedulerStartHandlerNotificationMessageHandler1SCHEDULER_STARTED2SCHEDULER_STARTED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg b/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg index 8cf1e156b1..18c12a76a7 100644 --- a/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg +++ b/docs/latest/images/gen_domain_messaging_scheduler_status_update.svg @@ -1 +1 @@ -Communication detailsofmessage SCHEDULER_STATUS_UPDATEscheduleadministrationEventBusSchedulerStatusServiceSchedulerAdministrationMessageHandler1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE \ No newline at end of file +Communication detailsofmessage SCHEDULER_STATUS_UPDATEadministrationscheduleEventBusSchedulerAdministrationMessageHandlerSchedulerStatusService1SCHEDULER_STATUS_UPDATE2SCHEDULER_STATUS_UPDATE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_source_upload_done.svg b/docs/latest/images/gen_domain_messaging_source_upload_done.svg index d916fc6a33..81db164ad3 100644 --- a/docs/latest/images/gen_domain_messaging_source_upload_done.svg +++ b/docs/latest/images/gen_domain_messaging_source_upload_done.svg @@ -1 +1 @@ -Communication detailsofmessage SOURCE_UPLOAD_DONEschedulestatisticEventBusSchedulerSourcecodeUploadServiceStatisticMessageHandler1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE \ No newline at end of file +Communication detailsofmessage SOURCE_UPLOAD_DONEschedulestatisticEventBusSchedulerSourcecodeUploadServiceStatisticMessageHandler1SOURCE_UPLOAD_DONE2SOURCE_UPLOAD_DONE \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_start_scan.svg b/docs/latest/images/gen_domain_messaging_start_scan.svg index fae7bc992f..9c28c68ee8 100644 --- a/docs/latest/images/gen_domain_messaging_start_scan.svg +++ b/docs/latest/images/gen_domain_messaging_start_scan.svg @@ -1 +1 @@ -Communication detailsofmessage START_SCANschedulescanEventBusSynchronSecHubJobExecutorScanService1START_SCAN2START_SCANalt[failure]3UNSUPPORTED_OPERATION[success]4SCAN_DONE[failure]5SCAN_FAILED6 \ No newline at end of file +Communication detailsofmessage START_SCANscanscheduleEventBusScanServiceSynchronSecHubJobExecutor1START_SCAN2START_SCANalt[success]3SCAN_DONE[failure]4SCAN_FAILED[failure]5UNSUPPORTED_OPERATION6 \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_added_to_project.svg b/docs/latest/images/gen_domain_messaging_user_added_to_project.svg index e61dd23201..c36a3bf16b 100644 --- a/docs/latest/images/gen_domain_messaging_user_added_to_project.svg +++ b/docs/latest/images/gen_domain_messaging_user_added_to_project.svg @@ -1 +1 @@ -Communication detailsofmessage USER_ADDED_TO_PROJECTschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerProjectAssignUserService1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT \ No newline at end of file +Communication detailsofmessage USER_ADDED_TO_PROJECTadministrationscanscheduleEventBusProjectAssignUserServiceScanMessageHandlerScheduleMessageHandler1USER_ADDED_TO_PROJECT2USER_ADDED_TO_PROJECT3USER_ADDED_TO_PROJECT \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg b/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg index 167bafcf89..8dba8e24d0 100644 --- a/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg +++ b/docs/latest/images/gen_domain_messaging_user_api_token_changed.svg @@ -1 +1 @@ -Communication detailsofmessage USER_API_TOKEN_CHANGEDadministrationnotificationauthorizationEventBusInternalInitialDataServiceAnonymousUserGetAPITokenByOneTimeTokenServiceNotificationMessageHandlerAuthMessageHandler1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED \ No newline at end of file +Communication detailsofmessage USER_API_TOKEN_CHANGEDadministrationauthorizationnotificationEventBusInternalInitialDataServiceAnonymousUserGetAPITokenByOneTimeTokenServiceAuthMessageHandlerNotificationMessageHandler1USER_API_TOKEN_CHANGED2USER_API_TOKEN_CHANGED3USER_API_TOKEN_CHANGED4USER_API_TOKEN_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_becomes_superadmin.svg b/docs/latest/images/gen_domain_messaging_user_becomes_superadmin.svg index a3d92eb8ca..e34fc0f82c 100644 --- a/docs/latest/images/gen_domain_messaging_user_becomes_superadmin.svg +++ b/docs/latest/images/gen_domain_messaging_user_becomes_superadmin.svg @@ -1 +1 @@ -Communication detailsofmessage USER_BECOMES_SUPERADMINadministrationnotificationEventBusUserGrantSuperAdminRightsServiceNotificationMessageHandler1USER_BECOMES_SUPERADMIN2USER_BECOMES_SUPERADMIN \ No newline at end of file +Communication detailsofmessage USER_BECOMES_SUPERADMINadministrationnotificationEventBusUserGrantSuperAdminRightsServiceNotificationMessageHandler1USER_BECOMES_SUPERADMIN2USER_BECOMES_SUPERADMIN \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_created.svg b/docs/latest/images/gen_domain_messaging_user_created.svg index b4cbe2c3cd..5d85a78461 100644 --- a/docs/latest/images/gen_domain_messaging_user_created.svg +++ b/docs/latest/images/gen_domain_messaging_user_created.svg @@ -1 +1 @@ -Communication detailsofmessage USER_CREATEDadministrationauthorizationEventBusInternalInitialDataServiceUserCreationServiceAuthMessageHandler1USER_CREATED2USER_CREATED3USER_CREATED \ No newline at end of file +Communication detailsofmessage USER_CREATEDadministrationauthorizationEventBusInternalInitialDataServiceUserCreationServiceAuthMessageHandler1USER_CREATED2USER_CREATED3USER_CREATED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_deleted.svg b/docs/latest/images/gen_domain_messaging_user_deleted.svg index 57e9e3a3f4..92248a3868 100644 --- a/docs/latest/images/gen_domain_messaging_user_deleted.svg +++ b/docs/latest/images/gen_domain_messaging_user_deleted.svg @@ -1 +1 @@ -Communication detailsofmessage USER_DELETEDschedulescanadministrationnotificationauthorizationEventBusScheduleMessageHandlerScanMessageHandlerUserDeleteServiceNotificationMessageHandlerAuthMessageHandler1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED \ No newline at end of file +Communication detailsofmessage USER_DELETEDadministrationscanauthorizationschedulenotificationEventBusUserDeleteServiceScanMessageHandlerAuthMessageHandlerScheduleMessageHandlerNotificationMessageHandler1USER_DELETED2USER_DELETED3USER_DELETED4USER_DELETED5USER_DELETED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_email_address_changed.svg b/docs/latest/images/gen_domain_messaging_user_email_address_changed.svg index cb7a2b8ab3..fbad5164fc 100644 --- a/docs/latest/images/gen_domain_messaging_user_email_address_changed.svg +++ b/docs/latest/images/gen_domain_messaging_user_email_address_changed.svg @@ -1 +1 @@ -Communication detailsofmessage USER_EMAIL_ADDRESS_CHANGEDadministrationnotificationEventBusUserEmailAddressUpdateServiceNotificationMessageHandler1USER_EMAIL_ADDRESS_CHANGED2USER_EMAIL_ADDRESS_CHANGED \ No newline at end of file +Communication detailsofmessage USER_EMAIL_ADDRESS_CHANGEDadministrationnotificationEventBusUserEmailAddressUpdateServiceNotificationMessageHandler1USER_EMAIL_ADDRESS_CHANGED2USER_EMAIL_ADDRESS_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_new_api_token_requested.svg b/docs/latest/images/gen_domain_messaging_user_new_api_token_requested.svg index 0ad430dec4..363defd999 100644 --- a/docs/latest/images/gen_domain_messaging_user_new_api_token_requested.svg +++ b/docs/latest/images/gen_domain_messaging_user_new_api_token_requested.svg @@ -1 +1 @@ -Communication detailsofmessage USER_NEW_API_TOKEN_REQUESTEDadministrationnotificationEventBusAnonymousUserRequestsNewApiTokenServiceUserCreationServiceNotificationMessageHandler1USER_NEW_API_TOKEN_REQUESTED2USER_NEW_API_TOKEN_REQUESTED3USER_NEW_API_TOKEN_REQUESTED \ No newline at end of file +Communication detailsofmessage USER_NEW_API_TOKEN_REQUESTEDadministrationnotificationEventBusAnonymousUserRequestsNewApiTokenServiceUserCreationServiceNotificationMessageHandler1USER_NEW_API_TOKEN_REQUESTED2USER_NEW_API_TOKEN_REQUESTED3USER_NEW_API_TOKEN_REQUESTED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_no_longer_superadmin.svg b/docs/latest/images/gen_domain_messaging_user_no_longer_superadmin.svg index bf9e1dbeb1..eebd74ffc4 100644 --- a/docs/latest/images/gen_domain_messaging_user_no_longer_superadmin.svg +++ b/docs/latest/images/gen_domain_messaging_user_no_longer_superadmin.svg @@ -1 +1 @@ -Communication detailsofmessage USER_NO_LONGER_SUPERADMINadministrationnotificationEventBusUserRevokeSuperAdminRightsServiceNotificationMessageHandler1USER_NO_LONGER_SUPERADMIN2USER_NO_LONGER_SUPERADMIN \ No newline at end of file +Communication detailsofmessage USER_NO_LONGER_SUPERADMINadministrationnotificationEventBusUserRevokeSuperAdminRightsServiceNotificationMessageHandler1USER_NO_LONGER_SUPERADMIN2USER_NO_LONGER_SUPERADMIN \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg b/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg index 7727f9554c..bf9e3a8454 100644 --- a/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg +++ b/docs/latest/images/gen_domain_messaging_user_removed_from_project.svg @@ -1 +1 @@ -Communication detailsofmessage USER_REMOVED_FROM_PROJECTschedulescanadministrationEventBusScheduleMessageHandlerScanMessageHandlerProjectUnassignUserService1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT \ No newline at end of file +Communication detailsofmessage USER_REMOVED_FROM_PROJECTadministrationscanscheduleEventBusProjectUnassignUserServiceScanMessageHandlerScheduleMessageHandler1USER_REMOVED_FROM_PROJECT2USER_REMOVED_FROM_PROJECT3USER_REMOVED_FROM_PROJECT \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_roles_changed.svg b/docs/latest/images/gen_domain_messaging_user_roles_changed.svg index 1f0a606fa0..675c846932 100644 --- a/docs/latest/images/gen_domain_messaging_user_roles_changed.svg +++ b/docs/latest/images/gen_domain_messaging_user_roles_changed.svg @@ -1 +1 @@ -Communication detailsofmessage USER_ROLES_CHANGEDadministrationauthorizationEventBusUserRoleCalculationServiceAuthMessageHandler1USER_ROLES_CHANGED2USER_ROLES_CHANGED \ No newline at end of file +Communication detailsofmessage USER_ROLES_CHANGEDadministrationauthorizationEventBusUserRoleCalculationServiceAuthMessageHandler1USER_ROLES_CHANGED2USER_ROLES_CHANGED \ No newline at end of file diff --git a/docs/latest/images/gen_domain_messaging_user_signup_requested.svg b/docs/latest/images/gen_domain_messaging_user_signup_requested.svg index ba2b1be810..fb2aac3596 100644 --- a/docs/latest/images/gen_domain_messaging_user_signup_requested.svg +++ b/docs/latest/images/gen_domain_messaging_user_signup_requested.svg @@ -1 +1 @@ -Communication detailsofmessage USER_SIGNUP_REQUESTEDadministrationnotificationEventBusAnonymousSignupCreateServiceNotificationMessageHandler1USER_SIGNUP_REQUESTED2USER_SIGNUP_REQUESTED \ No newline at end of file +Communication detailsofmessage USER_SIGNUP_REQUESTEDadministrationnotificationEventBusAnonymousSignupCreateServiceNotificationMessageHandler1USER_SIGNUP_REQUESTED2USER_SIGNUP_REQUESTED \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles-dev.svg b/docs/latest/images/gen_springprofiles-dev.svg index c097c1a384..2585c98b1e 100644 --- a/docs/latest/images/gen_springprofiles-dev.svg +++ b/docs/latest/images/gen_springprofiles-dev.svg @@ -1 +1 @@ -<dev>devpostgresadmin_accessreal_productsinitial_admin_predefinedh2defaultmocked_notificationslocalservermocked_products \ No newline at end of file +<dev>devh2initial_admin_predefinedmocked_notificationsadmin_accesspostgreslocalserverreal_productsmocked_productsdefault \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles-integrationtest.svg b/docs/latest/images/gen_springprofiles-integrationtest.svg index 53d38aafb5..a80559b2b5 100644 --- a/docs/latest/images/gen_springprofiles-integrationtest.svg +++ b/docs/latest/images/gen_springprofiles-integrationtest.svg @@ -1 +1 @@ -<integrationtest>integrationtestpostgresadmin_accessreal_productsh2initial_admin_staticdefaultmocked_notificationslocalservermocked_products \ No newline at end of file +<integrationtest>integrationtesth2mocked_notificationsinitial_admin_staticadmin_accesspostgreslocalserverreal_productsmocked_productsdefault \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles-prod.svg b/docs/latest/images/gen_springprofiles-prod.svg index d032068795..832b2c5475 100644 --- a/docs/latest/images/gen_springprofiles-prod.svg +++ b/docs/latest/images/gen_springprofiles-prod.svg @@ -1 +1 @@ -<prod>prodpostgresreal_productsserverdefaultinitial_admin_created \ No newline at end of file +<prod>prodpostgresreal_productsinitial_admin_createdserverdefault \ No newline at end of file diff --git a/docs/latest/images/gen_springprofiles.svg b/docs/latest/images/gen_springprofiles.svg index 7a26cd5507..8f80257010 100644 --- a/docs/latest/images/gen_springprofiles.svg +++ b/docs/latest/images/gen_springprofiles.svg @@ -1 +1 @@ -debugpostgresadmin_accessprodreal_productsinitial_admin_predefinedh2serverinitial_admin_staticdefaultinitial_admin_createdmocked_notificationsdevlocalservermocked_productsintegrationtesttest \ No newline at end of file +h2integrationtestdevinitial_admin_predefinedprodmocked_notificationsinitial_admin_staticadmin_accesspostgreslocalserverreal_productsinitial_admin_createdmocked_productsserverdebugdefaulttest \ No newline at end of file diff --git a/docs/latest/images/intelliJ-server-application-run-configuration.png b/docs/latest/images/intelliJ-server-application-run-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..08a024fb338a2b6852b17de1920643719bcbbb7c GIT binary patch literal 79876 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 _lTsCE%Z^>4yC^ht&ALz*Q60N3+prc-V-@6jCd- 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 Kt`O4w@xK6*!N8FK literal 0 HcmV?d00001 diff --git a/docs/latest/images/intelliJ_switch_to_intelliJ_compiler.png b/docs/latest/images/intelliJ_switch_to_intelliJ_compiler.png new file mode 100644 index 0000000000000000000000000000000000000000..4236ae7a1263332fe5f735cae546bc3bd16153ea GIT binary patch literal 89895 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 literal 0 HcmV?d00001 diff --git a/docs/latest/images/remote_data_preparation.png b/docs/latest/images/remote_data_preparation.png new file mode 100644 index 0000000000000000000000000000000000000000..a02bce2b7c70beefae8c33708bcce8007fd75c2f GIT binary patch literal 161066 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%0D6@aH}5G; zvv}S}U5UVu7`aXSxlINHn6Q(W);*Tbbqu6NbL+D331b;QodnkClkE1m=CVuT* z<{c0!rU{FPr{+aprXV@>Bsnvi#^->^xv=pW4vK71gC_Y-blh%MITJf7B*n~c-vfrr z=S9jX`tq)|r}1)|>I0hub*TfMj&6}4WSe+-<;uI-9~V*_GFeb=lG&B6cd3hfy7{?0 ze!56f&*v_;y2fPbgg=E6op@rxCEsjXi4IhjDHKIfrX6@7)?=5j^54~4iPdniY%fhe zj2gjKKkbwujg*U*+sN+@@v}PSfUZ@?O^Z#6yGv2lWs{CdYpqd>Ny|>=j`Z6$V*KY3{^=go|9!#s#}Mm_M$PtmMLCAjH6V6xaT z+u&jG`Hm^xw6J?ZI9_f;eQ0`_O#2{}&)4{*j~aH;rmr1^i*=k^aywv8fry(I9zTZ^ zQqYKx4sPzzY#Vf#p4VNb8~M$>wI{>ro#Ra6?lv`g5XHgxYJqPi+-_e4VvDvt}mSX<1-L}G4uE}-h>E}=Jy!51n>sm zul&0T`C`epnHA^|UYRA-ZasE%)B44&Ac&Qj4TOx}tQ_!s;g9upc4lFS_^;2El*qc_ zYo80uFQyJaFg4{FxDi~HVnm(}Up#N8-HX(*{EON>|HivVUv}#LMS2dpI~tSO6PbW> z1nPV;P~A7}BZtq&RCFV+4j#hYjK|`AOsGcnXm4LSUQYi?RP~5LEcHy`bePWVpH&O- z3EPaqQ27E9D-*8SV`Evu_hT(gIM1a#P>(vEzzaf?84R4V;-7wFqH87AVw3t78L?62!)}P zZaq@ZruIQ_Qd%N^;UggG-F5{{mU1m=^__l@z`XHZo7}RpFzE|AaUJT%AR;j;(wy6WA$^mDAX?3eTqX8+mS4 zp^BImpo9(G&wQ@uor8|UUNoaomdP^zVry;%%oy~9d50jF3>44<$1NjTbw^|6I|9K4 zj|5$xn>2G3hDJh9dz_U<@VR=0g=I(tK#hsB0%i`SS(_cBZ31KLKk^bm#4pG2kpKv$ zW8^T!!*E&RNhPt-f!|**2{%b^$K&)SV3#3X&pmYdZEu6l3pc9y1f+x&Z=$(fVuG?w zek=n{l4{wV;5iCp{S?;#*0)JV=R4A+2WtelWO2wI8QpW%isNBfwiG+Zf6 zv+kDylnMeGuc+M3Yn!WL)H6$^7)I@g7my87=F~w3QSpXxOd;{cF}Moj4gPRj zfs4c3*hU=fLw6kM>I7Dmq_}W;{V@1wOX_O)uRK!L(u1xyg`Ii;em$#A zd-1Gw;9c(;+=OBnofkdMq#`p5*U{ua1`-eYci-8oF>;xBY+kh2_UP$VGkNgSpHk43 zGQb4y2cccF>J7M87*rX!A5myrhjm&9w;mMJqAv2n=PrzcdKe<>c9g zQ4qrdo9s#4ZQ0=u;%Okzyh?3bVXzdh+DKTX1f1M)@?;b-dBLu;Y%(_a)72~6W&V1t zue*}b;oo99S{Pks~yZl}&ZPN~W-KM_9qt7W`+U>9 zY2L88ThF^M_xo=a#N4SJEILSmYk{5?tW=S^?mtj3C26|%dJCH*lN}9gb+T_awzPks z&ah88F^ktMY*BUGMNBGX6YfC}Ct@N+FVvBiv_!gXNY%XjHS$V%pXWEf z)JrZ3J9_Nv)N|#i#pD3}BuVe?LXstYK&J?6EoGtGt?J_Hj|CC3E|cY08w0B=$TjIF zAFnX%W$C@O5)pnHPaaGru9-R-7!()i{B_XPLGbtLPX|@k=z0caDF&cL=>%Kv!hMar z2GjtY{CMZWo~M3Fgo9G#HU(ck{+i2D4qBRDZp%1ML}$G@vH6py$km0cqP4{Noe#)f zawTk(Y)P|hxBT-_!ivc=&x(GoRc~WADcV6`;v094o_F3_ltJiRT@kvI!LheAw(RXi z9s}=}=5&K=u??~xKIa+;u1>X(r>4GV@~4=~{em-xE)sjQ56C|^uziV>%HI_7UCt4VBhv2GuJ`$dt3 z|FE$JeOgm@(2|&|naOAs+@tuajEyt z0(CT6?^Z`d_;wvIP?B_N!MxGZV#t)$BisJ6B|neH!SD~Va8LC)V<#9xo*MGuFikf7 zF3xti_Vbc`zA{HKj4=6$-}=ImryQ}JlvnA-T*SbqE6(hm?qupX<(qOEhPWwxjop02 zC56Pmtx(+4%tc7l=_HSC&eTE|yPhg97Pz+}#1i1SRNd;4ktOx!C?jtCIl~HZ zrGr!qu!o7CN1a5Lz?frC(3f##WzUpE-xl`$Sr(mQ_nmq_^zyz~%=JtmkLy3??^~*A zl`~rS#8Nm2Zu6ye+2Wsh%YlQwq-sgNM}n*NTepJGrb_O zkzIJD?)G{dq;ltz%a5ROhG@<^8*sZAu+2>`bXa364y_}EtKJ(TD2c5-pHdE>@Q5DA z9dboFLIs7#3N21rHt1D_sq!7&A-yywJ3hSo?tX&wK04KsK+R{4qlsB2(a#oVpK0E7 z24aNd-y3l^ADqU{_8e7eGWdS6aX>#4^YZH)g+jK%ss50Xyve1+3%IKOL@H&n-SlYB z=+S9*QgnWfMRm)UUb6I4=%uo290BEguO28quE{4CrtpQPyD||P$vKmr)K*aqkAjsw z>~foN{rd^MQyot;oApOu32)%*uf8kn<6-VA#l+6R;g_%rhdU63ZA62&bQ_bB?)2kT z6&YWK2~CE!9}k2n6j{EPJSvFIA*D$ zzg3)@k9Eh14-DPoStO;T)4;3b!gk9xQ+iHYGuzrtDJ3c^h`7wy%}rWzvOa+0myiNC z(r(JyGs-&6K6saZ#>3LblO&nXn_uYSV0{X%YO|;9iOt*qnctyu!KQk*Wc6U-5z1h& zDeMS~lFvq*XEgv!Ixd|uuH!OYCku9|OU=x^o|+*kJsBiSE%QUYPFo7GLD$~eDX+#e z)qEne$7A)FnL<;JNh~zzR6=Tcza6Bb7kh_f$LHvs{N~Ob5}hl4{bjhzYiiN2?g_TH za9^xZ0Jf-HetvSrtBtK5%Ax+M_lN$LYFBpU{jOK!EFroPcgTY1)ayO<=LADW>xDji zd-a%Mr@2l^rW_k}h^i+Tq$>p8iGk)cOJk*Yv~$iD_0>PFA-Mm&SmodzKE{HJzcol4 zk1yDIyl~HP%O3rEd)wMBq zT##g7z^N&?u9f&HOKP~V$hz{%c5N=4l_pRqnum@=Y=>Tkd=jWn*YBpigzkN^ZwZIg zLg(sx8DX3D=v&_oA2CtR#y#MAp8W6^B^K_N@%SE68bG<%eCoq31GD2u2r1_h7)Tav zbF8bhG(41D=No!o?9r<&7HD~z=RW6{s)73yvnckAY)*_XU_EYmjR* zMiYI7v+S|@BKtFc3-1eepI_<&?iQ{f5<6_=ybDsyO4{=!p{X(p`w2hEjU>r;WBYKQ zTxP&kB)@o;?EO8YFJNLYI4{#vT5^8yK17H8y|m(GHn31e?4Srr%@kQ|j}RG8{oNol zNPfNtceROq!()?yzje)gw>O8a8qL^2HCDE74l{-Qe9`kn!xnczybIDo{!BZU@r?aWr*Ou+gv9|P$3Ic#-5IR}<;!5hLkDSp zm((S}I&fymU5Ol(1|d?)Y`HDsO#xIcNJrKr`Q5YRfbZO!uB5C=Q_t<6Sobj!2(bHq0K5^2Kx zjKL`GLTos(y9oY#v8Hu~Zlkp;#jeEYP{c1*mS^XXF`$O%G zA*FNsm9`LuJ)*~yos~Epgxu2aHxCr+0t$th%gZ^6!T*K4{0s7P9n51t%(A3L-7h|v z^qucw`fCrv&-ATS$K!2cxO!f)9YY7Jo5bf%!Eha>S9e5LNOC3Lf61cTI?sVj&Q~)P zlwEG^dXYS~n

Lg$f@Xha@Q=<-7A)5^*dl`R_{Scrjuz@Z37LD$jvl-~^(nlY#S zlp?aP>sK1bVbE#1nTajvCQI9jBuLdgSC7kbi;j16_km|fRL*~6b{IG0A@g)kv%bte zg4}Bj)=wsw%T6FEKcPAg_ZxhKuyYYxj$Qc?pbshHwA8+OPL?icWvRM^x||hpQfCX! zdDxP;qBCxHAmPmQ@Mp+f-><04@{A34I&=6Kyu>xkIc=I8`O(|W5V4|farpgxr4{>s zbL7O0xPr{VAHt@|(a(}&zjHIFacXpmvQlP$`Q5U%K6jYq|DHieUc3Q8v@nG5?DQe! z5ZJ5~R4gPDrLVi-|JIL++?mtYo`O)0-`)Q6cj~t!yF9VDHRbrp_PQMWrB6HU0*kK z`0lKuKlx+b#L?$t0bU*6Yoc(S2PbftW-gXw zn5|lD_x}Az_HoV9>OyfamDE|u1bS9v~Q!7yXos&sqaAtAB2!&$ct|`_+96XJs zwKs2$cMwnO=64Hc^px(1$dfq0s|>T%ce~T5_wS@K;%>ewYt=4o)p4czlYgreM;i8* zoj~z;buO8RuiXxhIfA?pJjUIIn$jTq=6xA(>xG}7BZU6E9tL%@=YwAmJNbiklnyny zc87fE{w9~{(Fx^>H533B4%6%>p`fSK0m7*sqm;<%E%?*OT}V#oas@|mK%s`ubg5yX z)PA@_TNagFl_2zqyBm$|`{&;046$w;v8T^U()kniAv;aof{Rpyn{*FezRXeFMwR;2 z?}bwGtTi*!#TnH)Pn258L2C8(9kzU5eE5`f{dN2UtBgr|=+r;cZ`)HCVYUHxIs|ft z9rSBf@1cy(Zz%rD0P5!MpVE^1P}2MXtfxxR3QYKrW+D^EfNQr)w~ofDnAQ>8>4X6L zg8dUKowDP0hn&hh+G>gj0!*0}E2`+ITBpNTx2=D5vxXfi(oorIV2+Edp{&l@bSDv% zn)F}1*0>qyz1m1$Ui@oO7O8|=zlGz%kJaK^Tdc~w>fD60_^($RlXg&h^Ar4pHatj0 zm*hIyR`_+ti&xkv>{_dJqKYzKu3#@FQRcJyw!>+;h2{CXKC3@xm8+QnsFjfE^qVs3hlbKY*1 z!MLwqo+XzZIznQCv9k|3(VqH)0tB`l^b+a3W6n#>eb3O}VnyDr&t_IV5Hpi6TJ@yf zU)B&l1>NzI0U(Ycg9;@Y6RR1p^O-|DE-^DkSNR$?x#S9Mg)0tnoT=kg;*q%HmOc1T zngjjm5LOnAo>O0qSbZbIXI!YP8^*uFvdm7qqvU}q{Y_V zA9DW3-g|~MnQi^U(HR}PVrYVZq7aZ?q&F2*1QHRY7wIYjh8|jQ6r>0UNN)-VDosKO zof)J^7b3(^htRt~XrcZ0oj7OajPrbbulK{@gV!~ayX?L8>g%`G%@e3g4}FyBp%3sm zV6QIFDHg2wvyecMNwJV zc&MfBEgM}4DONdmECRv6*61cdLCP?2oOw0&!tUUgYux44~p!sy`U#9IM-@ssDLHT`9OjFw+-{9PG zas^6lJrC1*3JAhu2afy>-GJo;fR&qZ?#wk0@oMaWc?(v%S$dOE!;yB4P8x8Hnu{kn zIpYt2L|#-5uy?oVhU)_x69Q>iBGte4t+4493`VFYIzA6`JiNR0vGe|$ASlz>zx#)( z$9a*=%I-Y5O&M&EF_F}+lr7sXyAGFVQNPJ}tW%lR_4uqRP z(QbZU4$vKPj>}($ETNbKcb@i}*MELXTB_&5Qn1prP)8ogmae{yy!L4%txfQuVjuEwO>V1dh z8YmC|k^uf*xqfGM5#*LktC8=@ml`v4%ekg5=to$t4$Y0zO()m=TIiTUUF-0j$^-%k z{``8r+YN1?RHoZ>b~%@!HgdJU=f0M!FBVDWSo0KZuPt)pDr&xBWq%%L5Is096~OhU+3<(Y|P+*|m@z zfW#KC&-cBkg}_6I{o9@5;I&oTEb@^;w4Wuv(*$@naZ$Ra%Ehx;BBf_Fk(}x!G*Wzy zqrcjaA1P>9C7bkNbR-MezuPzwnM=R_yLbbOD~8A`wRx~1QR8+EcsStCuYt~j-4DQd zmf=xCT!q{3h>=1xI*oqkgKY5PvX=ZL!-?$JZ3W=ff+Uj@e)VOtbn~p@R z54LyZ>(Vn~6zbE+&OVsm@b|5{g+LrQBvU-U!D6poa^SazVv7p;j0nU3x(W%ImjS6_ zht?j1sd~ww-yVwo`&DA-WGYoaxKaohio)OPmhWmO-3tW+$-xXF{Y`^l@IANw?_|6W z$cS;*%;j4C?d##Dm_3uy@Qx>H=(LOTW;mSkm9@~C2=Bdr`J4nmpdf*~_}&KF8W)|o zB!$R_9Dcsyf3AY3rQ-xh)6v;gS2`FTqU(4JA!s09oLs5}qjrFmh)wmet%(@;1^|zN zmLU`UaMgV_;etY|N%>hktM++BGJ5Wdn^G~g_t77()^7epNer6!-J%N*t!V2A$S%`z z5_j)HmM1&}-qI@qleocUmtN4SQ`5d;`5fyoQQb~x z+mzfcrukN5v ziXf-oAdVFVr4kWGN38Br3)k1u$fF~go9_`-9X7bWkf|k*+{%d#8lSBudoXr~%tSDE6i=>>U>Zm6-%(x|ikGaI4-G?S zZg;rUd?7Ti+;>YtTkNLIq^7K5vZEJT@fi*EytuZOeW&3Bu~KuTf>- zET)bz`BN+Mxec)esY&cOyW{3f9ZKX;j33Z+GYjP{DfDzzOw+dsB%XELj=x2zO!pnE zQIjm6Z)->+?HHArP4kQUCJ&~PQVV9|q;6F1&yCp!7HHE^6J6)ZKGprVCH8KQ@8mHf zERcqn?Juk2B11R(eu33rOmqp0S`fpe+9Dn&YTfL)m>?6j?lMQ{tmmuQs)<(8;S&Sz>Lxi1gC7SvmAjC~qTs)rD6EL1*Oe8;s&h2`xl8 zULtB1E=;aN>$+LUC02@s?8cY~hY>Ulg^-jH&y0oK^$8pJM@(M_J0XXnG(A9f{dWTL`grl zs(d`2d`+iMab;_!wt71h`|-G+C9Y=C*dJcvvA};qOkyA%qZVsJ^+~m9Ophk3D(A5PkBY9sdx15I2g{TJ zpp=uU@<2exX`Y!qb_JJ;@cQ{x1m&rT=AaIotqG|loyeyt!a`{FO_Pa_GgU_ROGTQL zkgB^{Y&xz8w zTXJEc94~&5%bMt@wn~+}kXq!09nS^%ZrseuH1%rkU>0fl!C1l@V#s~9&cBm2x40(d zf^@6$asXIwg~6lMHl4mOlG84{$#l=B=ESXsYDs)r`F;1ul1Ae9C@ujuxSHX?S?P|# znvH>bI7uWjGd85=bxO)_58aYTK9W?eO(d^H;YeSu`jD?#xGr#rC^I|u*H*uhS@Ghh zQmU@z#t7ryBwqD@f}HQ5c#5epRaFxE?*yP*gGYY&%>02WWop8*E z3YyZ*M|JwFYQEouD=8CN7rDF%;h; zRGv>Nl+7cw(}a@2x=J*YRQb9>E7-OL*{wC6#7;t7SzX=Fv}_>hew7FXE*943G*J58Bg%35qgaJN>Qf3`TZABcTzzA(v>WO(g%buN*2O3 zi?6K~U|*~en}*3bAuTKh%E%+k1`fPa_H~j8k3zfN1jgB#D!uStDsU;|-e!AF@x+9$ zhWFhNiNep7BY86mN8}0RYHJtSiRXgVf@D%iD>gUM=T@Q9MGzI6P1BKt$$mN6cIZ&8 zJ90Z$l0!F(1{NoYe^~|$$=3Z9r_Z^0 za*`J9-A^yMI1QxFmboTewfx$I&LoELU+{9MDzA2hHrZ?TM{;KWJVQsgKqFJ4DUAWZxlUEI?g_Vd~ z8LodFqpxZBtXMa^QD|OTgcPZku09I1$lT;;`8ARqV`?4)o`m$gGpnA@qH}w-pDZ>y zHQ{4O{O|SrQGfDE)#pb`@3l7Sp9xz5H#0z1qX#)R!zH|NA95W}?^7wZMud&1x(Ea# z72GZNN+S6(@eIJa_?mew-&|^)0&H`|tDnZL?8hA^Cy? zOoQbTzUH>P@e^*ZIwBbu3+$vOvZB7K}x zw}ifxQ)(K=a9t?Hz^GkUH2ajRWm8%_U@oI7CAGEg{F%=7iy`F245FQ6!C?L-o+H_K z?JdDs;ICE5vk$S)gA6!{Wz1R-1_hyV7u4GexrxIY%Oxw~%cbRO2tl=|C? zlvzmY1x-ABeAYyj?}Cy3_1H6PK`5!~`8q?6ZcdWtJ%1#Oci1% zz}HB4-iCbI;EJ1I*tO?P*3?{kFVmSn6Onvo!3~{ew&o}=S2nLbSay-^8PbKW$S!#L z*p7Im|KsrbK*8}X}nMH*@)oVx12vjp7K$iEt?Zo^O0`H~;`P>qF5Ih7E)ed}=l;u?k zg5`4h>mu^l2aFbn*qh|T zP5Wzdr$@_))_4Y;QMNbri$Tgig?=Ys@aFY=;`GYg*xFSDDr~axKPpUxe{1B;8j^{1 zJQZW<(D|Ar9t)zQ&Cm@fRTOsMRYI4)pQpwBGm4K{c26Vr5L&D>4oCnxA~Y?@)yuq+ zBj;9@V;pVw$}Mb72f^Qjj%ro+=(t=i0(Q!j8Ie}GI5)m>&zf7-D{rb*5XJ#0}&pHmQFRWN8w{Q|P;WOKn z*bqQV+lv)f7di97E#*;NlcO?#Qy8PG#wARK-V)dD8?H{|X|pMwN{jvbx&Kku{*GMR z|7OPd@Ug0v7+|!bbv9G+4^2E~;|H1|_S{Bo2~A&xV@P#irZ4zhMCZYp*}D4?lGLLM z+!jq|9TOMtoRnzVS;Z)-LCQG!w`8!yHL%3a<_!1B!;Uj zCSs9-rx;~Zf&3`CEp`C2`g(FDl)6#Hu+UU#-^j=xM=~AFLFcuO)6qrT_F6Nd*-bIN$aIJabt%&PuXFk={J78P0Fl6IdJSQWySUEkR&(-3# zMx6IV=k%H230@bxL{_G~&N&oThp$h#RV$M{2P%P2$4Cd@HBhzA>AdmB2>8A7xbi1`3wEvRw?@=7?G8-2raQzu`GiFsVmfE`M1jszdwzV6+twk>1PzR@sF zOZ26KIs_<>(JBIbp`eOy4m?C1fB*IA=am*$l*M;j*|VY%?KSr_=GLJr{ha8J9s`Za z?(cI%v13O;Dam&%Bbta3KzYwCnO#6Z*QqqoH4<)Y2ay?k$T`*|-ss+>QP0DJP-e{# zLtbL%x)Dap{PO(-WyoILcB?7F8fu#_CR8i|)P8eCgb}$s@lPJ43{jTr3 zpDGuE>(oCj%W`ZL5^L3c37~Lb2MV;9_ZAel->-k_KQRz*WD%FkN2iA@ogS`(`1ynj zJgsJ!D-Ms%rPApye1d`!!hE@2oa@WC&zjG7t(1-VlaQtuvR&-1IF!L`r)4nXzC)ro zWY&EF9OomrcKCgtQ_JDP1(l{X~x2y8b2SiM$Xa=M)TFU`#e&Ut@ zO0dQW(0|#ing@s`5-RP2YURW4$l>3ElHZBf_8ML~n_nt=z@XAbBey?77zMFDEpD)- zC8;TikW+v20R(jeIac%cfuev>oHP#q6a|h#T_8VIH$}h5$@1&Y7rUlYG@5<~GGie|VIqP@^v6?O2}MhFmDV%0+gNX5*>f~%n$f7)CI9H#_BVH1vx|2w z>w~bW%-a7_OVdO@wR15qS#CbgXx>LsR)BT`7wv}Ek2XS&YegR)7an+FbepwK(9rc- zT%pwfcmb59n`5F^6c%WlbOjP;yZnl`vB#07#r*iUqJbdROg5j#9VIlwC(Md?An=*2 zJni{<^ye=Yw_s)OD8#u_@09WQUuq*?boU30kffU;1I5t<`L**<#UG3Z{*@N_NTzu2 zh!BE*32CpAz-NfQg=h*DMhG3|V-1gnK6dchg6cfL?a^o|dK(hWcU_kR&yF%N?pIs} zeUgy&DcV~P^5iF>{F*I|#py6V(c1u8C7b)`!(^qrQ_I08DWJx2*f}OI(M_0Ts}BXD z`e%_6`}~F%e@H0<-l(CmVL!h_!uX(~x#zuyuKYGM;bBjC#vuc_So zJWoKyDAMRUpAI=n0%$bpxk_@jJh^PIO8ij^H2II$$3KEJcMYg(+%2V_t$oa2M9|(` z1XPl8t68=A`@0{2kM7iR;7toqOFQw>r`M*#u%)9}wB82NPb!!ro@k2}E>qOs?*0PB zitj8gdAHRA9+`+`xDn?+F$nN%CLml}eAi73fbdR9im;bYXm3lT^OxHne{2pfv{yfP zum7m)6mcx(L~{ZZEknf{Lkzdgc4mYqK#ZT-2V;FmE8oyzSpkEgYY#U|Z-20|*LRtp zE8}@8j;Ib8eJY}fb*07F9aR)vaR8PnrM-qk!^a(|S|9bdHY;;|e-m;UhF@MZayop# zx;@Q#VQaEq3MqhUH7XG{uEO*a5U@C=|H@g9Jpt5u8_m7Sv3|yY9ES{n=T~9gmLU6m z`%$eRElpfa9?(07F4K<-44QcpK9OlwrLbZkr-tWn9bpCdhC!OfxiDN{>xL3wtV2kS zMjvlZskbY68r5Fv)?3!#LH!xF&3G7I!1_X%%L=ZX&$7RlA359a^Qgh+OQAzcyJ6?+ z_{x>wjCcnwpfWy#4;%ufw%%&Ib6k_@AegV`mQyW&_ZB^3;L&am=~TecDN1`(lGLCsCUVU#$omo*0`NRgKc$*SIS*E~sarER5i>juWs zJF-f@pRF*~6udavWaO4vw>>`9Ee5oC6%F5UyIJx07RE5>k5M2(8ozveNoSEh(YZ=R zpS^yjf!2Nx58mB+hmS%jGpD}){8sV=Ax9=+@Y>e0og?QBCD}m<5iXg$w+tbNF%|}A zl@z&o^I}aA%<|KzZwS}(!x#Yk@F>l`I<;^1nCR^LbzLq55P6jOSOEXxX_VYZIdC81 z)+s?*?(^zb_rrQwTJ}se?Z)XJx|i8GBbWf{`@Zw+*!278vqAvyM|l}oR60kIE731W3bU6wa1iEY$xuLDJIPT zoyI|$>!4hC4)|v7`hrNq4CsS@g{AT44a1uIR)(0n=KD-Z+Nks_l=o79wq3sX9zQoL z#7<&W3b%k!%A^~bdwcqMTztyUV(j%ny5Z1HX?5UNkq`hwe>K`D>&8#O(>xxcH&53bj@5qLhA54-ZOdyRBQb=T9ke5>noX* zn}t}9xB}k=@&@R|a_;Kt5#YisQIEk6H8FD;3bFCg?*9&wyf6oJOPnq%WU@B)JvrNv z*6r>O?ksA7)nYQ4Bx%O<8DjD^78Rz;Xjy z@P)pDXZtDHv00!3vMq?DOhckKPxE~)I4)E_8IGDTRlIXD&WqacsF?+STJOSJO|Vg5 zcEr|JIEJdn*NPYS`W4OE@p_sheFf#Ik(AG$Z&0<9CRZRP9-w(j-y*J+)JW!@f7I1H zv#ha?sX1*~>KQy1Ys~k~7D_lmC`-_igh>BIrF%enr=duF7ldiJHvyhx9S*W5W@;^4 zj*5N`sJ})tN#}(t=6}Dx@9}zXaOLGo-MB~HnIH=gaNiQX45>|_HDv(o3O|4DfXbcv zpj}D^R`6C4cZKhk*EtrGT}qL)<*8v{528@Z)~SJ=Ga$8069XD^_|^ULO!-JlwbRUP zvAgY&t{`g#e2QP2t=nQg{4txT%oYWy2{D@GdtAU0sr~b-U|jt(-H`pD=q&Hfl~iKv zed7uPM9P`JNO>It8mk`Ur@f8cJ1*46%A8M%G~<1HmpQ*o9!m0rH`vU5VeNKqmzH`q zhpLKsejavb30UMzEox&?+C6mIfZnf^LXeJt6izu!;hZ_AqC*sb6wPewl2drMlf zVaF0GbuLXUT8N#=mt-KkeJHx~rH>FpEB>ihU)_v*_wvQs&!K5*0lpmnVR+cl%FV&y zZ!~9rFYw{)^*siY%j)-R@Bt$Myn&Oz#}my}U`SWlbMt7y`4>X4e(9a7b3un(7dx`f2BBqk!heLh->N5$$0rfG1lYx6fwLm?fPK#CI(_WcN*hK762Lg zm=?{YtPc5r=8Mx6%OO8G2_9mEMMvwg#qk%sIPqpTmoy`U%ddTl*zr;%b>QlsbH90N z^CrNh>&=UD`tms-od}a)9Vp0_8dkozQL}Ze*h$6VzKT-V-hC=O^$0OZ&wbaV7Vk5< zPGKE&lLB!(Pi%r3ql8=-g?JcADDT{BDfB1FLb}^;Z(g6cm_2zHN%~K6!mK(1z*??b;U7x3ELhhU3_a_FcOmh?`*9cV1cR5Tn@cqbAfxsN8>*9lS+j zPr(_6!#|5HHXUj^v}f++K62D4i_Wy_@P}v5xwMv%g`+*P2-X;uNY zPYcO;5V+CSy;i$h5{|7R2d|H`-h8Ex9=0F0J+8!|BxCG-8Gwtx6h<0G^z*OoL-MEF zw|Y4Uyi}GXFbU<7N&-kIKLSIi1Ik+RlB7~rXzH`UtHl4OU$)0-zz=$B+UGRTK@|W6 z!r_RG*qmG@m{ZH1TYMq910eYET`3}~DlW%59*7-Uzexi`(qSERRe0~?y!09|B~bL@ z?=@ET_Djn7jA!Z#@2!kO8cm6fP|Ou>ABkz{@y|D1UH&$@j8)I0#bYisK*}qv3RA2+ zXskd#u)rb(QAu954rf&iTcF5b!*+1JGcFIrLvL+KdJabuu`3>P-Tcs&KOdx>?J)>a zs)@1i(RWE%QeDIGKvgfAx~mWJB!9(jCJa5BF!dCGI$FR@wBm%{F_0TA1dSI|tLi0H zM<?G_IxO zm}?L6Z_%%%34%-0PnIHlC<^fB!8d!@#-%Wa>XnU`2)(Y0jI{G&qnVJ&w2>D0Ol{g7 z_fbu%hIHY#O8JjKOX;yMxS-QgYUDTHf8)|qJi+N@exQXKdQ;Bkifv@%qu2jB%>ihAVRn1NegCKYK z$ww|;y%V%o&>Ydp*Og0kP1#aon)4dUIFFS9^WRC*(mv6Rh>j{b$ftY?ymeaqr3c}9 z{LJYLYe@oe_w?_-7CN*ie~sO-hN=zV%ump~e3^)L2WttYK76(Kj$=Cq8t(ned;Hai@zX1z~ zOne?5wE~bAk@E2(g%Lut*K zRCe6xHZNGJgJpUIkwG3u`eE5_Q18kf~r84-cxJUd2ZDSTl<tb9jdPi_jOSCZz+pN2rACpLbAl`ah1 zeyp@6m~Eag+lPi6BWYO?Yjtn7`pjBXI)oQxqRFrg4Z{1Ip9g?lec|mOL`{KA*C}B4 z1#EAbHpl3uTxHM^xdruGK^g|(P7B=!Xy7YR6;LZ+g`)lY@JX7R+FqsTE^gYKV2MhP zt62&FRkZ8}`L^n2%az{LU)gKx*?n~cZb5$bXc#1_uXJb|{>jE^>H2zjHfNj?x*FKX zN2@}z@NeQr3@UkbGOn9#?%${YZTU2H9_{`-0C;MQt8>aP`!7L6E4mB?<#$yEKpGqD zcP3LSCbej({1M2$l|?OxD;QLc&qI|oE|Z0skNpH`WW_HDV})kr{N8qR`5!?phaqLK z4B`D~{o|+uq!C{+(Bym1D$tP!Qw@FQikcPyBJN0t?ohP+u<*zD`)a|~dd!~1*IKv6 z*dOHkmTfgWtMxgqJi`P!-C!_T8vE_|yz~K% zY8cqTr)3&MRE2T^PYgd~FN%r3KiugafuhN0kl^&&LyzmGxu-Yx0!QTme1N3>tv6e~ zda|42WaTHY7xlOb(EOu50Z5S5m{{&oVy?-!D=oiX3$>_9X1 zZhhD{s0T5RIE0)B))CuG*IdO zptNK?|0Z6-kyQR+Rsi3VauZ!I6#f)s3Y{UQ1K8x_Jnj%Ls$gic^YW&*>$Rj0?Z|tn zrCZYlD?N*egC>kaBI~a$whvq32#g1Qjd?0wcUx0A3Hd` z`ebW3S8gfI5c&M9(A+4}7WG_9CwjPm(-$T#JdF#@`&3 z-zk<^fW*k7ma1^1Vimb8cJL6?;<@$nk(dcn4>2(R?vAQz1`Y!{yCZk+{0!qePTSF0 z21Lw+kdd_gUb$)~^N1|e_0(HlH|opW1EM<0idTEXflgl4f0wp89p0XDyOVG6Aam;O zlF;y0NXb)3dlYBs*Xcd|Vg^46Pi;M!dT)`^u2`I9NLgxPMky{|USG3osGVX74Gavt zEsWoN2nib>5B<$25dq4;+z}A5iawY3p9e9jiPv@`FhCq$hHBpXJ_Xy=_FLB2yt$=I0)Gchb`J8r}A-AYK#bQ0L_rs&`g8h-wni2pI%4yoPQJI zxyY?F%w4TCI%||EzMI2tr}o@s`pt8fu&M`EBVRgVXls!DYYn$mMzT=-Clq`xXB5_@ z`9nVkLOV63?UbqW+Z0?w`Y8xR#*ha>KDBBmonT;)Wd>w_l|xf67kJmE;9O(CH6WUr zypR?X1;?-1Mf_fl`Y($P~=(FYW27|2Q=0l3{5`Nx8{>iNL40#8F}+wYf1-p2Yg0wtUo4S?7}yV@XYm|O;L z;=U6M5%g05q)q6ZTfaSrT0@}LGeR)D7%C9N^E_YO(1xQ)<`8wPu(I05{$~s-%4az}Yyptpo1Ju1gi0n?&%2m9vY5@SQ$<58( z2=z35r-6NZlETS(;5H2FWalRXV#XI*`9N0T(&NkTPt+e|V2H5%i_QGPAmj81ObGaJ zZ>#~Nx>)xedUqLOM%6GiNE`(qafFpyK)Db|Nr4z44m?!*)eG~mA9ki!zqfu&S}8;2 zY;@2MKce_IEPR7f+ zTNqls_<=b->$M$X1dwKSsFI@(5UXYIFWgUnJN=LS8ZaDY)N|xK4jEs{l4>MmeG&P+ zFXgp`#IOG#3UPP1PVb09{@*u}$be+7jCKdWp+mLLV_Dwl7Bswv`^k?qeY^YSmhUGJ%ICP?OKwMe?m`#oL;3UU~#X@Qi3gCQm@ zhR5zBz;z!yT-9)8KY(B_F3#8plRQ!(;{ILjh<-5ju{0}%oCV-fXT>5S>xdqpM<5e2 zaAojb?(HAg5Om3c($S+4#XeA?T3?SoKyaSrX9QIkMRyCMjMyJYL92caN6d-%V=F0x zTSO181Q>*_7xP9Nk6I5Ba0QeXLrjTYB;cokZxo@5dS1gpLMMt2Q6iM65Q~

mwXwI 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

-
7.6.2.2. GET variant
+
7.6.2.2. HEAD variant

Definition

@@ -7090,7 +7091,7 @@
7.6.2.2. GET variant

Method

-

GET

+

HEAD

Status code

@@ -7106,7 +7107,7 @@
7.6.2.2. GET variant
-
$ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
+
$ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
@@ -7821,7 +7822,7 @@

7.6.9. Admin downloads all

-
$ curl 'https://sechub.example.com/api/admin/scan/download/fce5f68a-ffa4-482e-b1a4-6609ad62e446' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/admin/scan/download/65fc6925-ffcb-4f71-8468-01b1a5b5a65d' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -8986,7 +8987,7 @@

7.6.20. Admin shows scan logs for pro
-
[{"sechubJobUUID":"0f611d86-f09d-4031-b4d1-9a7bf48fa91b","executedBy":"spartakus","started":"2024-05-30T13:04:15.220384353","ended":"2024-05-31T13:04:15.220408478","status":"OK"}]
+
[{"sechubJobUUID":"1c24f69f-c988-4ce7-94ef-22dfac5ba3db","executedBy":"spartakus","started":"2024-07-09T13:57:03.927240632","ended":"2024-07-10T13:57:03.927258626","status":"OK"}]
@@ -9596,7 +9597,7 @@

7.6.25.1. Code Scan variant
-
{"jobId":"efa30005-d868-469d-8d5f-332793acf5f6"}
+
{"jobId":"2c7e0719-0c4e-4f6a-aa56-6a39e63c2fe5"}
@@ -9775,7 +9776,7 @@
7.6.25.2. Code Sc
-
{"jobId":"259dcfbb-d89b-4384-a3cb-ee99b337caf1"}
+
{"jobId":"e61914c5-b3b6-4af0-a9bf-748a376c2638"}
@@ -9934,7 +9935,7 @@
7.6.25.3. Secret scan variant
-
{"jobId":"b08079ee-c987-4438-b936-9752378c45f1"}
+
{"jobId":"75d2cfea-3690-4397-8ea7-b7a0f87123a9"}
@@ -10093,7 +10094,7 @@
7.6.25.4. License scan variant
-
{"jobId":"7f5189d3-f77c-41c3-9314-9f1fe05fec95"}
+
{"jobId":"a37386d3-a808-4dcb-b68e-a7fcde86f2bd"}
@@ -10247,7 +10248,7 @@
7.6.25.5. Infrastructure s
-
{"jobId":"d82ce945-75d4-4cdb-b7d4-62d577bbe493"}
+
{"jobId":"1718acea-bb09-4621-9cfd-d5337be22244"}
@@ -10416,7 +10417,7 @@
7.6.25.6. Web scan anonymou
-
{"jobId":"86c2973d-90bc-4324-8651-ac668f1ef8b8"}
+
{"jobId":"24a520cd-a6ce-4120-addc-fdc21980de51"}
@@ -10580,7 +10581,7 @@
7.6.25.7. Web sca
-
{"jobId":"59723c34-f6f9-431f-8cda-69d2dc03b453"}
+
{"jobId":"fa954d23-1920-4338-bec4-6f4eb3271427"}
@@ -10739,7 +10740,7 @@
7.
-
{"jobId":"b2b101bf-b9b1-4e77-a4ae-d78323a75818"}
+
{"jobId":"603cbbb3-792e-4647-acde-a018c9672d26"}
@@ -10913,7 +10914,7 @@
7.6.25.9. Web Scan login
-
{"jobId":"c7f0ed79-d1c3-4f38-a228-1c8560f0daec"}
+
{"jobId":"c6f36e9c-22ce-4405-a50a-809b01ddec4a"}
@@ -11107,7 +11108,7 @@
7.6.25.10. Web Sc
-
{"jobId":"05faf70e-bd46-4488-9999-e1ddbfa25e6f"}
+
{"jobId":"e09816f7-bde7-4764-acb4-1b9e67316ba4"}
@@ -11271,7 +11272,7 @@
7.6.25.11. Web Scan headers v
-
{"jobId":"d91da85c-50c1-43df-8127-4d268be25bcb"}
+
{"jobId":"515131cd-f610-43fb-b3c7-73c227dcc919"}
@@ -11360,7 +11361,7 @@

7.6.26. User uploads source code

-
$ curl 'https://sechub.example.com/api/project/project1/job/f2b9e878-0e91-4cea-9816-66c25eb622be/sourcecode?checkSum=checkSumValue' -i -X POST \
+
$ curl 'https://sechub.example.com/api/project/project1/job/4cdef6b6-f307-42cb-bb15-13ed84e11efc/sourcecode?checkSum=checkSumValue' -i -X POST \
     -H 'Content-Type: multipart/form-data;charset=UTF-8' \
     -F 'file=PK  
       �<M                       test1.txtPK  ?
@@ -11457,7 +11458,7 @@ 

7.6.27. User approves sechub job

-
$ curl 'https://sechub.example.com/api/project/project1/job/baf7a50e-4304-4c5e-9bd9-c910b163f3fc/approve' -i -X PUT \
+
$ curl 'https://sechub.example.com/api/project/project1/job/dd1fc660-d0e5-48aa-bedd-d8786eea7dcc/approve' -i -X PUT \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -11609,7 +11610,7 @@

7.6.28. User checks sechub job state

-
$ curl 'https://sechub.example.com/api/project/project1/job/81e89420-c8e2-425c-bc40-79a1f1ca2a3f' -i -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/job/7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5' -i -X GET \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -11618,7 +11619,7 @@

7.6.28. User checks sechub job state

-
{"jobUUID":"81e89420-c8e2-425c-bc40-79a1f1ca2a3f","owner":"CREATOR1","created":"","started":"2024-05-31T12:49:13.732667995","ended":"2024-05-31T13:04:13.732696037","state":"ENDED","result":"OK","trafficLight":"GREEN"}
+
{"jobUUID":"7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5","owner":"CREATOR1","created":"","started":"2024-07-10T13:42:02.31702027","ended":"2024-07-10T13:57:02.317046408","state":"ENDED","result":"OK","trafficLight":"GREEN"}
@@ -11693,7 +11694,7 @@
7.6.29.1. JSON variant
-
$ curl 'https://sechub.example.com/api/project/project1/report/577a6d16-be90-492a-9003-4d47e830acc5' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/report/1452ace3-df08-4d20-8fa8-c48d219b4e98' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -H 'Accept: application/json'
@@ -11765,7 +11766,7 @@
7.6.29.2. HTML variant
-
$ curl 'https://sechub.example.com/api/project/project1/report/662288c9-94b8-496d-b279-5f7c1405ea3f' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/report/d6929af5-02d1-4060-89b8-bb5a88a81917' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -H 'Accept: application/xhtml+xml'
@@ -12323,7 +12324,7 @@

7.6.33. User uploads binaries

-
$ curl 'https://sechub.example.com/api/project/project1/job/0b05ada7-d858-4223-8601-17abefdea554/binaries' -i -X POST \
+
$ curl 'https://sechub.example.com/api/project/project1/job/844bf46d-865c-407d-a28c-e2286a7d7a96/binaries' -i -X POST \
     -H 'Content-Type: multipart/form-data;charset=UTF-8' \
     -H 'x-file-size: 10240' \
     -F 'file=test1.txt                                                                                           0000664 0001750 0001750 00000000000 13353454574 012170  0                                                                                                    ustar   albert                          albert                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ' \
@@ -12404,7 +12405,7 @@ 

7.6.34. User downloads job rep

-
$ curl 'https://sechub.example.com/api/project/project1/report/spdx/b82670aa-4196-419c-89f8-3336b935f174' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/project/project1/report/spdx/69ab8fa2-fe63-45ca-aafe-6efdc937b4e8' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -H 'Accept: application/json'
@@ -12967,7 +12968,7 @@

7.6.40. Admin lists all running jobs

-
[{"jobUUID":"1837542d-5f7b-4665-af41-fee03a8da57c","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-05-31T13:04:17.896949138","configuration":"{ config data }"}]
+
[{"jobUUID":"364a395c-7439-4f84-ae4b-b26517c3fe53","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-07-10T13:57:06.714971112","configuration":"{ config data }"}]
@@ -13051,7 +13052,7 @@

7.6.41. Admin cancels a job

-
$ curl 'https://sechub.example.com/api/admin/jobs/cancel/553b487f-cad7-4bb4-a234-18b7dee2bf7e' -i -u 'user:secret' -X POST \
+
$ curl 'https://sechub.example.com/api/admin/jobs/cancel/cb7e5145-587c-4cc3-b536-0a516788b323' -i -u 'user:secret' -X POST \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13140,7 +13141,7 @@

7.6.42. Admin restarts a job

-
$ curl 'https://sechub.example.com/api/admin/jobs/restart/e7a9b75c-0232-4f5f-bb5a-e8cb26d450ae' -i -u 'user:secret' -X POST \
+
$ curl 'https://sechub.example.com/api/admin/jobs/restart/c798ca3b-4ac7-4e54-9507-e8267d591a3a' -i -u 'user:secret' -X POST \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13229,7 +13230,7 @@

7.6.43. Admin restarts a job (hard)

-
$ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/04b8f110-1d8a-4cbb-bdcc-f50d7b54895f' -i -u 'user:secret' -X POST \
+
$ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/f96ec449-ff8e-4328-a66c-0783edd140d6' -i -u 'user:secret' -X POST \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13762,7 +13763,7 @@

7.6.48. Admin creates an execut
-
12e3a55a-1888-4717-9722-3f0c25d621ea
+
16d02d16-9d30-4b50-a079-0a992d5d1f8c
@@ -13846,7 +13847,7 @@

7.6.49. Admin deletes executor con
-
$ curl 'https://sechub.example.com/api/admin/config/executor/8b9e920e-749f-4960-bb0f-ff701d153f14' -i -u 'user:secret' -X DELETE \
+
$ curl 'https://sechub.example.com/api/admin/config/executor/f88cb1e3-caf7-4d3a-b8c1-5801c0bcad7a' -i -u 'user:secret' -X DELETE \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -13961,7 +13962,7 @@

7.6.50. Admin fetches executo
-
{"executorConfigurations":[{"uuid":"d7a371c2-b50d-4a30-9e39-cd42ceefcd95","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
+
{"executorConfigurations":[{"uuid":"85535231-46bc-4301-b5f5-37730131dec6","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
@@ -14114,7 +14115,7 @@

7.6.51. Admin fetches executor con
-
$ curl 'https://sechub.example.com/api/admin/config/executor/efde85ba-2dd6-4e75-8740-df7ba1e5115d' -i -u 'user:secret' -X GET \
+
$ curl 'https://sechub.example.com/api/admin/config/executor/6071b1b3-4573-4ae7-a13e-e1b0fdaf149a' -i -u 'user:secret' -X GET \
     -H 'Content-Type: application/json;charset=UTF-8'
@@ -14123,7 +14124,7 @@

7.6.51. Admin fetches executor con
-
{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"efde85ba-2dd6-4e75-8740-df7ba1e5115d"}
+
{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"6071b1b3-4573-4ae7-a13e-e1b0fdaf149a"}
@@ -14271,7 +14272,7 @@

7.6.52. Admin updates execut
-
$ curl 'https://sechub.example.com/api/admin/config/executor/3b5d9059-e968-4af2-9126-fae0b9360fc0' -i -u 'user:secret' -X PUT \
+
$ curl 'https://sechub.example.com/api/admin/config/executor/81170e88-a5f7-4527-a19a-b9494b138f0f' -i -u 'user:secret' -X PUT \
     -H 'Content-Type: application/json;charset=UTF-8' \
     -d '{"name":"New name","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productNew.example.com","credentials":{"user":"env:EXAMPLE_NEW_USENAME","password":"env:EXAMPLE_NEW_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]}}'
@@ -14615,7 +14616,7 @@

7.6.55. Admin updates execution profile
$ curl 'https://sechub.example.com/api/admin/config/execution/profile/existing-profile-1' -i -u 'user:secret' -X PUT \
     -H 'Content-Type: application/json;charset=UTF-8' \
-    -d '{"description":"changed description","configurations":[{"uuid":"ee73c2ca-ba96-4bdc-a027-83971ed1b8aa","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'
+ -d '{"description":"changed description","configurations":[{"uuid":"f016a684-830a-4c66-aa5b-1f49e85e9996","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'

@@ -14771,7 +14772,7 @@

7.6.56. Admin fetches execution profile

-
{"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"4a507f78-91e9-4d61-a9c9-9cadcc3467a1"}],"projectIds":["project-1","project-2"]}
+
{"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"df9984fd-f307-4847-a49a-27700ee434d0"}],"projectIds":["project-1","project-2"]}
@@ -15754,7 +15755,7 @@

7.6.67. User lists jobs for project

-
{"page":0,"totalPages":1,"content":[{"jobUUID":"1594682c-750c-45b1-8a59-8c8a63464b52","executedBy":"User1","created":"2024-05-31T12:47:13.890793914","started":"2024-05-31T12:49:13.890823239","ended":"2024-05-31T13:04:13.890834209","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
+
{"page":0,"totalPages":1,"content":[{"jobUUID":"c84c93ed-3719-4a72-8d2a-42be7efdbc5d","executedBy":"User1","created":"2024-07-10T13:40:02.462329442","started":"2024-07-10T13:42:02.462359458","ended":"2024-07-10T13:57:02.46237082","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
@@ -15793,7 +15794,7 @@
7.7.2.1. Overview
7.7.2.1.1. Diagram
-Sequence diagram of messaging overview +Sequence diagram of messaging overview
@@ -15970,7 +15971,7 @@
7.7.2.2. Message A
7.7.2.3. Message AUTO_CLEANUP_CONFIGURATION_CHANGED
-Sequence diagram of messaging AUTO_CLEANUP_CONFIGURATION_CHANGED +Sequence diagram of messaging AUTO_CLEANUP_CONFIGURATION_CHANGED
@@ -16007,7 +16008,7 @@
7.7.2.4. Message BINARY_UPLOAD
7.7.2.5. Message JOB_CANCELLATION_RUNNING
-Sequence diagram of messaging JOB_CANCELLATION_RUNNING +Sequence diagram of messaging JOB_CANCELLATION_RUNNING
@@ -16252,7 +16253,7 @@
7.7.2.17.
7.7.2.18. Message PROJECT_ACCESS_LEVEL_CHANGED
-Sequence diagram of messaging PROJECT_ACCESS_LEVEL_CHANGED +Sequence diagram of messaging PROJECT_ACCESS_LEVEL_CHANGED
@@ -16268,7 +16269,7 @@
7.7.2.19. Message PROJECT_CREATED
7.7.2.20. Message PROJECT_DELETED
-Sequence diagram of messaging PROJECT_DELETED +Sequence diagram of messaging PROJECT_DELETED
@@ -16485,7 +16486,7 @@
7.7.2.30. Message
7.7.2.31. Message REQUEST_USER_ROLE_RECALCULATION
-Sequence diagram of messaging REQUEST_USER_ROLE_RECALCULATION +Sequence diagram of messaging REQUEST_USER_ROLE_RECALCULATION
@@ -16536,7 +16537,7 @@
7.7.2.33. Message SCAN_FAILED
7.7.2.34. Message SCHEDULER_JOB_PROCESSING_DISABLED
-Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_DISABLED +Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_DISABLED
@@ -16565,7 +16566,7 @@
7.7.2.34. Messa
7.7.2.35. Message SCHEDULER_JOB_PROCESSING_ENABLED
-Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_ENABLED +Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_ENABLED
@@ -16610,7 +16611,7 @@
7.7.2.37. Message SCHEDULER_STA
7.7.2.38. Message SCHEDULER_STATUS_UPDATE
-Sequence diagram of messaging SCHEDULER_STATUS_UPDATE +Sequence diagram of messaging SCHEDULER_STATUS_UPDATE
@@ -16626,7 +16627,7 @@
7.7.2.39. Message SOURCE_UPLOA
7.7.2.40. Message START_SCAN
-Sequence diagram of messaging START_SCAN +Sequence diagram of messaging START_SCAN
@@ -16666,7 +16667,7 @@
7.7.2.41. Message UNSUPPORT
7.7.2.42. Message USER_ADDED_TO_PROJECT
-Sequence diagram of messaging USER_ADDED_TO_PROJECT +Sequence diagram of messaging USER_ADDED_TO_PROJECT
@@ -16740,7 +16741,7 @@
7.7.2.45. Message USER_CREATED
7.7.2.46. Message USER_DELETED
-Sequence diagram of messaging USER_DELETED +Sequence diagram of messaging USER_DELETED
@@ -16793,7 +16794,7 @@
7.7.2.49. Message USER_
7.7.2.50. Message USER_REMOVED_FROM_PROJECT
-Sequence diagram of messaging USER_REMOVED_FROM_PROJECT +Sequence diagram of messaging USER_REMOVED_FROM_PROJECT
@@ -17050,7 +17051,7 @@
8.2.1.1. Server
8.2.1.1.1. Overview
-Diagram +Diagram
Figure 6. Spring profiles and their explicit/implicit included parts
@@ -17087,7 +17088,7 @@
8.2.1.1.2. PROD
8.2.1.1.3. DEV
-Diagram +Diagram
Figure 8. Spring profile dev and its explicit/implicit included parts
@@ -17100,7 +17101,7 @@
8.2.1.1.3. DEV
8.2.1.1.4. Integration-Test
-Diagram +Diagram
Figure 9. Spring profile integrationtest and its explicit/implicit included parts
@@ -17225,7 +17226,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17253,7 +17254,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17275,7 +17276,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17307,7 +17308,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17339,7 +17340,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17361,7 +17362,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17383,7 +17384,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17460,7 +17461,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17532,7 +17533,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17554,7 +17555,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17586,7 +17587,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17633,7 +17634,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17675,7 +17676,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17712,7 +17713,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17774,7 +17775,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17836,7 +17837,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17858,7 +17859,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17880,7 +17881,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17967,7 +17968,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -17999,7 +18000,7 @@

8.2.3. General configuration

-Key +Key or variable name Default Description @@ -18105,7 +18106,7 @@

8.2.5. Configuration properties for mocked adapters -Key +Key or variable name Default Description @@ -18127,7 +18128,7 @@

8.2.5. Configuration properties for mocked adapters -Key +Key or variable name Default Description @@ -18523,7 +18524,27 @@

8.4.2.1.1. Future
-

8.4.3. Checkmarx

+

8.4.3. Prepare (Remote Data Preparation)

+
+

Prepare is not a scan product, but a developed wrapper application to prepare remote sources for scans. +It is used to download remote sources and upload them to the shared storage make them available to the scan products. +This allows the user to scan remote data without having to store it locally on a computer and upload it with the client.

+
+
+

The remote section can be defined in the sechub configuration instead of the filesystem.

+
+
+

Please note the PDS prepare can only be executed with a shared storage setup. +These limitations are due to the fact, that the sechub server can not download sources from a PDS and copy them to another.

+
+
+
+Remote data preparation +
+
+
+
+

8.4.4. Checkmarx

@@ -18545,7 +18566,7 @@

8.4.3. Checkma
-

8.4.4. Netsparker

+

8.4.5. Netsparker

@@ -18569,7 +18590,7 @@

8.4.4. Netspa
-

8.4.5. Nessus

+

8.4.6. Nessus

@@ -21106,7 +21127,7 @@

13. Glossary

diff --git a/docs/latest/sechub-client.html b/docs/latest/sechub-client.html index d3f50a3f3c..54d991c225 100644 --- a/docs/latest/sechub-client.html +++ b/docs/latest/sechub-client.html @@ -531,7 +531,7 @@
-

Documentation version: Client 1.6.1 - Build date: 20240531130401

+

Documentation version: Client 1.6.1 modified (commit 6c2e299) - Build date: 20240710135650


@@ -1616,6 +1626,12 @@

2.4.4. Configuration overview

+

trust all certificates

+ +

SECHUB_TRUSTALL

+ + +

user id

-user

SECHUB_USERID

@@ -1627,6 +1643,36 @@

2.4.4. Configuration overview

webScan

+ +

DEV: debug http traffic

+ +

SECHUB_DEBUG_HTTP

+ + + +

DEV: enable debugging

+ +

SECHUB_DEBUG

+ + + +

DEV: ignore default excludes

+ +

SECHUB_IGNORE_DEFAULT_EXCLUDES

+ + + +

DEV: initial wait interval

+ +

SECHUB_INITIAL_WAIT_INTERVAL

+ + + +

DEV: keep temporary files

+ +

SECHUB_KEEP_TEMPFILES

+ +
@@ -3216,6 +3262,147 @@

2.5.9. Data section

+
+
2.5.9.1. Remote Data
+
+

Instead of configuring the file system and uploading local data, it is also possible to define a remote data section to automatically retrieve the data to be scanned from remote locations. +In a PREPARE phase the PDS prepare will download the data from the remote location and upload it to a shared storage. +From there any other PDS solution can access the data for scanning. +The type is not mandatory, but it is recommended to set it to git or docker to make it clear what type of remote data is being used.

+
+
+

Scan types (codeScan, licenseScan etc.), includes or excludes as well as false positives can be defined as usual.

+
+
+
2.5.9.1.1. Example source remote data scan
+
+
Codes scan configuration for remote git sources without credentials
+
+
{
+  "apiVersion" : "1.0",
+  "data" : {
+    "sources" : [ {
+      "name" : "firmware-images",
+      "remote" : {
+        "location" : "https://path-to-my-git-exmaple/repository.git", (1)
+        "type" : "git" (2)
+      }
+    } ]
+  },
+  "codeScan" : {
+    "use" : [ "firmware-images"]
+  }
+}
+
+
+
+ + + + + + + + + +
1location: The URL to remote data. (for example a git repository or a docker registry)
2type: The type of the remote data. Currently supported are git or docker.
+
+
+
+
2.5.9.1.2. Example source remote data scan with credentials
+
+
Code scan configuration for remote git sources with credentials
+
+
{
+  "apiVersion" : "1.0",
+  "data" : {
+    "sources" : [ {
+      "name" : "firmware-images",
+      "remote" : {
+        "location" : "https://path-to-my-git-exmaple/repository.git", (1)
+        "type" : "git", (2)
+        "credentials" : {
+          "user" : { (3)
+            "name" : "my-username", (4)
+            "password" : "my-password" (5)
+          }
+        }
+      }
+    } ]
+  },
+  "codeScan" : {
+    "use" : [ "firmware-images"]
+  }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1location: The URL to remote data. (for example a git repository or a docker registry)
2type: The type of the remote data. Currently supported are git or docker.
3user: Defines user credentials
4name: The username to access remote data
5password: The API token or password that grant access to remote data
+
+
+
+
2.5.9.1.3. Example binaries remote data scan with credentials
+
+
Codes scan configuration for remote git sources with credentials
+
+
{
+  "apiVersion" : "1.0",
+  "data" : {
+    "binaries" : [ {
+      "name" : "firmware-images",
+      "remote" : {
+        "location" : "https://path-to-your-image:tag", (1)
+        "type" : "docker", (2)
+        "credentials" : {
+          "user" : {
+            "name" : "my-username",
+            "password" : "my-password"
+          }
+        }
+      }
+    } ]
+  },
+  "codeScan" : {
+    "use" : [ "firmware-images"]
+  }
+}
+
+
+
+ + + + + + + + + +
1location: The URL to remote data. (for example a git repository or a docker registry)
2type: The type of the remote data. Currently supported are git or docker.
+
+
+

2.5.10. MetaData

@@ -4056,7 +4243,7 @@
3.1.2.1. Example cod
diff --git a/docs/latest/sechub-developer-quickstart-guide.html b/docs/latest/sechub-developer-quickstart-guide.html index f41237b202..e059ba203b 100644 --- a/docs/latest/sechub-developer-quickstart-guide.html +++ b/docs/latest/sechub-developer-quickstart-guide.html @@ -531,7 +531,7 @@
@@ -1206,6 +1228,9 @@

4. Setup IDE for SecHub

Eclipse IDE

  • +

    IntelliJ

    +
  • +
  • Git

  • @@ -1524,18 +1549,54 @@

    4.1.1. Switch to Dark theme
    -

    5. Run Integration Tests From IDE

    +

    5. Set up IntelliJ for SecHub

    -

    We explain the setup based on the Free and Open Source Software (FOSS) Eclipse IDE.

    +

    Requirements: IntelliJ IDE (Community or Ultimate) is installed.

    +
    +
    +
      +
    1. +

      Fork and clone the SecHub repository from GitHub

      +
    2. +
    3. +

      Open the sechub project in IntelliJ (it will automatically detect the Gradle project)

      +
    4. +
    5. +

      Click on FilesettingsJava Compiler and switch the compiler to Javac

      +
      +
      +intelliJ javac compiler +
      +
      +
    6. +
    7. +

      Click on FilesettingsBuild, Execution, DeploymentBuild ToolsGradle and set the Build and run using to IntelliJ IDEA and Run tests using to IntelliJ IDEA

      +
      +
      +intelliJ switch to intelliJ compiler +
      +
    8. +
    +
    +
    +
    +
    +

    6. Run Integration Tests from IDE

    +
    -

    5.1. SecHub Server

    +

    6.1. Run Integration Tests From Eclipse IDE

    -

    Run a SecHub server integration test.

    +

    We explain the setup based on the Free and Open Source Software (FOSS) Eclipse IDE.

    -

    5.1.1. Configure SecHub Server

    +

    6.1.1. SecHub Server

    +
    +

    Run a SecHub server integration test.

    +
    +
    +
    6.1.1.1. Configure SecHub Server

    Download the launch configuration for the Eclipse IDE: SecHubServerApplication (INTEGRATION TEST - H2)

    @@ -1596,7 +1657,8 @@

    5.1.1. Configure SecHub Server

    -Ensure you replace the <user> with your own user. Additionally, set the sechub.storage.sharedvolume.upload.dir parameter to a folder with read and write access on the system. +Ensure you replace the <user> with your own user. The sechub.storage.sharedvolume.upload.dir parameter must be set to a folder with read and write access on the system.
    +(On IOS, the path should be /Users/<user>/.sechub/sharedvolume) @@ -1610,8 +1672,8 @@

    5.1.1. Configure SecHub Server

    -
    -

    5.1.2. Run a SecHub server integration test

    +
    +
    6.1.1.2. Run a SecHub server integration test

    This section demonstrate how to run an integration test for the SecHub server using UserRegistrationScenario1IntTest.java as example. Other SecHub server integration tests can be run in the same way.

    @@ -1653,13 +1715,13 @@

    5.1.2. Run a SecHub server integra

    -
    -

    5.2. Product Delegation Server (PDS)

    +
    +

    6.1.2. Product Delegation Server (PDS)

    Run a Product Delegation Server (PDS) integration test.

    -
    -

    5.2.1. Configure Product Delegation Server (PDS)

    +
    +
    6.1.2.1. Configure Product Delegation Server (PDS)

    Download the launch configure for the Eclipse IDE: ProductDelegationServerApplication (INTEGRATION TEST - H2)

    @@ -1702,7 +1764,6 @@

    5.2.1. Configure Product Delegation Server (PDS)

    -Dspring.profiles.active=pds_integrationtest,pds_h2
    --Dpds.storage.sharedvolume.upload.dir=/home/<user>/.sechub/sharedvolume
     -Dpds.workspace.rootfolder=/home/<user>/.pds/workspace
    @@ -1719,11 +1780,31 @@

    5.2.1. Configure Product Delegation Server (PDS)

  • +
  • +

    Open the Environment tab and add the following environment variable:

    +
    +
    +
    PDS_STORAGE_SHAREDVOLUME_UPLOAD_DIR=/home/<user>/.sechub/sharedvolume
    +
    +
    +
    + + + + + +
    + + +Ensure you replace the <user> with your own user. It is necessary to set the folder sechub.pds.storage.sharedvolume.upload.dir to the same folder as configured for the SecHub server. +
    +
    +
  • -
    -

    5.2.2. Run a PDS integration test

    +
    +
    6.1.2.2. Run a PDS integration test

    This section demonstrate how to run an integration test for the PDS server using DirectPDSAPICheckAliveScenario6IntTest.java as example. Other PDS integration tests can be run in the same way.

    @@ -1745,8 +1826,8 @@

    5.2.2. Run a PDS integration test

    -
    -

    5.2.3. Run a SecHub + PDS integration test

    +
    +
    6.1.2.3. Run a SecHub + PDS integration test

    This section demonstrate how to run an integration test for the SecHub + PDS server using PDSCodeScanJobScenario5IntTest.java as example. Other PDS integration tests can be run in the same way.

    @@ -1770,11 +1851,231 @@

    5.2.3. Run a SecHub + PDS integration

    +
    +

    6.2. Run Integration Tests From IntelliJ IDE

    +
    +

    We explain the integration test setup based on the IntelliJ IDEA IDE.

    +
    +
    +

    First run the following commands to create the necessary certificates for the integration test servers:

    +
    +
    +
    +
    ./gradlew ensureLocalhostCertificate build generateOpenapi buildDeveloperAdminUI -x :sechub-cli:build
    +
    +
    +
    +
    +
    ./gradlew clean
    +
    +
    +
    +

    6.2.1. SecHub Server

    +
    +

    Run a SecHub server integration test.

    +
    +
    +
    6.2.1.1. Configure SecHub Server
    +
    +
      +
    1. +

      Run the SecHubServerApplication in the sechub-server project (it will fail)

      +
    2. +
    3. +

      Open the Run Configurations in the toolbar of the IntelliJ IDEA IDE by clicking on the dropdown menu next to the run button and selecting Edit Configurations…

      +
      +
      +intelliJ run configurations edit +
      +
      +
    4. +
    5. +

      Select the SecHubServerApplication configuration and open the Configuration tab

      +
      +
      +intelliJ server application run configuration +
      +
      +
    6. +
    7. +

      Click on the Modify options dropdown and select Add VM options, add the following VM options:

      +
      +
      +
      -Dspring.profiles.active=mocked_products,h2,integrationtest
      +-Dsechub.server.debug=true
      +-Dsechub.storage.sharedvolume.upload.dir=/home/<user>/.sechub/sharedvolume
      +-Dsechub.targettype.detection.intranet.hostname.endswith=intranet.example.org
      +-Dsechub.config.trigger.nextjob.initialdelay=0
      +
      +
      +
      + + + + + +
      + + +Ensure you replace the <user> with your own user. The sechub.storage.sharedvolume.upload.dir parameter must be set to a folder with read and write access on the system.
      +(On IOS, the path should be /Users/<user>/.sechub/sharedvolume) +
      +
      +
    8. +
    9. +

      Click on the Modify options dropdown and select Workspace directory, add the project module path sechub-server

      +
    10. +
    +
    +
    +
    +
    6.2.1.2. Run a SecHub server integration test
    +
    +

    This section demonstrate how to run an integration test for the SecHub server using UserRegistrationScenario1IntTest.java as example. +Other SecHub server integration tests can be run in the same way.

    +
    +
    +
      +
    1. +

      Start SecHub server in integration test mode using the SecHub integration test launch configuration as explained in Configure SecHub Server

      +
    2. +
    3. +

      Select sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/UserRegistrationScenario1IntTest.java in the Project Explorer

      +
    4. +
    5. +

      Right-click on UserRegistrationScenario1IntTest.java to open the context menu and select test.

      +
    6. +
    7. +

      Your first run will fail, as the run needs to be configured with the variables -Dsechub.integrationtest.running=true or -Dsechub.integrationtest.longrunning=true. +Therefor open the run configurations and select the UserRegistrationScenario1IntTest. +Click on the Add VM options tab and paste the flag -Dsechub.integrationtest.running=true in the VM arguments field, click apply and run the test again.

      +
    8. +
    9. +

      Check the JUnit tab, the result should be green indicating a successful run.

      +
    10. +
    +
    +
    +
    +
    +

    6.2.2. Product Delegation Server (PDS)

    +
    +

    Run a Product Delegation Server (PDS) integration test.

    +
    +
    +
    6.2.2.1. Configure Product Delegation Server (PDS)
    +
    +
      +
    1. +

      Run the ProductDelegationServerApplication in the sechub-pds module (it will fail)

      +
    2. +
    3. +

      Open the Run Configurations in the toolbar of the IntelliJ IDEA IDE by clicking on the dropdown menu next to the run button and selecting Edit Configurations…

      +
    4. +
    5. +

      Select the ProductDelegationServerApplication configuration and open the Configuration tab

      +
    6. +
    7. +

      Click on the Modify options dropdown and select Add VM options, add the following VM options:

      +
      +
      +
      -Dspring.profiles.active=pds_integrationtest,pds_h2
      +-Dpds.workspace.rootfolder=/home/<user>/.pds/workspace
      +
      +
      +
      + + + + + +
      + + +Ensure you replace the <user> with your own user. +
      +
      +
    8. +
    9. +

      Click on the Modify options dropdown and select Workspace directory, add the project module path sechub-pds

      +
    10. +
    11. +

      Click on the Modify options dropdown and select Environment variables, add the following environment variables:

      +
      +
      +
      PDS_STORAGE_SHAREDVOLUME_UPLOAD_DIR=/home/<user>/.sechub/sharedvolume
      +
      +
      +
      + + + + + +
      + + +Ensure you replace the <user> with your own user. +
      +
      +
    12. +
    +
    +
    +
    +
    6.2.2.2. Run a PDS integration test
    +
    +

    This section demonstrate how to run an integration test for the PDS server using DirectPDSAPICheckAliveScenario6IntTest.java as example. +Other PDS integration tests can be run in the same way.

    +
    +
    +
      +
    1. +

      Start PDS in integration test mode using the SecHub integration test launch configuration as explained in Configure Product Delegation Server (PDS)

      +
    2. +
    3. +

      Select sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario6/DirectPDSAPICheckAliveScenario6IntTest.java in the Project Explorer

      +
    4. +
    5. +

      Run DirectPDSAPICheckAliveScenario6IntTest.java

      +
    6. +
    7. +

      Check the JUnit tab, the result should be green indicating a successful run.

      +
    8. +
    +
    +
    +
    +
    6.2.2.3. Run a SecHub + PDS integration test
    +
    +

    This section demonstrate how to run an integration test for the SecHub + PDS server using PDSCodeScanJobScenario5IntTest.java as example. +Other PDS integration tests can be run in the same way.

    +
    +
    +
      +
    1. +

      Start PDS and SecHub server in integration test mode using the launch configurations created in Configure SecHub Server and Configure Product Delegation Server (PDS)

      +
    2. +
    3. +

      Select sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario5/PDSCodeScanJobScenario5IntTest.java in the Project Explorer

      +
    4. +
    5. +

      Run the PDSCodeScanJobScenario5IntTest.java

      +
    6. +
    7. +

      Check the JUnit tab, the result should be green indicating a successful run.

      +
    8. +
    +
    +
    +
    +
    +
    diff --git a/docs/latest/sechub-getting-started.html b/docs/latest/sechub-getting-started.html index a970a5b1ef..64de04f8b4 100644 --- a/docs/latest/sechub-getting-started.html +++ b/docs/latest/sechub-getting-started.html @@ -531,7 +531,7 @@ @@ -1045,7 +1045,7 @@

    1.2.7. Install SecHub’s diff --git a/docs/latest/sechub-operations.html b/docs/latest/sechub-operations.html index 2834731892..7f8c73bb14 100644 --- a/docs/latest/sechub-operations.html +++ b/docs/latest/sechub-operations.html @@ -531,7 +531,7 @@ diff --git a/docs/latest/sechub-product-delegation-server.html b/docs/latest/sechub-product-delegation-server.html index 6a5baa4e7f..5c6796ecce 100644 --- a/docs/latest/sechub-product-delegation-server.html +++ b/docs/latest/sechub-product-delegation-server.html @@ -531,7 +531,7 @@ +
    +
    2.1.9.1. Remote Data
    +
    +

    Instead of configuring the file system and uploading local data, it is also possible to define a remote data section to automatically retrieve the data to be scanned from remote locations. +In a PREPARE phase the PDS prepare will download the data from the remote location and upload it to a shared storage. +From there any other PDS solution can access the data for scanning. +The type is not mandatory, but it is recommended to set it to git or docker to make it clear what type of remote data is being used.

    +
    +
    +

    Scan types (codeScan, licenseScan etc.), includes or excludes as well as false positives can be defined as usual.

    +
    +
    +
    2.1.9.1.1. Example source remote data scan
    +
    +
    Codes scan configuration for remote git sources without credentials
    +
    +
    {
    +  "apiVersion" : "1.0",
    +  "data" : {
    +    "sources" : [ {
    +      "name" : "firmware-images",
    +      "remote" : {
    +        "location" : "https://path-to-my-git-exmaple/repository.git", (1)
    +        "type" : "git" (2)
    +      }
    +    } ]
    +  },
    +  "codeScan" : {
    +    "use" : [ "firmware-images"]
    +  }
    +}
    +
    +
    +
    + + + + + + + + + +
    1location: The URL to remote data. (for example a git repository or a docker registry)
    2type: The type of the remote data. Currently supported are git or docker.
    +
    +
    +
    +
    2.1.9.1.2. Example source remote data scan with credentials
    +
    +
    Code scan configuration for remote git sources with credentials
    +
    +
    {
    +  "apiVersion" : "1.0",
    +  "data" : {
    +    "sources" : [ {
    +      "name" : "firmware-images",
    +      "remote" : {
    +        "location" : "https://path-to-my-git-exmaple/repository.git", (1)
    +        "type" : "git", (2)
    +        "credentials" : {
    +          "user" : { (3)
    +            "name" : "my-username", (4)
    +            "password" : "my-password" (5)
    +          }
    +        }
    +      }
    +    } ]
    +  },
    +  "codeScan" : {
    +    "use" : [ "firmware-images"]
    +  }
    +}
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    1location: The URL to remote data. (for example a git repository or a docker registry)
    2type: The type of the remote data. Currently supported are git or docker.
    3user: Defines user credentials
    4name: The username to access remote data
    5password: The API token or password that grant access to remote data
    +
    +
    +
    +
    2.1.9.1.3. Example binaries remote data scan with credentials
    +
    +
    Codes scan configuration for remote git sources with credentials
    +
    +
    {
    +  "apiVersion" : "1.0",
    +  "data" : {
    +    "binaries" : [ {
    +      "name" : "firmware-images",
    +      "remote" : {
    +        "location" : "https://path-to-your-image:tag", (1)
    +        "type" : "docker", (2)
    +        "credentials" : {
    +          "user" : {
    +            "name" : "my-username",
    +            "password" : "my-password"
    +          }
    +        }
    +      }
    +    } ]
    +  },
    +  "codeScan" : {
    +    "use" : [ "firmware-images"]
    +  }
    +}
    +
    +
    +
    + + + + + + + + + +
    1location: The URL to remote data. (for example a git repository or a docker registry)
    2type: The type of the remote data. Currently supported are git or docker.
    +
    +
    +

    2.1.10. MetaData

    @@ -2807,7 +2958,7 @@

    2.2.2. Check if the server is

    REST API for usecase UC_039-Check if the server is alive and running.

    -
    2.2.2.1. HEAD variant
    +
    2.2.2.1. GET variant

    Definition

    @@ -2830,7 +2981,7 @@
    2.2.2.1. HEAD variant

    Method

    -

    HEAD

    +

    GET

    Status code

    @@ -2846,7 +2997,7 @@
    2.2.2.1. HEAD variant
    -
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
    +
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
    @@ -2855,7 +3006,7 @@
    2.2.2.1. HEAD variant
    -
    2.2.2.2. GET variant
    +
    2.2.2.2. HEAD variant

    Definition

    @@ -2878,7 +3029,7 @@
    2.2.2.2. GET variant

    Method

    -

    GET

    +

    HEAD

    Status code

    @@ -2894,7 +3045,7 @@
    2.2.2.2. GET variant
    -
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X GET
    +
    $ curl 'https://sechub.example.com/api/anonymous/check/alive' -i -X HEAD
    @@ -3609,7 +3760,7 @@

    2.2.9. Admin downloads all

    -
    $ curl 'https://sechub.example.com/api/admin/scan/download/fce5f68a-ffa4-482e-b1a4-6609ad62e446' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/admin/scan/download/65fc6925-ffcb-4f71-8468-01b1a5b5a65d' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -4774,7 +4925,7 @@

    2.2.20. Admin shows scan logs for pro
    -
    [{"sechubJobUUID":"0f611d86-f09d-4031-b4d1-9a7bf48fa91b","executedBy":"spartakus","started":"2024-05-30T13:04:15.220384353","ended":"2024-05-31T13:04:15.220408478","status":"OK"}]
    +
    [{"sechubJobUUID":"1c24f69f-c988-4ce7-94ef-22dfac5ba3db","executedBy":"spartakus","started":"2024-07-09T13:57:03.927240632","ended":"2024-07-10T13:57:03.927258626","status":"OK"}]
    @@ -5384,7 +5535,7 @@

    2.2.25.1. Code Scan variant
    -
    {"jobId":"efa30005-d868-469d-8d5f-332793acf5f6"}
    +
    {"jobId":"2c7e0719-0c4e-4f6a-aa56-6a39e63c2fe5"}
    @@ -5563,7 +5714,7 @@
    2.2.25.2. Code Sc
    -
    {"jobId":"259dcfbb-d89b-4384-a3cb-ee99b337caf1"}
    +
    {"jobId":"e61914c5-b3b6-4af0-a9bf-748a376c2638"}
    @@ -5722,7 +5873,7 @@
    2.2.25.3. Secret scan variant
    -
    {"jobId":"b08079ee-c987-4438-b936-9752378c45f1"}
    +
    {"jobId":"75d2cfea-3690-4397-8ea7-b7a0f87123a9"}
    @@ -5881,7 +6032,7 @@
    2.2.25.4. License scan variant
    -
    {"jobId":"7f5189d3-f77c-41c3-9314-9f1fe05fec95"}
    +
    {"jobId":"a37386d3-a808-4dcb-b68e-a7fcde86f2bd"}
    @@ -6035,7 +6186,7 @@
    2.2.25.5. Infrastructure s
    -
    {"jobId":"d82ce945-75d4-4cdb-b7d4-62d577bbe493"}
    +
    {"jobId":"1718acea-bb09-4621-9cfd-d5337be22244"}
    @@ -6204,7 +6355,7 @@
    2.2.25.6. Web scan anonymou
    -
    {"jobId":"86c2973d-90bc-4324-8651-ac668f1ef8b8"}
    +
    {"jobId":"24a520cd-a6ce-4120-addc-fdc21980de51"}
    @@ -6368,7 +6519,7 @@
    2.2.25.7. Web sca
    -
    {"jobId":"59723c34-f6f9-431f-8cda-69d2dc03b453"}
    +
    {"jobId":"fa954d23-1920-4338-bec4-6f4eb3271427"}
    @@ -6527,7 +6678,7 @@
    2.
    -
    {"jobId":"b2b101bf-b9b1-4e77-a4ae-d78323a75818"}
    +
    {"jobId":"603cbbb3-792e-4647-acde-a018c9672d26"}
    @@ -6701,7 +6852,7 @@
    2.2.25.9. Web Scan login
    -
    {"jobId":"c7f0ed79-d1c3-4f38-a228-1c8560f0daec"}
    +
    {"jobId":"c6f36e9c-22ce-4405-a50a-809b01ddec4a"}
    @@ -6895,7 +7046,7 @@
    2.2.25.10. Web Sc
    -
    {"jobId":"05faf70e-bd46-4488-9999-e1ddbfa25e6f"}
    +
    {"jobId":"e09816f7-bde7-4764-acb4-1b9e67316ba4"}
    @@ -7059,7 +7210,7 @@
    2.2.25.11. Web Scan headers v
    -
    {"jobId":"d91da85c-50c1-43df-8127-4d268be25bcb"}
    +
    {"jobId":"515131cd-f610-43fb-b3c7-73c227dcc919"}
    @@ -7148,7 +7299,7 @@

    2.2.26. User uploads source code

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/f2b9e878-0e91-4cea-9816-66c25eb622be/sourcecode?checkSum=checkSumValue' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/4cdef6b6-f307-42cb-bb15-13ed84e11efc/sourcecode?checkSum=checkSumValue' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -F 'file=PK  
           �<M                       test1.txtPK  ?
    @@ -7245,7 +7396,7 @@ 

    2.2.27. User approves sechub job

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/baf7a50e-4304-4c5e-9bd9-c910b163f3fc/approve' -i -X PUT \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/dd1fc660-d0e5-48aa-bedd-d8786eea7dcc/approve' -i -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -7397,7 +7548,7 @@

    2.2.28. User checks sechub job state

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/81e89420-c8e2-425c-bc40-79a1f1ca2a3f' -i -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5' -i -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -7406,7 +7557,7 @@

    2.2.28. User checks sechub job state

    -
    {"jobUUID":"81e89420-c8e2-425c-bc40-79a1f1ca2a3f","owner":"CREATOR1","created":"","started":"2024-05-31T12:49:13.732667995","ended":"2024-05-31T13:04:13.732696037","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    +
    {"jobUUID":"7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5","owner":"CREATOR1","created":"","started":"2024-07-10T13:42:02.31702027","ended":"2024-07-10T13:57:02.317046408","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    @@ -7481,7 +7632,7 @@
    2.2.29.1. JSON variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/577a6d16-be90-492a-9003-4d47e830acc5' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/1452ace3-df08-4d20-8fa8-c48d219b4e98' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -7553,7 +7704,7 @@
    2.2.29.2. HTML variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/662288c9-94b8-496d-b279-5f7c1405ea3f' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/d6929af5-02d1-4060-89b8-bb5a88a81917' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/xhtml+xml'
    @@ -8111,7 +8262,7 @@

    2.2.33. User uploads binaries

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/0b05ada7-d858-4223-8601-17abefdea554/binaries' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/844bf46d-865c-407d-a28c-e2286a7d7a96/binaries' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -H 'x-file-size: 10240' \
         -F 'file=test1.txt                                                                                           0000664 0001750 0001750 00000000000 13353454574 012170  0                                                                                                    ustar   albert                          albert                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ' \
    @@ -8192,7 +8343,7 @@ 

    2.2.34. User downloads job rep

    -
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/b82670aa-4196-419c-89f8-3336b935f174' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/69ab8fa2-fe63-45ca-aafe-6efdc937b4e8' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -8755,7 +8906,7 @@

    2.2.40. Admin lists all running jobs

    -
    [{"jobUUID":"1837542d-5f7b-4665-af41-fee03a8da57c","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-05-31T13:04:17.896949138","configuration":"{ config data }"}]
    +
    [{"jobUUID":"364a395c-7439-4f84-ae4b-b26517c3fe53","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-07-10T13:57:06.714971112","configuration":"{ config data }"}]
    @@ -8839,7 +8990,7 @@

    2.2.41. Admin cancels a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/553b487f-cad7-4bb4-a234-18b7dee2bf7e' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/cb7e5145-587c-4cc3-b536-0a516788b323' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -8928,7 +9079,7 @@

    2.2.42. Admin restarts a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/e7a9b75c-0232-4f5f-bb5a-e8cb26d450ae' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/c798ca3b-4ac7-4e54-9507-e8267d591a3a' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9017,7 +9168,7 @@

    2.2.43. Admin restarts a job (hard)

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/04b8f110-1d8a-4cbb-bdcc-f50d7b54895f' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/f96ec449-ff8e-4328-a66c-0783edd140d6' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9550,7 +9701,7 @@

    2.2.48. Admin creates an execut
    -
    12e3a55a-1888-4717-9722-3f0c25d621ea
    +
    16d02d16-9d30-4b50-a079-0a992d5d1f8c
    @@ -9634,7 +9785,7 @@

    2.2.49. Admin deletes executor con
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/8b9e920e-749f-4960-bb0f-ff701d153f14' -i -u 'user:secret' -X DELETE \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/f88cb1e3-caf7-4d3a-b8c1-5801c0bcad7a' -i -u 'user:secret' -X DELETE \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9749,7 +9900,7 @@

    2.2.50. Admin fetches executo
    -
    {"executorConfigurations":[{"uuid":"d7a371c2-b50d-4a30-9e39-cd42ceefcd95","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    +
    {"executorConfigurations":[{"uuid":"85535231-46bc-4301-b5f5-37730131dec6","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    @@ -9902,7 +10053,7 @@

    2.2.51. Admin fetches executor con
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/efde85ba-2dd6-4e75-8740-df7ba1e5115d' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/6071b1b3-4573-4ae7-a13e-e1b0fdaf149a' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -9911,7 +10062,7 @@

    2.2.51. Admin fetches executor con
    -
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"efde85ba-2dd6-4e75-8740-df7ba1e5115d"}
    +
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"6071b1b3-4573-4ae7-a13e-e1b0fdaf149a"}
    @@ -10059,7 +10210,7 @@

    2.2.52. Admin updates execut
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/3b5d9059-e968-4af2-9126-fae0b9360fc0' -i -u 'user:secret' -X PUT \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/81170e88-a5f7-4527-a19a-b9494b138f0f' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -d '{"name":"New name","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productNew.example.com","credentials":{"user":"env:EXAMPLE_NEW_USENAME","password":"env:EXAMPLE_NEW_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]}}'
    @@ -10403,7 +10554,7 @@

    2.2.55. Admin updates execution profile
    $ curl 'https://sechub.example.com/api/admin/config/execution/profile/existing-profile-1' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
    -    -d '{"description":"changed description","configurations":[{"uuid":"ee73c2ca-ba96-4bdc-a027-83971ed1b8aa","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'
    + -d '{"description":"changed description","configurations":[{"uuid":"f016a684-830a-4c66-aa5b-1f49e85e9996","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'

    @@ -10559,7 +10710,7 @@

    2.2.56. Admin fetches execution profile

    -
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"4a507f78-91e9-4d61-a9c9-9cadcc3467a1"}],"projectIds":["project-1","project-2"]}
    +
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"df9984fd-f307-4847-a49a-27700ee434d0"}],"projectIds":["project-1","project-2"]}
    @@ -11542,7 +11693,7 @@

    2.2.67. User lists jobs for project

    -
    {"page":0,"totalPages":1,"content":[{"jobUUID":"1594682c-750c-45b1-8a59-8c8a63464b52","executedBy":"User1","created":"2024-05-31T12:47:13.890793914","started":"2024-05-31T12:49:13.890823239","ended":"2024-05-31T13:04:13.890834209","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    +
    {"page":0,"totalPages":1,"content":[{"jobUUID":"c84c93ed-3719-4a72-8d2a-42be7efdbc5d","executedBy":"User1","created":"2024-07-10T13:40:02.462329442","started":"2024-07-10T13:42:02.462359458","ended":"2024-07-10T13:57:02.46237082","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    @@ -12805,14 +12956,14 @@

    4.1.12. UC_011-User starts scan by client

    4

    -

    get job status

    +

    download job report and traffic light

    SUPERADMIN, USER

    4

    4

    -

    download job report and traffic light

    +

    get job status

    SUPERADMIN, USER

    @@ -13035,17 +13186,17 @@

    4.1.16. UC_015-Admin assigns user to project

    2

    -

    Update schedule authorization parts

    - +

    Assign user

    +

    SUPERADMIN

    2

    - +

    The service will add the user to the project. If user does not have ROLE_USER it will obtain it

    2

    -

    Assign user

    -

    SUPERADMIN

    +

    Update schedule authorization parts

    +

    3

    -

    The service will add the user to the project. If user does not have ROLE_USER it will obtain it

    +

    3

    @@ -13134,17 +13285,17 @@

    4.1.17. UC_016-Admin unassigns user from project

    2

    -

    Update authorization parts

    - +

    Unassign user

    +

    SUPERADMIN

    2

    - +

    The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

    2

    -

    Unassign user

    -

    SUPERADMIN

    +

    Update authorization parts

    +

    2

    -

    The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed

    +

    2

    @@ -13775,7 +13926,7 @@

    4.1.28. UC_027-Admin grants admin rights to user

    Service grants user admin rights.

    SUPERADMIN

    3, 4

    -

    The service will grant user admin righs and triggers asynchronous events

    +

    The service will grant user admin rights and triggers asynchronous events

    3

    @@ -14919,24 +15070,24 @@

    4.1.43. UC_042-Admin restarts a job (hard)

    3

    -

    Try to restart job

    +

    Inform sechub admins when job restart was canceled

    3

    -

    When job is found and job is not already finsihed, a restart will be triggered. Existing batch jobs will be terminated

    +

    3

    -

    Try to rstart job (hard)

    +

    Try to restart job

    3

    -

    When job is found, a restart will be triggered. Existing batch jobs will be terminated

    +

    When job is found and job is not already finsihed, a restart will be triggered. Existing batch jobs will be terminated

    3

    -

    Inform sechub admins when job restart was canceled

    +

    Try to rstart job (hard)

    4

    - +

    When job is found, a restart will be triggered. Existing batch jobs will be terminated

    4

    @@ -15247,7 +15398,7 @@

    4.1.50. UC_049-Admin fetches executor configurat

    Rest call

    SUPERADMIN

    2

    -

    Administrator fetches lsit of existing product executor configurations by calling REST API, will not contain setup information

    +

    Administrator fetches list of existing product executor configurations by calling REST API, will not contain setup information

    2

    @@ -16506,7 +16657,7 @@

    4.1.73.1. Overview
    4.1.73.1.1. Diagram
    -Sequence diagram of messaging overview +Sequence diagram of messaging overview
    @@ -16683,7 +16834,7 @@
    4.1.73.2. Message
    4.1.73.3. Message AUTO_CLEANUP_CONFIGURATION_CHANGED
    -Sequence diagram of messaging AUTO_CLEANUP_CONFIGURATION_CHANGED +Sequence diagram of messaging AUTO_CLEANUP_CONFIGURATION_CHANGED
    @@ -16720,7 +16871,7 @@
    4.1.73.4. Message BINARY_UPLOA
    4.1.73.5. Message JOB_CANCELLATION_RUNNING
    -Sequence diagram of messaging JOB_CANCELLATION_RUNNING +Sequence diagram of messaging JOB_CANCELLATION_RUNNING
    @@ -16965,7 +17116,7 @@
    4.1.73.17
    4.1.73.18. Message PROJECT_ACCESS_LEVEL_CHANGED
    -Sequence diagram of messaging PROJECT_ACCESS_LEVEL_CHANGED +Sequence diagram of messaging PROJECT_ACCESS_LEVEL_CHANGED
    @@ -16981,7 +17132,7 @@
    4.1.73.19. Message PROJECT_CREATE
    4.1.73.20. Message PROJECT_DELETED
    -Sequence diagram of messaging PROJECT_DELETED +Sequence diagram of messaging PROJECT_DELETED
    @@ -17198,7 +17349,7 @@
    4.1.73.30. Messag
    4.1.73.31. Message REQUEST_USER_ROLE_RECALCULATION
    -Sequence diagram of messaging REQUEST_USER_ROLE_RECALCULATION +Sequence diagram of messaging REQUEST_USER_ROLE_RECALCULATION
    @@ -17249,7 +17400,7 @@
    4.1.73.33. Message SCAN_FAILED
    4.1.73.34. Message SCHEDULER_JOB_PROCESSING_DISABLED
    -Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_DISABLED +Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_DISABLED
    @@ -17278,7 +17429,7 @@
    4.1.73.34. Mess
    4.1.73.35. Message SCHEDULER_JOB_PROCESSING_ENABLED
    -Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_ENABLED +Sequence diagram of messaging SCHEDULER_JOB_PROCESSING_ENABLED
    @@ -17323,7 +17474,7 @@
    4.1.73.37. Message SCHEDULER_ST
    4.1.73.38. Message SCHEDULER_STATUS_UPDATE
    -Sequence diagram of messaging SCHEDULER_STATUS_UPDATE +Sequence diagram of messaging SCHEDULER_STATUS_UPDATE
    @@ -17339,7 +17490,7 @@
    4.1.73.39. Message SOURCE_UPLO
    4.1.73.40. Message START_SCAN
    -Sequence diagram of messaging START_SCAN +Sequence diagram of messaging START_SCAN
    @@ -17379,7 +17530,7 @@
    4.1.73.41. Message UNSUPPOR
    4.1.73.42. Message USER_ADDED_TO_PROJECT
    -Sequence diagram of messaging USER_ADDED_TO_PROJECT +Sequence diagram of messaging USER_ADDED_TO_PROJECT
    @@ -17453,7 +17604,7 @@
    4.1.73.45. Message USER_CREATED
    4.1.73.46. Message USER_DELETED
    -Sequence diagram of messaging USER_DELETED +Sequence diagram of messaging USER_DELETED
    @@ -17506,7 +17657,7 @@
    4.1.73.49. Message USER
    4.1.73.50. Message USER_REMOVED_FROM_PROJECT
    -Sequence diagram of messaging USER_REMOVED_FROM_PROJECT +Sequence diagram of messaging USER_REMOVED_FROM_PROJECT
    @@ -17602,7 +17753,7 @@
    4.1.73.52. Message USER_SIG
    diff --git a/docs/latest/sechub-techdoc.html b/docs/latest/sechub-techdoc.html index 68e14047f3..0920ab2668 100644 --- a/docs/latest/sechub-techdoc.html +++ b/docs/latest/sechub-techdoc.html @@ -531,7 +531,7 @@
    -
    [{"sechubJobUUID":"0f611d86-f09d-4031-b4d1-9a7bf48fa91b","executedBy":"spartakus","started":"2024-05-30T13:04:15.220384353","ended":"2024-05-31T13:04:15.220408478","status":"OK"}]
    +
    [{"sechubJobUUID":"1c24f69f-c988-4ce7-94ef-22dfac5ba3db","executedBy":"spartakus","started":"2024-07-09T13:57:03.927240632","ended":"2024-07-10T13:57:03.927258626","status":"OK"}]
    @@ -17241,7 +17297,7 @@
    11.1.25.1. Code Scan variant
    -
    {"jobId":"efa30005-d868-469d-8d5f-332793acf5f6"}
    +
    {"jobId":"2c7e0719-0c4e-4f6a-aa56-6a39e63c2fe5"}
    @@ -17420,7 +17476,7 @@
    11.1.25.2. Code S
    -
    {"jobId":"259dcfbb-d89b-4384-a3cb-ee99b337caf1"}
    +
    {"jobId":"e61914c5-b3b6-4af0-a9bf-748a376c2638"}
    @@ -17579,7 +17635,7 @@
    11.1.25.3. Secret scan variant
    -
    {"jobId":"b08079ee-c987-4438-b936-9752378c45f1"}
    +
    {"jobId":"75d2cfea-3690-4397-8ea7-b7a0f87123a9"}
    @@ -17738,7 +17794,7 @@
    11.1.25.4. License scan variant
    -
    {"jobId":"7f5189d3-f77c-41c3-9314-9f1fe05fec95"}
    +
    {"jobId":"a37386d3-a808-4dcb-b68e-a7fcde86f2bd"}
    @@ -17892,7 +17948,7 @@
    11.1.25.5. Infrastructure
    -
    {"jobId":"d82ce945-75d4-4cdb-b7d4-62d577bbe493"}
    +
    {"jobId":"1718acea-bb09-4621-9cfd-d5337be22244"}
    @@ -18061,7 +18117,7 @@
    11.1.25.6. Web scan anonymo
    -
    {"jobId":"86c2973d-90bc-4324-8651-ac668f1ef8b8"}
    +
    {"jobId":"24a520cd-a6ce-4120-addc-fdc21980de51"}
    @@ -18225,7 +18281,7 @@
    11.1.25.7. Web sc
    -
    {"jobId":"59723c34-f6f9-431f-8cda-69d2dc03b453"}
    +
    {"jobId":"fa954d23-1920-4338-bec4-6f4eb3271427"}
    @@ -18384,7 +18440,7 @@
    11
    -
    {"jobId":"b2b101bf-b9b1-4e77-a4ae-d78323a75818"}
    +
    {"jobId":"603cbbb3-792e-4647-acde-a018c9672d26"}
    @@ -18558,7 +18614,7 @@
    11.1.25.9. Web Scan login
    -
    {"jobId":"c7f0ed79-d1c3-4f38-a228-1c8560f0daec"}
    +
    {"jobId":"c6f36e9c-22ce-4405-a50a-809b01ddec4a"}
    @@ -18752,7 +18808,7 @@
    11.1.25.10. Web S
    -
    {"jobId":"05faf70e-bd46-4488-9999-e1ddbfa25e6f"}
    +
    {"jobId":"e09816f7-bde7-4764-acb4-1b9e67316ba4"}
    @@ -18916,7 +18972,7 @@
    11.1.25.11. Web Scan headers
    -
    {"jobId":"d91da85c-50c1-43df-8127-4d268be25bcb"}
    +
    {"jobId":"515131cd-f610-43fb-b3c7-73c227dcc919"}
    @@ -19005,7 +19061,7 @@

    11.1.26. User uploads source code

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/f2b9e878-0e91-4cea-9816-66c25eb622be/sourcecode?checkSum=checkSumValue' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/4cdef6b6-f307-42cb-bb15-13ed84e11efc/sourcecode?checkSum=checkSumValue' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -F 'file=PK  
           �<M                       test1.txtPK  ?
    @@ -19102,7 +19158,7 @@ 

    11.1.27. User approves sechub job

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/baf7a50e-4304-4c5e-9bd9-c910b163f3fc/approve' -i -X PUT \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/dd1fc660-d0e5-48aa-bedd-d8786eea7dcc/approve' -i -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -19254,7 +19310,7 @@

    11.1.28. User checks sechub job state

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/81e89420-c8e2-425c-bc40-79a1f1ca2a3f' -i -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5' -i -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -19263,7 +19319,7 @@

    11.1.28. User checks sechub job state

    -
    {"jobUUID":"81e89420-c8e2-425c-bc40-79a1f1ca2a3f","owner":"CREATOR1","created":"","started":"2024-05-31T12:49:13.732667995","ended":"2024-05-31T13:04:13.732696037","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    +
    {"jobUUID":"7c58dbab-860f-4d45-b1f9-3de1b7a8e5b5","owner":"CREATOR1","created":"","started":"2024-07-10T13:42:02.31702027","ended":"2024-07-10T13:57:02.317046408","state":"ENDED","result":"OK","trafficLight":"GREEN"}
    @@ -19338,7 +19394,7 @@
    11.1.29.1. JSON variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/577a6d16-be90-492a-9003-4d47e830acc5' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/1452ace3-df08-4d20-8fa8-c48d219b4e98' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -19410,7 +19466,7 @@
    11.1.29.2. HTML variant
    -
    $ curl 'https://sechub.example.com/api/project/project1/report/662288c9-94b8-496d-b279-5f7c1405ea3f' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/d6929af5-02d1-4060-89b8-bb5a88a81917' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/xhtml+xml'
    @@ -19968,7 +20024,7 @@

    11.1.33. User uploads binaries

    -
    $ curl 'https://sechub.example.com/api/project/project1/job/0b05ada7-d858-4223-8601-17abefdea554/binaries' -i -X POST \
    +
    $ curl 'https://sechub.example.com/api/project/project1/job/844bf46d-865c-407d-a28c-e2286a7d7a96/binaries' -i -X POST \
         -H 'Content-Type: multipart/form-data;charset=UTF-8' \
         -H 'x-file-size: 10240' \
         -F 'file=test1.txt                                                                                           0000664 0001750 0001750 00000000000 13353454574 012170  0                                                                                                    ustar   albert                          albert                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ' \
    @@ -20049,7 +20105,7 @@ 

    11.1.34. User downloads job re

    -
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/b82670aa-4196-419c-89f8-3336b935f174' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/project/project1/report/spdx/69ab8fa2-fe63-45ca-aafe-6efdc937b4e8' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -H 'Accept: application/json'
    @@ -20612,7 +20668,7 @@

    11.1.40. Admin lists all running jobs

    -
    [{"jobUUID":"1837542d-5f7b-4665-af41-fee03a8da57c","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-05-31T13:04:17.896949138","configuration":"{ config data }"}]
    +
    [{"jobUUID":"364a395c-7439-4f84-ae4b-b26517c3fe53","projectId":"project-name","owner":"owner-userid","status":"RUNNING","since":"2024-07-10T13:57:06.714971112","configuration":"{ config data }"}]
    @@ -20696,7 +20752,7 @@

    11.1.41. Admin cancels a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/553b487f-cad7-4bb4-a234-18b7dee2bf7e' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/cancel/cb7e5145-587c-4cc3-b536-0a516788b323' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -20785,7 +20841,7 @@

    11.1.42. Admin restarts a job

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/e7a9b75c-0232-4f5f-bb5a-e8cb26d450ae' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart/c798ca3b-4ac7-4e54-9507-e8267d591a3a' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -20874,7 +20930,7 @@

    11.1.43. Admin restarts a job (hard)

    -
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/04b8f110-1d8a-4cbb-bdcc-f50d7b54895f' -i -u 'user:secret' -X POST \
    +
    $ curl 'https://sechub.example.com/api/admin/jobs/restart-hard/f96ec449-ff8e-4328-a66c-0783edd140d6' -i -u 'user:secret' -X POST \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -21407,7 +21463,7 @@

    11.1.48. Admin creates an execu
    -
    12e3a55a-1888-4717-9722-3f0c25d621ea
    +
    16d02d16-9d30-4b50-a079-0a992d5d1f8c
    @@ -21491,7 +21547,7 @@

    11.1.49. Admin deletes executor co
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/8b9e920e-749f-4960-bb0f-ff701d153f14' -i -u 'user:secret' -X DELETE \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/f88cb1e3-caf7-4d3a-b8c1-5801c0bcad7a' -i -u 'user:secret' -X DELETE \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -21606,7 +21662,7 @@

    11.1.50. Admin fetches execut
    -
    {"executorConfigurations":[{"uuid":"d7a371c2-b50d-4a30-9e39-cd42ceefcd95","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    +
    {"executorConfigurations":[{"uuid":"85535231-46bc-4301-b5f5-37730131dec6","name":"example configuration","enabled":true}],"type":"executorConfigurationList"}
    @@ -21759,7 +21815,7 @@

    11.1.51. Admin fetches executor co
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/efde85ba-2dd6-4e75-8740-df7ba1e5115d' -i -u 'user:secret' -X GET \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/6071b1b3-4573-4ae7-a13e-e1b0fdaf149a' -i -u 'user:secret' -X GET \
         -H 'Content-Type: application/json;charset=UTF-8'
    @@ -21768,7 +21824,7 @@

    11.1.51. Admin fetches executor co
    -
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"efde85ba-2dd6-4e75-8740-df7ba1e5115d"}
    +
    {"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value"}]},"executorVersion":1,"enabled":false,"uuid":"6071b1b3-4573-4ae7-a13e-e1b0fdaf149a"}
    @@ -21916,7 +21972,7 @@

    11.1.52. Admin updates execu
    -
    $ curl 'https://sechub.example.com/api/admin/config/executor/3b5d9059-e968-4af2-9126-fae0b9360fc0' -i -u 'user:secret' -X PUT \
    +
    $ curl 'https://sechub.example.com/api/admin/config/executor/81170e88-a5f7-4527-a19a-b9494b138f0f' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
         -d '{"name":"New name","productIdentifier":"PDS_CODESCAN","executorVersion":1,"enabled":false,"setup":{"baseURL":"https://productNew.example.com","credentials":{"user":"env:EXAMPLE_NEW_USENAME","password":"env:EXAMPLE_NEW_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]}}'
    @@ -22260,7 +22316,7 @@

    11.1.55. Admin updates execution profil
    $ curl 'https://sechub.example.com/api/admin/config/execution/profile/existing-profile-1' -i -u 'user:secret' -X PUT \
         -H 'Content-Type: application/json;charset=UTF-8' \
    -    -d '{"description":"changed description","configurations":[{"uuid":"ee73c2ca-ba96-4bdc-a027-83971ed1b8aa","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'
    + -d '{"description":"changed description","configurations":[{"uuid":"f016a684-830a-4c66-aa5b-1f49e85e9996","executorVersion":0,"enabled":false,"setup":{"credentials":{},"jobParameters":[]}}],"enabled":true}'

    @@ -22416,7 +22472,7 @@

    11.1.56. Admin fetches execution profil

    -
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"4a507f78-91e9-4d61-a9c9-9cadcc3467a1"}],"projectIds":["project-1","project-2"]}
    +
    {"description":"a description","enabled":true,"configurations":[{"name":"New name","productIdentifier":"PDS_CODESCAN","setup":{"baseURL":"https://product.example.com","credentials":{"user":"env:EXAMPLE_USENAME","password":"env:EXAMPLE_PASSWORD"},"jobParameters":[{"key":"example.key1","value":"A value but changed. Remark: the other parameter (example.key2) has been removed by this call"}]},"executorVersion":1,"enabled":false,"uuid":"df9984fd-f307-4847-a49a-27700ee434d0"}],"projectIds":["project-1","project-2"]}
    @@ -23399,7 +23455,7 @@

    11.1.67. User lists jobs for project

    -
    {"page":0,"totalPages":1,"content":[{"jobUUID":"1594682c-750c-45b1-8a59-8c8a63464b52","executedBy":"User1","created":"2024-05-31T12:47:13.890793914","started":"2024-05-31T12:49:13.890823239","ended":"2024-05-31T13:04:13.890834209","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    +
    {"page":0,"totalPages":1,"content":[{"jobUUID":"c84c93ed-3719-4a72-8d2a-42be7efdbc5d","executedBy":"User1","created":"2024-07-10T13:40:02.462329442","started":"2024-07-10T13:42:02.462359458","ended":"2024-07-10T13:57:02.46237082","executionState":"ENDED","trafficLight":"GREEN","executionResult":"OK","metaData":{"labels":{"stage":"test"}}}]}
    @@ -25244,7 +25300,7 @@
    15.5.2.2.3. Profiles
    diff --git a/docs/latest/sechub-tutorials.html b/docs/latest/sechub-tutorials.html index 93793bbd2d..04b610b5b1 100644 --- a/docs/latest/sechub-tutorials.html +++ b/docs/latest/sechub-tutorials.html @@ -531,7 +531,7 @@

    A=uo; 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 WcM`516CQ;=dhU#wLD^~7+y4*u+3Iir literal 0 HcmV?d00001 diff --git a/docs/latest/pds-download.html b/docs/latest/pds-download.html index 467342aecf..ef8bbf8c02 100644 --- a/docs/latest/pds-download.html +++ b/docs/latest/pds-download.html @@ -1,7 +1,7 @@ - + Main Page diff --git a/docs/latest/sechub-architecture.html b/docs/latest/sechub-architecture.html index 2a970c0d59..540570e0ba 100644 --- a/docs/latest/sechub-architecture.html +++ b/docs/latest/sechub-architecture.html @@ -531,7 +531,7 @@