diff --git a/build.gradle b/build.gradle index 5b0ac13639..5cadc78fee 100644 --- a/build.gradle +++ b/build.gradle @@ -33,16 +33,16 @@ plugins { id 'org.openapi.generator' version '6.5.0' // spring - id 'org.springframework.boot' version '2.7.11' apply false + id 'org.springframework.boot' version '3.2.2' apply false // spotless code formatter // (see https://github.com/diffplug/spotless) - id 'com.diffplug.spotless' version '6.22.0' + id 'com.diffplug.spotless' version '6.23.3' // versions plugin for checking new available library versions etc. // (see https://github.com/ben-manes/gradle-versions-plugin) - id 'com.github.ben-manes.versions' version '0.46.0' - + id 'com.github.ben-manes.versions' version '0.50.0' + // Details about every gradle plugin can be found at // https://plugins.gradle.org/plugin/${pluginId} } diff --git a/deprecated-sechub-adapter-nessus/src/main/java/com/mercedesbenz/sechub/adapter/nessus/NessusAdapterV1.java b/deprecated-sechub-adapter-nessus/src/main/java/com/mercedesbenz/sechub/adapter/nessus/NessusAdapterV1.java index 7e2fb500c0..ec3469d0e4 100644 --- a/deprecated-sechub-adapter-nessus/src/main/java/com/mercedesbenz/sechub/adapter/nessus/NessusAdapterV1.java +++ b/deprecated-sechub-adapter-nessus/src/main/java/com/mercedesbenz/sechub/adapter/nessus/NessusAdapterV1.java @@ -14,6 +14,8 @@ import org.springframework.context.annotation.Profile; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; @@ -109,7 +111,7 @@ private void startExport(NessusContext context) throws AdapterException { ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); if (!OK.equals(response.getStatusCode())) { - throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NessusRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } String fileId = context.json().fetch("file", response).asText(); context.setExportFileId(fileId); @@ -133,7 +135,8 @@ private String resolveHistoryId(NessusAdapterContext context) throws AdapterExce String apiUrl = createGetHistoryIdsApiURL(context); ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); if (!OK.equals(response.getStatusCode())) { - throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + + throw new NessusRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } String content = response.getBody(); String historyId = resolveHistoryIdByUUID(content, context); @@ -142,6 +145,10 @@ private String resolveHistoryId(NessusAdapterContext context) throws AdapterExce return historyId; } + private HttpStatus converToHttpStatus(HttpStatusCode code) { + return HttpStatus.valueOf(code.value()); + } + private void launchScan(NessusAdapterContext context) throws AdapterException { NessusAdapterConfig config = context.getConfig(); @@ -391,7 +398,7 @@ protected String getCurrentState(NessusAdapterContext context) throws Exception ResponseEntity response = context.getRestOperations().exchange(apiUrl, HttpMethod.GET, entity, String.class); if (!OK.equals(response.getStatusCode())) { - throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NessusRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } String status = context.json().fetch("info", response).fetch("status").asText(); LOG.debug("{} found status {}", adapterLogId, status); @@ -416,7 +423,7 @@ protected void handleNoLongerWaitingState(String state, NessusAdapterContext con ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); if (!OK.equals(response.getStatusCode())) { - throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NessusRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } String result = response.getBody(); @@ -431,7 +438,7 @@ protected String getCurrentState(NessusAdapterContext context) throws Exception ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); if (!OK.equals(response.getStatusCode())) { - throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NessusRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } String state = context.json().fetch("status", response).asText(); diff --git a/deprecated-sechub-adapter-netsparker/src/main/java/com/mercedesbenz/sechub/adapter/netsparker/NetsparkerAdapterV1.java b/deprecated-sechub-adapter-netsparker/src/main/java/com/mercedesbenz/sechub/adapter/netsparker/NetsparkerAdapterV1.java index 48af575dd5..acecf36dc9 100644 --- a/deprecated-sechub-adapter-netsparker/src/main/java/com/mercedesbenz/sechub/adapter/netsparker/NetsparkerAdapterV1.java +++ b/deprecated-sechub-adapter-netsparker/src/main/java/com/mercedesbenz/sechub/adapter/netsparker/NetsparkerAdapterV1.java @@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Profile; import org.springframework.http.HttpEntity; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; @@ -98,7 +100,7 @@ void createWebsite(NetsparkerContext context) throws AdapterException { try { ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); if (!CREATED.equals(response.getStatusCode())) { - throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NetsparkerRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } } catch (HttpClientErrorException e) { LOG.error(e.getResponseBodyAsString()); @@ -113,7 +115,7 @@ void fetchReport(NetsparkerAdapterContext context) { String apiUrl = createAPIURL(APICALL_GET_SCAN_REPORT + context.getProductContextId() + "?Type=Vulnerabilities&Format=Xml", context.getConfig()); ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); if (!OK.equals(response.getStatusCode())) { - throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NetsparkerRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } String body = response.getBody(); context.setResult(body); @@ -188,13 +190,13 @@ private void createNewScanAndFetchId(NetsparkerContext context) throws AdapterEx LOG.debug("{} calling api url '{}'", traceID, apiUrl); ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); if (!CREATED.equals(response.getStatusCode())) { - throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NetsparkerRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } context.setProductContextId(extractIDFromScanResult(response.getBody(), context)); LOG.debug("{} created new scan and got netsparker ID '{}'", traceID, context.getProductContextId()); } catch (HttpClientErrorException e) { - throw new NetsparkerRESTFailureException(e.getStatusCode(), e.getResponseBodyAsString()); + throw new NetsparkerRESTFailureException(converToHttpStatus(e.getStatusCode()), e.getResponseBodyAsString()); } } @@ -274,11 +276,15 @@ protected String getCurrentState(NetsparkerAdapterContext context) throws Adapte ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); if (!OK.equals(response.getStatusCode())) { - throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + throw new NetsparkerRESTFailureException(converToHttpStatus(response.getStatusCode()), response.getBody()); } String state = context.json().fetch("State", response).asText(); LOG.debug("{} state is '{}'", traceID, state); return state; } } + + private HttpStatus converToHttpStatus(HttpStatusCode code) { + return HttpStatus.valueOf(code.value()); + } } diff --git a/gradle/build-spring.gradle b/gradle/build-spring.gradle index 9535942d9a..5f43d79d28 100644 --- a/gradle/build-spring.gradle +++ b/gradle/build-spring.gradle @@ -10,8 +10,6 @@ subprojects { mavenBom "$springBootMavenBomCoordinates" } } - - ext['junit-jupiter.version'] = '5.8.2' logger.info("found spring boot relevant project:$project") diff --git a/gradle/libraries.gradle b/gradle/libraries.gradle index 534c16cbd8..5be3455246 100644 --- a/gradle/libraries.gradle +++ b/gradle/libraries.gradle @@ -30,11 +30,11 @@ ext { * management is defined here: */ dom4j: "2.1.4", - jsoup: "1.15.4", + jsoup: "1.17.2", re2j: "1.7", logstash_logback_encoder: "7.3", - aws_java_sdk_s3: "1.12.453", - postgresql: "42.6.0", + aws_java_sdk_s3: "1.12.629", + postgresql: "42.7.1", /* JDK > 9 needs these ones: */ jaxb_api: "2.3.1", @@ -42,37 +42,44 @@ ext { xml_bind: "2.2.0", /* apache http components*/ - apache_httpcomponents_client: "4.5.14", + apache_httpcomponents_client: "5.2.1", /* apache commons */ - apache_commons_cli: "1.5.0", - apache_commons_io: "2.11.0", - apache_commons_validator: "1.7", - apache_commons_fileupload: "1.5", - apache_commons_compress: "1.24.0", - apache_commons_lang3: "3.12.0", + apache_commons_cli: "1.6.0", + apache_commons_io: "2.15.1", + apache_commons_validator: "1.8.0", + + // https://mvnrepository.com/artifact/org.apache.commons/commons-fileupload2-core + apache_commons_fileupload2_core: "2.0.0-M2", + // https://mvnrepository.com/artifact/org.apache.commons/commons-fileupload2-jakarta + apache_commons_fileupload2_jakarta: "2.0.0-M1", + apache_commons_compress: "1.25.0", + apache_commons_lang3: "3.14.0", /* testing */ junit4: "4.13.2", - wiremock: "2.27.2", - s3mock: "2.11.0", + wiremock: "3.0.1", + s3mock: "3.3.0", /* gradle plugins */ - dependency_check: "8.2.1", - grgit: "5.0.0", + dependency_check: "9.0.7", + grgit: "5.2.1", + cyclonedx: "1.8.1", /* documentation */ asciidoctor_j: "2.5.2", asciidoctor_j_diagram: "2.2.1", - // openapi3-generator, releases see https://github.com/ePages-de/restdocs-api-spec/releases - restDocsApiSpec: "0.16.4", // newest version compatible with Spring Boot 2.x + /* openapi3-generator, releases see https://github.com/ePages-de/restdocs-api-spec/releases */ + // TODO de-jcup, 2024-04-18: Currently we cannot use versions > 0.17.1 because it introduces nullable and required in the spec file which causes issues + // There exists an issue for it at https://github.com/mercedes-benz/sechub/issues/3080 + restDocsApiSpec: "0.17.1", /* Owasp Zap wrapper */ owaspzap_client_api: "1.13.0", jcommander: "1.82", - thymeleaf_extras_springsecurity5: "3.1.1.RELEASE", + thymeleaf_extras_springsecurity5: "3.1.2.RELEASE", /* SARIF */ sarif_210: "1.1.0", @@ -114,7 +121,6 @@ ext { /* additional (2): version based on other libraries used by spring boot */ - mockito_inline: "org.mockito:mockito-inline:${spring_boot_dependency_version.mockito_core}", jackson_jr_all: "com.fasterxml.jackson.jr:jackson-jr-all:${spring_boot_dependency_version.jackson_core}", @@ -123,12 +129,15 @@ ext { amazonaws_sdk: "com.amazonaws:aws-java-sdk-s3:${libraryVersion.aws_java_sdk_s3}", logstashLogbackEncoder : "net.logstash.logback:logstash-logback-encoder:${libraryVersion.logstash_logback_encoder}", - apache_httpcomponents_client: "org.apache.httpcomponents:httpclient:${libraryVersion.apache_httpcomponents_client}", + apache_httpcomponents_client: "org.apache.httpcomponents.client5:httpclient5:${libraryVersion.apache_httpcomponents_client}", apache_commons_validator: "commons-validator:commons-validator:${libraryVersion.apache_commons_validator}", apache_commons_io: "commons-io:commons-io:${libraryVersion.apache_commons_io}", apache_commons_cli: "commons-cli:commons-cli:${libraryVersion.apache_commons_cli}", - apache_commons_fileupload: "commons-fileupload:commons-fileupload:${libraryVersion.apache_commons_fileupload}", + + apache_commons_fileupload2_core: "org.apache.commons:commons-fileupload2-core:${libraryVersion.apache_commons_fileupload2_core}", + apache_commons_fileupload2_jakarta: "org.apache.commons:commons-fileupload2-jakarta:${libraryVersion.apache_commons_fileupload2_jakarta}", + apache_commons_compress: "org.apache.commons:commons-compress:${libraryVersion.apache_commons_compress}", apache_commons_lang3: "org.apache.commons:commons-lang3:${libraryVersion.apache_commons_lang3}", @@ -142,7 +151,8 @@ ext { junit4: "junit:junit:${libraryVersion.junit4}", wiremock: "com.github.tomakehurst:wiremock-standalone:${libraryVersion.wiremock}", s3mock: "com.adobe.testing:s3mock:${libraryVersion.s3mock}", - s3mock_junit4: "com.adobe.testing:s3mock-junit4:${libraryVersion.s3mock}", + s3mock_junit5: "com.adobe.testing:s3mock-junit5:${libraryVersion.s3mock}", + /* * RE2 is a regular expression engine that runs in time linear in the size of the input. * It's the default RegularExpression engine of Go diff --git a/gradle/spring_boot_dependagen.gradle b/gradle/spring_boot_dependagen.gradle index b9f5c58190..988f621c39 100644 --- a/gradle/spring_boot_dependagen.gradle +++ b/gradle/spring_boot_dependagen.gradle @@ -1,154 +1,161 @@ -// SPDX-License-Identifier: MIT ext { spring_boot_dependency = [ - // Next parts are dependencies used by Spring Boot v 2.7.11 + // Next parts are dependencies used by Spring Boot v 3.2.4 // You can use this information to use exact same library version inside // your own libraries, where you have no spring boot dependency management // - // Generated by dependagen 0.2.0 + // Generated by dependagen 1.0.0 // (see https://github.com/de-jcup/dependagen) - accessors_smart: 'net.minidev:accessors-smart:2.4.9', + accessors_smart: 'net.minidev:accessors-smart:2.5.0', android_json: 'com.vaadin.external.google:android-json:0.0.20131108.vaadin1', - antlr: 'antlr:antlr:2.7.7', + angus_activation: 'org.eclipse.angus:angus-activation:2.0.2', + antlr4_runtime: 'org.antlr:antlr4-runtime:4.13.0', asm: 'org.ow2.asm:asm:9.3', - aspectjweaver: 'org.aspectj:aspectjweaver:1.9.7', - assertj_core: 'org.assertj:assertj-core:3.22.0', - attoparser: 'org.attoparser:attoparser:2.0.5.RELEASE', - byte_buddy: 'net.bytebuddy:byte-buddy:1.12.18', - byte_buddy_agent: 'net.bytebuddy:byte-buddy-agent:1.12.9', + aspectjweaver: 'org.aspectj:aspectjweaver:1.9.21', + assertj_core: 'org.assertj:assertj-core:3.24.2', + attoparser: 'org.attoparser:attoparser:2.0.7.RELEASE', + awaitility: 'org.awaitility:awaitility:4.2.0', + byte_buddy: 'net.bytebuddy:byte-buddy:1.14.11', + byte_buddy_agent: 'net.bytebuddy:byte-buddy-agent:1.14.9', classmate: 'com.fasterxml:classmate:1.5.1', evo_inflector: 'org.atteo:evo-inflector:1.3', - hamcrest: 'org.hamcrest:hamcrest:2.2', + hamcrest: 'org.hamcrest:hamcrest:2.1', hdrhistogram: 'org.hdrhistogram:HdrHistogram:2.1.12', - hibernate_commons_annotations: 'org.hibernate.common:hibernate-commons-annotations:5.1.2.Final', - hibernate_core: 'org.hibernate:hibernate-core:5.6.15.Final', - hibernate_validator: 'org.hibernate.validator:hibernate-validator:6.2.5.Final', - hikaricp: 'com.zaxxer:HikariCP:4.0.3', - istack_commons_runtime: 'com.sun.istack:istack-commons-runtime:3.0.12', - jackson_annotations: 'com.fasterxml.jackson.core:jackson-annotations:2.13.5', - jackson_bom: 'com.fasterxml.jackson:jackson-bom:2.13.5', - jackson_core: 'com.fasterxml.jackson.core:jackson-core:2.13.5', - jackson_databind: 'com.fasterxml.jackson.core:jackson-databind:2.13.5', - jackson_datatype_jdk8: 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5', - jackson_datatype_jsr310: 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5', - jackson_module_parameter_names: 'com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5', - jakarta_activation: 'com.sun.activation:jakarta.activation:1.2.2', - jakarta_activation_api: 'jakarta.activation:jakarta.activation-api:1.2.2', - jakarta_annotation_api: 'jakarta.annotation:jakarta.annotation-api:1.3.5', - jakarta_mail: 'com.sun.mail:jakarta.mail:1.6.7', - jakarta_persistence_api: 'jakarta.persistence:jakarta.persistence-api:2.2.3', - jakarta_transaction_api: 'jakarta.transaction:jakarta.transaction-api:1.3.3', - jakarta_validation_api: 'jakarta.validation:jakarta.validation-api:2.0.2', - jakarta_xml_bind_api: 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.3', - jandex: 'org.jboss:jandex:2.4.2.Final', - javax_batch_api: 'javax.batch:javax.batch-api:1.0', - javax_servlet_api: 'javax.servlet:javax.servlet-api:3.1.0', - jaxb_runtime: 'org.glassfish.jaxb:jaxb-runtime:2.3.1', - jboss_logging: 'org.jboss.logging:jboss-logging:3.4.3.Final', - json_path: 'com.jayway.jsonpath:json-path:2.6.0', - json_smart: 'net.minidev:json-smart:2.4.7', + hibernate_commons_annotations: 'org.hibernate.common:hibernate-commons-annotations:6.0.6.Final', + hibernate_core: 'org.hibernate.orm:hibernate-core:6.4.4.Final', + hibernate_validator: 'org.hibernate.validator:hibernate-validator:8.0.1.Final', + hikaricp: 'com.zaxxer:HikariCP:5.0.1', + istack_commons_runtime: 'com.sun.istack:istack-commons-runtime:4.1.2', + jackson_annotations: 'com.fasterxml.jackson.core:jackson-annotations:2.15.4', + jackson_bom: 'com.fasterxml.jackson:jackson-bom:2.15.4', + jackson_core: 'com.fasterxml.jackson.core:jackson-core:2.15.4', + jackson_databind: 'com.fasterxml.jackson.core:jackson-databind:2.15.4', + jackson_datatype_jdk8: 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.4', + jackson_datatype_jsr310: 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.4', + jackson_module_parameter_names: 'com.fasterxml.jackson.module:jackson-module-parameter-names:2.15.4', + jakarta_activation_api: 'jakarta.activation:jakarta.activation-api:2.1.3', + jakarta_annotation_api: 'jakarta.annotation:jakarta.annotation-api:2.1.1', + jakarta_inject_api: 'jakarta.inject:jakarta.inject-api:2.0.1', + jakarta_mail: 'org.eclipse.angus:jakarta.mail:2.0.3', + jakarta_persistence_api: 'jakarta.persistence:jakarta.persistence-api:3.1.0', + jakarta_servlet_api: 'jakarta.servlet:jakarta.servlet-api:6.0.0', + jakarta_transaction_api: 'jakarta.transaction:jakarta.transaction-api:2.0.1', + jakarta_validation_api: 'jakarta.validation:jakarta.validation-api:3.0.2', + jakarta_xml_bind_api: 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0', + jandex: 'io.smallrye:jandex:3.1.2', + jaxb_core: 'org.glassfish.jaxb:jaxb-core:4.0.5', + jaxb_runtime: 'org.glassfish.jaxb:jaxb-runtime:4.0.2', + jboss_logging: 'org.jboss.logging:jboss-logging:3.5.0.Final', + json_path: 'com.jayway.jsonpath:json-path:2.9.0', + json_smart: 'net.minidev:json-smart:2.5.0', jsonassert: 'org.skyscreamer:jsonassert:1.5.1', - jul_to_slf4j: 'org.slf4j:jul-to-slf4j:1.7.36', - junit_bom: 'org.junit:junit-bom:5.8.2', - junit_jupiter: 'org.junit.jupiter:junit-jupiter:5.8.2', - junit_jupiter_api: 'org.junit.jupiter:junit-jupiter-api:5.8.2', - junit_jupiter_engine: 'org.junit.jupiter:junit-jupiter-engine:5.8.2', - junit_jupiter_params: 'org.junit.jupiter:junit-jupiter-params:5.8.2', - junit_platform_commons: 'org.junit.platform:junit-platform-commons:1.8.2', - junit_platform_engine: 'org.junit.platform:junit-platform-engine:1.8.2', + jul_to_slf4j: 'org.slf4j:jul-to-slf4j:2.0.12', + junit_bom: 'org.junit:junit-bom:5.10.2', + junit_jupiter: 'org.junit.jupiter:junit-jupiter:5.10.2', + junit_jupiter_api: 'org.junit.jupiter:junit-jupiter-api:5.10.2', + junit_jupiter_engine: 'org.junit.jupiter:junit-jupiter-engine:5.10.2', + junit_jupiter_params: 'org.junit.jupiter:junit-jupiter-params:5.10.2', + junit_platform_commons: 'org.junit.platform:junit-platform-commons:1.10.2', + junit_platform_engine: 'org.junit.platform:junit-platform-engine:1.10.2', latencyutils: 'org.latencyutils:LatencyUtils:2.0.3', - log4j_api: 'org.apache.logging.log4j:log4j-api:2.17.2', - log4j_to_slf4j: 'org.apache.logging.log4j:log4j-to-slf4j:2.17.2', - logback_classic: 'ch.qos.logback:logback-classic:1.2.12', - logback_core: 'ch.qos.logback:logback-core:1.2.12', - micrometer_core: 'io.micrometer:micrometer-core:1.9.8', - mockito_core: 'org.mockito:mockito-core:4.5.1', - mockito_junit_jupiter: 'org.mockito:mockito-junit-jupiter:4.5.1', - objenesis: 'org.objenesis:objenesis:3.2', - opentest4j: 'org.opentest4j:opentest4j:1.2.0', - slf4j_api: 'org.slf4j:slf4j-api:1.7.32', - snakeyaml: 'org.yaml:snakeyaml:1.30', - thymeleaf: 'org.thymeleaf:thymeleaf:3.0.15.RELEASE', - thymeleaf_extras_java8time: 'org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE', - thymeleaf_spring5: 'org.thymeleaf:thymeleaf-spring5:3.0.15.RELEASE', - tomcat_embed_core: 'org.apache.tomcat.embed:tomcat-embed-core:9.0.74', - tomcat_embed_el: 'org.apache.tomcat.embed:tomcat-embed-el:9.0.74', - tomcat_embed_websocket: 'org.apache.tomcat.embed:tomcat-embed-websocket:9.0.74', - txw2: 'org.glassfish.jaxb:txw2:2.3.8', + log4j_api: 'org.apache.logging.log4j:log4j-api:2.21.1', + log4j_to_slf4j: 'org.apache.logging.log4j:log4j-to-slf4j:2.21.1', + logback_classic: 'ch.qos.logback:logback-classic:1.4.14', + logback_core: 'ch.qos.logback:logback-core:1.4.14', + micrometer_commons: 'io.micrometer:micrometer-commons:1.12.4', + micrometer_core: 'io.micrometer:micrometer-core:1.12.3', + micrometer_jakarta9: 'io.micrometer:micrometer-jakarta9:1.12.4', + micrometer_observation: 'io.micrometer:micrometer-observation:1.12.4', + mockito_core: 'org.mockito:mockito-core:5.7.0', + mockito_junit_jupiter: 'org.mockito:mockito-junit-jupiter:5.7.0', + objenesis: 'org.objenesis:objenesis:3.3', + opentest4j: 'org.opentest4j:opentest4j:1.3.0', + slf4j_api: 'org.slf4j:slf4j-api:2.0.7', + snakeyaml: 'org.yaml:snakeyaml:2.2', + thymeleaf: 'org.thymeleaf:thymeleaf:3.1.2.RELEASE', + thymeleaf_spring6: 'org.thymeleaf:thymeleaf-spring6:3.1.2.RELEASE', + tomcat_embed_core: 'org.apache.tomcat.embed:tomcat-embed-core:10.1.19', + tomcat_embed_el: 'org.apache.tomcat.embed:tomcat-embed-el:10.1.19', + tomcat_embed_websocket: 'org.apache.tomcat.embed:tomcat-embed-websocket:10.1.19', + txw2: 'org.glassfish.jaxb:txw2:4.0.5', unbescape: 'org.unbescape:unbescape:1.1.6.RELEASE', xmlunit_core: 'org.xmlunit:xmlunit-core:2.9.1' ] spring_boot_dependency_version = [ - accessors_smart: '2.4.9', + accessors_smart: '2.5.0', android_json: '0.0.20131108.vaadin1', - antlr: '2.7.7', + angus_activation: '2.0.2', + antlr4_runtime: '4.13.0', asm: '9.3', - aspectjweaver: '1.9.7', - assertj_core: '3.22.0', - attoparser: '2.0.5.RELEASE', - byte_buddy: '1.12.18', - byte_buddy_agent: '1.12.9', + aspectjweaver: '1.9.21', + assertj_core: '3.24.2', + attoparser: '2.0.7.RELEASE', + awaitility: '4.2.0', + byte_buddy: '1.14.11', + byte_buddy_agent: '1.14.9', classmate: '1.5.1', evo_inflector: '1.3', - hamcrest: '2.2', + hamcrest: '2.1', hdrhistogram: '2.1.12', - hibernate_commons_annotations: '5.1.2.Final', - hibernate_core: '5.6.15.Final', - hibernate_validator: '6.2.5.Final', - hikaricp: '4.0.3', - istack_commons_runtime: '3.0.12', - jackson_annotations: '2.13.5', - jackson_bom: '2.13.5', - jackson_core: '2.13.5', - jackson_databind: '2.13.5', - jackson_datatype_jdk8: '2.13.5', - jackson_datatype_jsr310: '2.13.5', - jackson_module_parameter_names: '2.13.5', - jakarta_activation: '1.2.2', - jakarta_activation_api: '1.2.2', - jakarta_annotation_api: '1.3.5', - jakarta_mail: '1.6.7', - jakarta_persistence_api: '2.2.3', - jakarta_transaction_api: '1.3.3', - jakarta_validation_api: '2.0.2', - jakarta_xml_bind_api: '2.3.3', - jandex: '2.4.2.Final', - javax_batch_api: '1.0', - javax_servlet_api: '3.1.0', - jaxb_runtime: '2.3.1', - jboss_logging: '3.4.3.Final', - json_path: '2.6.0', - json_smart: '2.4.7', + hibernate_commons_annotations: '6.0.6.Final', + hibernate_core: '6.4.4.Final', + hibernate_validator: '8.0.1.Final', + hikaricp: '5.0.1', + istack_commons_runtime: '4.1.2', + jackson_annotations: '2.15.4', + jackson_bom: '2.15.4', + jackson_core: '2.15.4', + jackson_databind: '2.15.4', + jackson_datatype_jdk8: '2.15.4', + jackson_datatype_jsr310: '2.15.4', + jackson_module_parameter_names: '2.15.4', + jakarta_activation_api: '2.1.3', + jakarta_annotation_api: '2.1.1', + jakarta_inject_api: '2.0.1', + jakarta_mail: '2.0.3', + jakarta_persistence_api: '3.1.0', + jakarta_servlet_api: '6.0.0', + jakarta_transaction_api: '2.0.1', + jakarta_validation_api: '3.0.2', + jakarta_xml_bind_api: '4.0.0', + jandex: '3.1.2', + jaxb_core: '4.0.5', + jaxb_runtime: '4.0.2', + jboss_logging: '3.5.0.Final', + json_path: '2.9.0', + json_smart: '2.5.0', jsonassert: '1.5.1', - jul_to_slf4j: '1.7.36', - junit_bom: '5.8.2', - junit_jupiter: '5.8.2', - junit_jupiter_api: '5.8.2', - junit_jupiter_engine: '5.8.2', - junit_jupiter_params: '5.8.2', - junit_platform_commons: '1.8.2', - junit_platform_engine: '1.8.2', + jul_to_slf4j: '2.0.12', + junit_bom: '5.10.2', + junit_jupiter: '5.10.2', + junit_jupiter_api: '5.10.2', + junit_jupiter_engine: '5.10.2', + junit_jupiter_params: '5.10.2', + junit_platform_commons: '1.10.2', + junit_platform_engine: '1.10.2', latencyutils: '2.0.3', - log4j_api: '2.17.2', - log4j_to_slf4j: '2.17.2', - logback_classic: '1.2.12', - logback_core: '1.2.12', - micrometer_core: '1.9.8', - mockito_core: '4.5.1', - mockito_junit_jupiter: '4.5.1', - objenesis: '3.2', - opentest4j: '1.2.0', - slf4j_api: '1.7.32', - snakeyaml: '1.30', - thymeleaf: '3.0.15.RELEASE', - thymeleaf_extras_java8time: '3.0.4.RELEASE', - thymeleaf_spring5: '3.0.15.RELEASE', - tomcat_embed_core: '9.0.74', - tomcat_embed_el: '9.0.74', - tomcat_embed_websocket: '9.0.74', - txw2: '2.3.8', + log4j_api: '2.21.1', + log4j_to_slf4j: '2.21.1', + logback_classic: '1.4.14', + logback_core: '1.4.14', + micrometer_commons: '1.12.4', + micrometer_core: '1.12.3', + micrometer_jakarta9: '1.12.4', + micrometer_observation: '1.12.4', + mockito_core: '5.7.0', + mockito_junit_jupiter: '5.7.0', + objenesis: '3.3', + opentest4j: '1.3.0', + slf4j_api: '2.0.7', + snakeyaml: '2.2', + thymeleaf: '3.1.2.RELEASE', + thymeleaf_spring6: '3.1.2.RELEASE', + tomcat_embed_core: '10.1.19', + tomcat_embed_el: '10.1.19', + tomcat_embed_websocket: '10.1.19', + txw2: '4.0.5', unbescape: '1.1.6.RELEASE', xmlunit_core: '2.9.1' ] diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ccebba7710..7f93135c49 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9fb0369ab1..1af9e0930b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ -# SPDX-License-Identifier: MIT distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 79a61d421c..0adc8e1a53 100755 --- a/gradlew +++ b/gradlew @@ -83,10 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -197,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java b/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java index 494ed53257..0fdc3569a6 100644 --- a/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java +++ b/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java @@ -51,7 +51,7 @@ private void log(HttpRequest request, byte[] body, ClientHttpResponse response) StringBuilder sb = new StringBuilder(); sb.append("\nRequest:"); sb.append("\n Method:"); - sb.append(request.getMethodValue()); + sb.append(request.getMethod()); sb.append("\n Headers:"); sb.append(request.getHeaders().toString()); sb.append("\n URI:"); diff --git a/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/support/TrustAllSupport.java b/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/support/TrustAllSupport.java index 024082e20d..0d620f2165 100644 --- a/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/support/TrustAllSupport.java +++ b/sechub-adapter/src/main/java/com/mercedesbenz/sechub/adapter/support/TrustAllSupport.java @@ -12,26 +12,24 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; -import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import org.apache.http.HttpHost; -import org.apache.http.config.Registry; -import org.apache.http.config.RegistryBuilder; -import org.apache.http.conn.DnsResolver; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.socket.PlainConnectionSocketFactory; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.protocol.HttpContext; -import org.apache.http.ssl.SSLContexts; +import org.apache.hc.client5.http.DnsResolver; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.io.HttpClientConnectionManager; +import org.apache.hc.client5.http.ssl.NoopHostnameVerifier; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.ssl.SSLContexts; +import org.apache.hc.core5.util.TimeValue; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; @@ -65,6 +63,7 @@ public TrustAllSupport(Adapter adapter, TrustAllConfig config) { public ClientHttpRequestFactory createTrustAllFactory() { HttpClientBuilder clientBuilder = HttpClients.custom(); SSLContext sslContext = null; + if (config.isTrustAllCertificatesEnabled()) { try { sslContext = createTrustAllSSLContext(adapter); @@ -74,23 +73,30 @@ public ClientHttpRequestFactory createTrustAllFactory() { } else { sslContext = SSLContexts.createSystemDefault(); } + if (config.isProxyDefined()) { - // proxy with socks not working with standard HTTPHost, + // HttP client proxy with socks does not working with standard HTTPHost, // clientBuilder.setProxy(..) // So own approach necessary, details see // https://stackoverflow.com/questions/22937983/how-to-use-socks-5-proxy-with-apache-http-client-4 - Registry reg = RegistryBuilder.create().register("http", new SocksProxyConnectionSocketFactory()) - .register("https", new SocksProxySSLConnectionSocketFactory(sslContext)).build(); + /* @formatter:off */ + SocksProxySSLConnectionSocketFactory socksProxySSLSocketFactory = new SocksProxySSLConnectionSocketFactory(sslContext); + PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create(). + setSSLSocketFactory(socksProxySSLSocketFactory). + setDnsResolver(new FakeDnsResolver()). + build(); + /* @formatter:on */ + clientBuilder.setConnectionManager(connectionManager); - PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg, new FakeDnsResolver()); - clientBuilder.setConnectionManager(cm); } else { - clientBuilder.setSSLContext(sslContext); - clientBuilder.setSSLHostnameVerifier(new HostnameVerifier() { - public boolean verify(String hostname, SSLSession session) { - return /* NOSONAR - we know what we do here! */true; - } - }); + + /* formatter:off */ + SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder.create().setSslContext(sslContext) + .setHostnameVerifier(new NoopHostnameVerifier()).build(); + /* formatter:on */ + + HttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create().setSSLSocketFactory(sslSocketFactory).build(); + clientBuilder.setConnectionManager(connectionManager); } CloseableHttpClient httpClient = clientBuilder.build(); @@ -131,16 +137,13 @@ public X509Certificate[] getAcceptedIssuers() { } - private class FakeDnsResolver implements DnsResolver { - @Override - public InetAddress[] resolve(String host) throws UnknownHostException { - // Return some fake DNS record for every request, we won't be using it - return new InetAddress[] { InetAddress.getByAddress(new byte[] { 1, 1, 1, 1 }) }; - } + private class SocksProxySSLConnectionSocketFactory extends SSLConnectionSocketFactory { - } + public SocksProxySSLConnectionSocketFactory(final SSLContext sslContext) { + // You may need this verifier if target site's certificate is not secure + super(sslContext, NoopHostnameVerifier.INSTANCE); + } - private class SocksProxyConnectionSocketFactory extends PlainConnectionSocketFactory { @Override public Socket createSocket(final HttpContext context) throws IOException { InetSocketAddress socksaddr = new InetSocketAddress(config.getProxyHostname(), config.getProxyPort()); @@ -149,7 +152,7 @@ public Socket createSocket(final HttpContext context) throws IOException { } @Override - public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, + public Socket connectSocket(TimeValue connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context) throws IOException { // Convert address to unresolved InetSocketAddress unresolvedRemote = InetSocketAddress.createUnresolved(host.getHostName(), remoteAddress.getPort()); @@ -157,27 +160,17 @@ public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, In } } - private class SocksProxySSLConnectionSocketFactory extends SSLConnectionSocketFactory { - - public SocksProxySSLConnectionSocketFactory(final SSLContext sslContext) { - // You may need this verifier if target site's certificate is not secure - super(sslContext, NoopHostnameVerifier.INSTANCE); - } - + private class FakeDnsResolver implements DnsResolver { @Override - public Socket createSocket(final HttpContext context) throws IOException { - InetSocketAddress socksaddr = new InetSocketAddress(config.getProxyHostname(), config.getProxyPort()); - Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); - return new Socket(proxy); + public InetAddress[] resolve(String host) throws UnknownHostException { + // Return some fake DNS record for every request, we won't be using it + return new InetAddress[] { InetAddress.getByAddress(new byte[] { 1, 1, 1, 1 }) }; } @Override - public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, - HttpContext context) throws IOException { - // Convert address to unresolved - InetSocketAddress unresolvedRemote = InetSocketAddress.createUnresolved(host.getHostName(), remoteAddress.getPort()); - return super.connectSocket(connectTimeout, socket, host, unresolvedRemote, localAddress, context); + public String resolveCanonicalHostname(String host) throws UnknownHostException { + return "fakeHost"; } - } + } } \ No newline at end of file diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/AdministrationConfig.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/AdministrationConfig.java index b08dee1c90..17b2ee8bfb 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/AdministrationConfig.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/AdministrationConfig.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.config; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * Global configuration entry for domain 'administration' inside database. diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/ConfigAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/ConfigAdministrationRestController.java index 01127314bb..f41d4ec18c 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/ConfigAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/config/ConfigAdministrationRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.config; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -22,6 +20,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesAutoCleanupConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminUpdatesAutoCleanupConfiguration; +import jakarta.annotation.security.RolesAllowed; + /** * The rest api for administration config operations done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobAdministrationRestController.java index 6b099c594b..3f772fe9f9 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobAdministrationRestController.java @@ -4,8 +4,6 @@ import java.util.List; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -26,6 +24,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.job.UseCaseAdminRestartsJob; import com.mercedesbenz.sechub.sharedkernel.usecases.job.UseCaseAdminRestartsJobHard; +import jakarta.annotation.security.RolesAllowed; + /** * The rest api for job administration done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobInformation.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobInformation.java index 7145c732da..63c3743c9f 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobInformation.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/job/JobInformation.java @@ -2,21 +2,21 @@ package com.mercedesbenz.sechub.domain.administration.job; import static com.mercedesbenz.sechub.sharedkernel.util.Assert.*; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.*; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + @Entity @Table(name = JobInformation.TABLE_NAME) @JsonIgnoreProperties("uuid") @@ -169,4 +169,4 @@ public boolean equals(Object obj) { return Objects.equals(jobUUID, other.jobUUID); } -} \ No newline at end of file +} diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/Mapping.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/Mapping.java index 8b9200730b..8708b35010 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/Mapping.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/Mapping.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.mapping; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; @Entity @Table(name = Mapping.TABLE_NAME) diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/MappingAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/MappingAdministrationRestController.java index a414360daa..18dd5585e0 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/MappingAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/mapping/MappingAdministrationRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.mapping; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdmiUpdatesMappingConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesMappingConfiguration; +import jakarta.annotation.security.RolesAllowed; + /** * The rest API for mapping administration done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ListProjectsService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ListProjectsService.java index be36c72583..269878cd0a 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ListProjectsService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ListProjectsService.java @@ -4,13 +4,13 @@ import java.util.List; import java.util.stream.Collectors; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ListProjectsService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/Project.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/Project.java index 538c247722..890a2c01d3 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/Project.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/Project.java @@ -5,24 +5,24 @@ import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Version; - import com.mercedesbenz.sechub.domain.administration.user.User; import com.mercedesbenz.sechub.sharedkernel.project.ProjectAccessLevel; +import jakarta.persistence.CascadeType; +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + @Entity @Table(name = Project.TABLE_NAME) public class Project { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestController.java index 13afe92488..017ad90be1 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestController.java @@ -7,9 +7,6 @@ import java.util.Optional; import java.util.Set; -import javax.annotation.security.RolesAllowed; -import javax.validation.Valid; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -41,6 +38,9 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminChangesProjectOwner; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminUnassignsUserFromProject; +import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.Valid; + /** * The REST API for project administration done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAssignUserService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAssignUserService.java index c8377beed8..2323d419ac 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAssignUserService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAssignUserService.java @@ -3,8 +3,6 @@ import java.util.Arrays; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +25,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminAssignsUserToProject; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectAssignUserService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeAccessLevelService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeAccessLevelService.java index f05522b91e..1a0a5ccd71 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeAccessLevelService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeAccessLevelService.java @@ -3,8 +3,6 @@ import static com.mercedesbenz.sechub.sharedkernel.util.Assert.*; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +22,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorChangesProjectAccessLevel; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectChangeAccessLevelService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeOwnerService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeOwnerService.java index 8991f0466e..1c47c059ce 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeOwnerService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectChangeOwnerService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.project; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +23,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminChangesProjectOwner; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectChangeOwnerService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectCreationService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectCreationService.java index a74d89cdc5..b49a1f165d 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectCreationService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectCreationService.java @@ -7,9 +7,6 @@ import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.security.RolesAllowed; -import javax.validation.constraints.NotNull; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +32,9 @@ import com.mercedesbenz.sechub.sharedkernel.validation.URIValidation; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.constraints.NotNull; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectCreationService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDeleteService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDeleteService.java index 019c0afa45..5b7ce29b7f 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDeleteService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDeleteService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.project; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +23,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminDeleteProject; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectDeleteService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailChangeService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailChangeService.java index 01c0c9769f..48fd7b6acf 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailChangeService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailChangeService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.project; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminChangesProjectDescription; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectDetailChangeService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailInformationService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailInformationService.java index 96d9da4c03..93867284a3 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailInformationService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectDetailInformationService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.project; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -14,6 +12,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminShowsProjectDetails; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectDetailInformationService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectJsonInputValidation.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectJsonInputValidation.java index fed6e8ba6a..5f4962142d 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectJsonInputValidation.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectJsonInputValidation.java @@ -3,8 +3,6 @@ import java.util.Map; -import javax.annotation.PostConstruct; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; @@ -18,6 +16,8 @@ import com.mercedesbenz.sechub.sharedkernel.validation.UserIdValidation; import com.mercedesbenz.sechub.sharedkernel.validation.ValidationResult; +import jakarta.annotation.PostConstruct; + @Component public class ProjectJsonInputValidation { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectMetaDataEntity.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectMetaDataEntity.java index bb7a917f46..0133792aa9 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectMetaDataEntity.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectMetaDataEntity.java @@ -3,12 +3,12 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.IdClass; +import jakarta.persistence.Table; +import jakarta.persistence.Version; @Entity @IdClass(ProjectMetaDataEntityId.class) diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectRepositoryImpl.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectRepositoryImpl.java index eec5b42da1..152164be2b 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectRepositoryImpl.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectRepositoryImpl.java @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.project; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; public class ProjectRepositoryImpl implements ProjectRepositoryCustom { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUnassignUserService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUnassignUserService.java index 12b504f347..d618a20052 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUnassignUserService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUnassignUserService.java @@ -3,8 +3,6 @@ import java.util.Arrays; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -25,6 +23,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminUnassignsUserFromProject; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectUnassignUserService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java index 3364a3964a..04922335a6 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java @@ -6,8 +6,6 @@ import java.util.List; import java.util.Optional; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -30,6 +28,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectMetaData; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectWhitelist; +import jakarta.annotation.security.RolesAllowed; + /** * The rest api for user administration done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateMetaDataEntityService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateMetaDataEntityService.java index c59d8985cc..8058fff611 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateMetaDataEntityService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateMetaDataEntityService.java @@ -5,9 +5,6 @@ import java.util.Optional; import java.util.stream.Collectors; -import javax.annotation.security.RolesAllowed; -import javax.validation.constraints.NotNull; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,6 +17,9 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectMetaData; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.constraints.NotNull; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectUpdateMetaDataEntityService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateWhitelistService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateWhitelistService.java index f042bd43e7..86154d3b86 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateWhitelistService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateWhitelistService.java @@ -6,9 +6,6 @@ import java.util.Optional; import java.util.Set; -import javax.annotation.security.RolesAllowed; -import javax.validation.constraints.NotNull; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,6 +24,9 @@ import com.mercedesbenz.sechub.sharedkernel.validation.URIValidation; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; +import jakarta.validation.constraints.NotNull; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class ProjectUpdateWhitelistService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SchedulerAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SchedulerAdministrationRestController.java index 50e701962c..423201c73b 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SchedulerAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SchedulerAdministrationRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.scheduler; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.schedule.UseCaseAdminEnablesSchedulerJobProcessing; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.schedule.UseCaseAdminTriggersRefreshOfSchedulerStatus; +import jakarta.annotation.security.RolesAllowed; + /** * The rest api for user administration done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SwitchSchedulerJobProcessingService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SwitchSchedulerJobProcessingService.java index c16febc029..af2c38d26f 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SwitchSchedulerJobProcessingService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/SwitchSchedulerJobProcessingService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.scheduler; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -17,6 +15,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.schedule.UseCaseAdminDisablesSchedulerJobProcessing; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.schedule.UseCaseAdminEnablesSchedulerJobProcessing; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class SwitchSchedulerJobProcessingService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/TriggerSchedulerStatusRefreshService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/TriggerSchedulerStatusRefreshService.java index c5065bdc62..49617636b3 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/TriggerSchedulerStatusRefreshService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/scheduler/TriggerSchedulerStatusRefreshService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.scheduler; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.sharedkernel.messaging.MessageID; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.schedule.UseCaseAdminDisablesSchedulerJobProcessing; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class TriggerSchedulerStatusRefreshService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupCreateService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupCreateService.java index b6458ca161..a550fcb824 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupCreateService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupCreateService.java @@ -3,8 +3,6 @@ import java.util.Optional; -import javax.validation.Valid; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +22,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserSignup; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.validation.Valid; + @Service public class AnonymousSignupCreateService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestController.java index 871f1d4b17..5a8b4e26c0 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.signup; -import javax.validation.Valid; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.http.MediaType; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.sharedkernel.Step; import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserSignup; +import jakarta.validation.Valid; + /** * Self registration rest controller - anonymous access possible * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/Signup.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/Signup.java index 031b8359ae..b75ae4c85f 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/Signup.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/Signup.java @@ -3,11 +3,11 @@ import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; @Entity @Table(name = Signup.TABLE_NAME) diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestController.java index 63755de920..14422d7cfb 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestController.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.signup.UseCaseAdminDeletesSignup; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.signup.UseCaseAdminListsOpenUserSignups; +import jakarta.annotation.security.RolesAllowed; + /** * Self registration rest controller - restricted access to super admins * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupDeleteService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupDeleteService.java index b1e8531ac0..e629b9bbd6 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupDeleteService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupDeleteService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.signup; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,6 +11,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.signup.UseCaseAdminDeletesSignup; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class SignupDeleteService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupJsonInputValidator.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupJsonInputValidator.java index 54399062c5..2e4c7217e4 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupJsonInputValidator.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/signup/SignupJsonInputValidator.java @@ -3,8 +3,6 @@ import static com.mercedesbenz.sechub.domain.administration.signup.SignupJsonInput.*; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.sharedkernel.validation.UserIdValidation; import com.mercedesbenz.sechub.sharedkernel.validation.ValidationResult; +import jakarta.annotation.PostConstruct; + @Component public class SignupJsonInputValidator implements Validator { private static final Logger LOG = LoggerFactory.getLogger(SignupJsonInputValidator.class); diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusAdministrationRestController.java index c4d066897a..78b1d60c27 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusAdministrationRestController.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.Step; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.status.UseCaseAdminListsStatusInformation; +import jakarta.annotation.security.RolesAllowed; + /** * The rest API for status administration done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusEntry.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusEntry.java index b82a45eaad..bde7e43137 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusEntry.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/status/StatusEntry.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.status; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; @Entity @Table(name = StatusEntry.TABLE_NAME) diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java index c9aad89ae7..ac5e370c00 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java @@ -31,7 +31,7 @@ public class AnonymousUserGetApiTokenByOneTimeTokenRestController { @GetMapping(path = AdministrationAPIConstants.API_FETCH_NEW_API_TOKEN_BY_ONE_WAY_TOKEN+"/{oneTimeToken}", produces= {MediaType.TEXT_PLAIN_VALUE}) @ResponseBody - public String getNewAPITokenByOneTimeToken(@PathVariable String oneTimeToken) { + public String getNewAPITokenByOneTimeToken(@PathVariable(name = "oneTimeToken", required = true) String oneTimeToken) { /* @formatter:on */ return createUserAPITokenByOneTimeTokenService.createNewAPITokenForUserByOneTimeToken(oneTimeToken); } diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/User.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/User.java index 26f178b4a0..cfa41ba2c4 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/User.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/User.java @@ -4,20 +4,20 @@ import java.util.Date; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.ManyToMany; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.persistence.Version; - import com.mercedesbenz.sechub.domain.administration.project.Project; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Temporal; +import jakarta.persistence.TemporalType; +import jakarta.persistence.Version; + @Entity @Table(name = User.TABLE_NAME) public class User { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestController.java index 52357e134b..4822fdcfcd 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestController.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -30,6 +28,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminShowsUserDetailsForEmailAddress; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminUpdatesUserEmailAddress; +import jakarta.annotation.security.RolesAllowed; + /** * The rest api for user administration done by a super admin. * diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserCreationService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserCreationService.java index 2208d9849f..c0aafe8923 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserCreationService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserCreationService.java @@ -4,8 +4,6 @@ import java.util.Date; import java.util.Optional; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +27,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.signup.UseCaseAdminAcceptsSignup; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class UserCreationService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDeleteService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDeleteService.java index 3d9fe39669..40dcacb79b 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDeleteService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDeleteService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.user; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminDeletesUser; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class UserDeleteService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDetailInformationService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDetailInformationService.java index 76115c02d2..c4f2d649bd 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDetailInformationService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserDetailInformationService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.user; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +14,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminShowsUserDetailsForEmailAddress; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class UserDetailInformationService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserEmailAddressUpdateService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserEmailAddressUpdateService.java index 5e27aa8170..9b90c9e1ea 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserEmailAddressUpdateService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserEmailAddressUpdateService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.user; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +20,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminUpdatesUserEmailAddress; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class UserEmailAddressUpdateService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java index c522b58efd..7119a293ae 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.user; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminGrantsAdminRightsToUser; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class UserGrantSuperAdminRightsService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserListService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserListService.java index 40ef751afd..3166f1fb15 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserListService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserListService.java @@ -4,8 +4,6 @@ import java.util.List; import java.util.stream.Collectors; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Example; import org.springframework.stereotype.Service; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminListsAllAdmins; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminListsAllUsers; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class UserListService { diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRepositoryImpl.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRepositoryImpl.java index b5911e51e8..4199aeda56 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRepositoryImpl.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRepositoryImpl.java @@ -1,13 +1,13 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.user; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - import com.mercedesbenz.sechub.domain.administration.project.Project; import com.mercedesbenz.sechub.sharedkernel.error.NotAcceptableException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; + public class UserRepositoryImpl implements UserRepositoryCustom { @PersistenceContext diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java index d337209910..4034f499a8 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.user; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminRevokesAdminRightsFromAdmin; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class UserRevokeSuperAdminRightsService { diff --git a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestControllerMockTest.java index 823f0a4aa1..0fc0c033ed 100644 --- a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestControllerMockTest.java +++ b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectAdministrationRestControllerMockTest.java @@ -1,13 +1,20 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.project; -import static com.mercedesbenz.sechub.test.RestDocPathParameter.*; -import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static com.mercedesbenz.sechub.test.RestDocPathParameter.PROJECT_ID; +import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.https; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.matches; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.net.URI; import java.util.ArrayList; @@ -39,13 +46,13 @@ import com.mercedesbenz.sechub.domain.administration.user.User; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.test.TestPortProvider; @RunWith(SpringRunner.class) @WebMvcTest(ProjectAdministrationRestController.class) @ContextConfiguration(classes = { ProjectAdministrationRestController.class, ProjectAdministrationRestControllerMockTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) public class ProjectAdministrationRestControllerMockTest { @@ -237,7 +244,7 @@ public void when_admin_tries_to_change_project_description_but_request_body_is_m @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestControllerMockTest.java index f040dbfcc2..6d23f64554 100644 --- a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestControllerMockTest.java +++ b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/project/ProjectUpdateAdministrationRestControllerMockTest.java @@ -1,11 +1,14 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.project; -import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.https; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.net.URI; import java.util.Arrays; @@ -32,14 +35,14 @@ import com.mercedesbenz.sechub.domain.administration.project.ProjectJsonInput.ProjectMetaData; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.test.TestPortProvider; @RunWith(SpringRunner.class) @WebMvcTest(ProjectUpdateAdministrationRestController.class) @ContextConfiguration(classes = { ProjectUpdateAdministrationRestController.class, ProjectUpdateAdministrationRestControllerMockTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) public class ProjectUpdateAdministrationRestControllerMockTest { @@ -158,7 +161,7 @@ public Void answer(InvocationOnMock invocation) { @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestControllerMockTest.java b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestControllerMockTest.java index 2610e42d2f..5090ec3185 100644 --- a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestControllerMockTest.java +++ b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/AnonymousSignupRestControllerMockTest.java @@ -23,7 +23,7 @@ import org.springframework.test.web.servlet.MockMvc; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.validation.ApiVersionValidationFactory; import com.mercedesbenz.sechub.sharedkernel.validation.EmailValidationImpl; import com.mercedesbenz.sechub.sharedkernel.validation.UserIdValidationImpl; @@ -155,7 +155,7 @@ public void calling_with_api_1_0_and_userid_set_but_NO_valid_email_returns_HTTP_ @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestControllerMockTest.java index bfe18f5c7e..5b80b99e49 100644 --- a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestControllerMockTest.java +++ b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/signup/SignupAdministrationRestControllerMockTest.java @@ -26,13 +26,13 @@ import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.test.TestPortProvider; @RunWith(SpringRunner.class) @WebMvcTest(SignupAdministrationRestController.class) @ContextConfiguration(classes = { SignupAdministrationRestController.class, SignupAdministrationRestControllerMockTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) public class SignupAdministrationRestControllerMockTest { @@ -99,7 +99,7 @@ public void listUserSignups_results_in_a_filled_list_when_2_signups_exist() thro @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestControllerMockTest.java index 0949286721..52201c9853 100644 --- a/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestControllerMockTest.java +++ b/sechub-administration/src/test/java/com/mercedesbenz/sechub/domain/administration/user/UserAdministrationRestControllerMockTest.java @@ -1,11 +1,16 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.administration.user; -import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.*; -import static org.hamcrest.CoreMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.https; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.util.ArrayList; import java.util.Arrays; @@ -34,13 +39,13 @@ import com.mercedesbenz.sechub.domain.administration.signup.SignupRepository; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.test.TestPortProvider; @RunWith(SpringRunner.class) @WebMvcTest(UserAdministrationRestController.class) @ContextConfiguration(classes = { UserAdministrationRestController.class, UserAdministrationRestControllerMockTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) public class UserAdministrationRestControllerMockTest { @@ -192,7 +197,7 @@ public void calling_with_api_1_0_and_valid_userid_and_email_returns_HTTP_200() t @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-analyzer-cli/build.gradle b/sechub-analyzer-cli/build.gradle index 60a336b9ed..62b8117403 100644 --- a/sechub-analyzer-cli/build.gradle +++ b/sechub-analyzer-cli/build.gradle @@ -14,7 +14,6 @@ dependencies { testImplementation library.junit4 testImplementation spring_boot_dependency.mockito_core - testImplementation library.mockito_inline testImplementation spring_boot_dependency.hamcrest } diff --git a/sechub-api-java/build.gradle b/sechub-api-java/build.gradle index 6045f4852c..c5b238cdaf 100644 --- a/sechub-api-java/build.gradle +++ b/sechub-api-java/build.gradle @@ -17,10 +17,9 @@ dependencies { testImplementation project(':sechub-testframework') testImplementation spring_boot_dependency.junit_jupiter - testImplementation spring_boot_dependency.junit_jupiter testImplementation library.apache_commons_io - testImplementation library.mockito_inline testImplementation library.wiremock + testImplementation spring_boot_dependency.mockito_core } /* @@ -118,7 +117,8 @@ task callOpenAPIJavaGenerator(type: org.openapitools.generator.gradle.plugin.tas developerOrganizationUrl : "https://www.mercedes-benz-techinnovation.com/", scmConnection : "", scmDeveloperConnection : "", - scmUrl : "https://github.com/mercedes-benz/sechub" + scmUrl : "https://github.com/mercedes-benz/sechub", + useJakartaEe : "false" ] doFirst { diff --git a/sechub-api-java/src/main/resources/reduced-openapi3.json b/sechub-api-java/src/main/resources/reduced-openapi3.json index 9bd55fb311..84b0c58382 100644 --- a/sechub-api-java/src/main/resources/reduced-openapi3.json +++ b/sechub-api-java/src/main/resources/reduced-openapi3.json @@ -1159,10 +1159,6 @@ } } }, - "ServerVersion": { - "title": "ServerVersion", - "type": "object" - }, "StatusInformation": { "title": "StatusInformation", "type": "array", @@ -1884,35 +1880,6 @@ ] } }, - "/api/admin/info/version": { - "get": { - "tags": [ - "admin" - ], - "summary": "Admin checks server version", - "description": "An administrator checks the current SecHub server version. Only administrators are able to check the server version, because knowing the exact server version makes it easier for penetration tester or attacker to attack the system.", - "operationId": "adminChecksServerVersion", - "responses": { - "200": { - "description": "200", - "content": { - "text/plain;charset=UTF-8": { - "schema": { - "$ref": "#/components/schemas/ServerVersion" - } - } - } - } - }, - "security": [ - { - "basic": [ - - ] - } - ] - } - }, "/api/admin/jobs/cancel/{jobUUID}": { "post": { "tags": [ @@ -3377,15 +3344,6 @@ "type": "string" } }, - { - "name": "checkSum", - "in": "query", - "description": "A sha256 checksum for file upload validation", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "x-file-size", "in": "header", diff --git a/sechub-api-java/src/test/java/com/mercedesbenz/sechub/api/DefaultSechubClientWireMockTest.java b/sechub-api-java/src/test/java/com/mercedesbenz/sechub/api/DefaultSechubClientWireMockTest.java index 9dc43fda67..47e127c14e 100644 --- a/sechub-api-java/src/test/java/com/mercedesbenz/sechub/api/DefaultSechubClientWireMockTest.java +++ b/sechub-api-java/src/test/java/com/mercedesbenz/sechub/api/DefaultSechubClientWireMockTest.java @@ -13,7 +13,7 @@ import com.github.tomakehurst.wiremock.junit.WireMockRule; import com.mercedesbenz.sechub.test.TestPortProvider; -import wiremock.org.apache.http.HttpStatus; +import wiremock.org.apache.hc.core5.http.HttpStatus; /** * Junit 4 test because of missing official WireMock Junit5 extension - so we diff --git a/sechub-authorization/README.md b/sechub-authorization/README.md index 77db038a16..f3e8e4afc0 100644 --- a/sechub-authorization/README.md +++ b/sechub-authorization/README.md @@ -7,7 +7,7 @@ is handled. Resource security is done inside the domains itself. So e.g. sechub-schedule will provide access only to users -having role "ROLE_USER" but also only for those which +having role "USER" but also only for those which can access the project... On the other hand will sechub-authorization handle the diff --git a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUser.java b/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUser.java index 42c67d478a..658e724dd4 100644 --- a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUser.java +++ b/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUser.java @@ -3,17 +3,20 @@ import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import com.mercedesbenz.sechub.sharedkernel.RoleConstants; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** - * This entity is designed to have a entry wich is collected as fast as possible - * from database. So it shall have only rudimentary data necessary to get the - * info into security to identify access and roles. So we do e.g NOT use lists - * for {@link AuthUserRole} here but use dedicated boolean flags only. + * This entity is designed to have a entry which is collected as fast as + * possible from database. So it shall have only rudimentary data necessary to + * get the info into security to identify access and roles. So we do e.g NOT use + * lists for {@link AuthUserRole} or {@link RoleConstants} here but use + * dedicated boolean flags only. * * @author Albert Tregnaghi * diff --git a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfiguration.java b/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfiguration.java index db09d9370d..3936d23508 100644 --- a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfiguration.java +++ b/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfiguration.java @@ -16,6 +16,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; +import com.mercedesbenz.sechub.sharedkernel.AuthorityConstants; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; @Configuration @@ -58,13 +59,13 @@ private static List accumulateAuthorities(AuthUser entity) { List authorities = new ArrayList(); if (entity.isRoleUser()) { - authorities.add(RoleConstants.ROLE_USER); + authorities.add(AuthorityConstants.AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_USER); } if (entity.isRoleSuperAdmin()) { - authorities.add(RoleConstants.ROLE_SUPERADMIN); + authorities.add(AuthorityConstants.AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_SUPERADMIN); } if (entity.isRoleOwner()) { - authorities.add(RoleConstants.ROLE_OWNER); + authorities.add(AuthorityConstants.AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_OWNER); } return authorities; } diff --git a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRole.java b/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRole.java index 40237bce8b..e14290870b 100644 --- a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRole.java +++ b/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRole.java @@ -1,10 +1,16 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.authorization; -import java.util.List; - import com.mercedesbenz.sechub.sharedkernel.RoleConstants; +/** + * This enumeration just represents all possible roles and knows the relation to + * {@link RoleConstants} values. It is not intended to use for persistence or + * logic directly. + * + * @author Albert Tregnaghi + * + */ public enum AuthUserRole { USER(RoleConstants.ROLE_USER), @@ -13,45 +19,19 @@ public enum AuthUserRole { SUPERADMINISTRATOR(RoleConstants.ROLE_SUPERADMIN); - private String id; - - private AuthUserRole(String id) { - // Identifier used for persistence - do NEVER change an existing id this when - // you not want to - // migrate your database! - // we use this as identifier in db to prevent side effects on refactorings - // So developers are able to change the enum naming without side effects on - // db... - this.id = id; - } - - public String getId() { - return id; - } + private String role; - public static AuthUserRole fromId(String id) { - for (AuthUserRole r : AuthUserRole.values()) { - if (r.id.equals(id)) { - return r; - } - } - return null; + private AuthUserRole(String role) { + this.role = role; } - public boolean isRepresentedByOneof(List roleIds) { - return isContaining(AuthUserRole.SUPERADMINISTRATOR, roleIds); + /** + * Returns the related role string from {@link RoleConstants}. + * + * @return the role string + */ + public String getRole() { + return role; } - private static boolean isContaining(AuthUserRole search, List givenIds) { - if (givenIds == null || givenIds.isEmpty()) { - return false; - } - for (String roleId : givenIds) { - AuthUserRole foundOrNull = AuthUserRole.fromId(roleId); - if (search.equals(foundOrNull)) { - return true; - } - } - return false; - } } diff --git a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRoleConverter.java b/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRoleConverter.java deleted file mode 100644 index 5bb5db949f..0000000000 --- a/sechub-authorization/src/main/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRoleConverter.java +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -package com.mercedesbenz.sechub.domain.authorization; - -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; - -@Converter(autoApply = true) -public class AuthUserRoleConverter implements AttributeConverter { - - @Override - public String convertToDatabaseColumn(AuthUserRole attribute) { - return attribute.getId(); - } - - @Override - public AuthUserRole convertToEntityAttribute(String dbData) { - return AuthUserRole.fromId(dbData); - } - -} \ No newline at end of file diff --git a/sechub-authorization/src/test/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfigurationTest.java b/sechub-authorization/src/test/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfigurationTest.java index f9fbb24b4d..75eb357851 100644 --- a/sechub-authorization/src/test/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfigurationTest.java +++ b/sechub-authorization/src/test/java/com/mercedesbenz/sechub/domain/authorization/AuthUserRestAPIConfigurationTest.java @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.authorization; +import static com.mercedesbenz.sechub.sharedkernel.AuthorityConstants.*; import static org.junit.Assert.*; import java.util.Collection; @@ -26,7 +27,8 @@ public void adoptUserAcumultesAuthorities() { UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); /* test */ - assertHasAuthority(result, RoleConstants.ROLE_USER, RoleConstants.ROLE_SUPERADMIN, RoleConstants.ROLE_OWNER); + assertHasAuthority(result, AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_USER, AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_SUPERADMIN, + AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_OWNER); } @Test @@ -41,7 +43,7 @@ public void adoptUser_with_role_user() { UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); /* test */ - assertHasAuthority(result, RoleConstants.ROLE_USER); + assertHasAuthority(result, AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_USER); } @Test @@ -57,7 +59,7 @@ public void adoptUser_with_role_owner() { UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); /* test */ - assertHasAuthority(result, RoleConstants.ROLE_OWNER); + assertHasAuthority(result, AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_OWNER); } @Test @@ -72,26 +74,26 @@ public void adoptUser_with_role_superadmin() { UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); /* test */ - assertHasAuthority(result, RoleConstants.ROLE_SUPERADMIN); + assertHasAuthority(result, AUTHORITY_ROLE_PREFIX + RoleConstants.ROLE_SUPERADMIN); } - private void assertHasAuthority(UserDetails result, String... roles) { + private void assertHasAuthority(UserDetails result, String... authorities) { Collection auth = result.getAuthorities(); - for (String role : roles) { + for (String authority : authorities) { boolean found = false; for (Iterator it = auth.iterator(); it.hasNext();) { GrantedAuthority ga = it.next(); - if (role.contentEquals(ga.getAuthority())) { + if (authority.contentEquals(ga.getAuthority())) { found = true; break; } } if (!found) { - fail("Did not found role:" + role + " inside " + auth); + fail("Did not found role:" + authority + " inside " + auth); } } - assertEquals(roles.length, auth.size()); + assertEquals(authorities.length, auth.size()); } diff --git a/sechub-commons-core/src/main/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupport.java b/sechub-commons-core/src/main/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupport.java index f4418deade..8454752aab 100644 --- a/sechub-commons-core/src/main/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupport.java +++ b/sechub-commons-core/src/main/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupport.java @@ -56,14 +56,14 @@ public String createSha256Checksum(String filepath) { } public MessageDigest createSha256MessageDigest() { - MessageDigest md; + MessageDigest messageDigest; String algorithm = "SHA-256"; try { - md = MessageDigest.getInstance(algorithm); + messageDigest = MessageDigest.getInstance(algorithm); } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("Algorithm not supported:" + algorithm); } - return md; + return messageDigest; } public boolean hasCorrectSha256ChecksumFile(String checkSum, String filepath) { diff --git a/sechub-commons-core/src/test/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupportTest.java b/sechub-commons-core/src/test/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupportTest.java index b70a66dde7..a93891cfe7 100644 --- a/sechub-commons-core/src/test/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupportTest.java +++ b/sechub-commons-core/src/test/java/com/mercedesbenz/sechub/commons/core/security/CheckSumSupportTest.java @@ -1,12 +1,16 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.commons.core.security; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; +import java.security.MessageDigest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -34,6 +38,13 @@ void test_simple_sha256_calculation_works() throws Exception { inputStream.close(); } + @Test + void test_sha256_sum_digest_creation_works() { + MessageDigest digest = serviceToTest.createSha256MessageDigest(); + + assertNotNull(digest); + } + @Test void test_simple_sha256_check_works() throws Exception { /* prepare */ diff --git a/sechub-commons-model/build.gradle b/sechub-commons-model/build.gradle index db3dc1abab..3f1fc50415 100644 --- a/sechub-commons-model/build.gradle +++ b/sechub-commons-model/build.gradle @@ -16,6 +16,5 @@ dependencies{ testImplementation spring_boot_dependency.junit_jupiter testImplementation spring_boot_dependency.mockito_core - testImplementation library.mockito_inline testImplementation spring_boot_dependency.hamcrest } \ No newline at end of file diff --git a/sechub-commons-model/src/test/java/com/mercedesbenz/sechub/commons/model/SecHubConfigurationModelTest.java b/sechub-commons-model/src/test/java/com/mercedesbenz/sechub/commons/model/SecHubConfigurationModelTest.java index 724330849a..f8fa7659f7 100644 --- a/sechub-commons-model/src/test/java/com/mercedesbenz/sechub/commons/model/SecHubConfigurationModelTest.java +++ b/sechub-commons-model/src/test/java/com/mercedesbenz/sechub/commons/model/SecHubConfigurationModelTest.java @@ -158,4 +158,52 @@ void deserialization_of_a_configuration_with_excludes_includes_contains_them() { } + @Test + void serialize_without_config() { + /* prepare */ + SecHubConfigurationModel configuration = new SecHubConfigurationModel(); + configuration.setApiVersion("1.0"); + + /* execute */ + String json = JSONConverter.get().toJSON(configuration); + + /* test */ + assertNotNull(json); + } + + @Test + void serialize_without_codeScan_config() { + /* prepare */ + SecHubConfigurationModel configuration = new SecHubConfigurationModel(); + configuration.setApiVersion("1.0"); + + SecHubCodeScanConfiguration codeScan = new SecHubCodeScanConfiguration(); + configuration.setCodeScan(codeScan); + + /* execute */ + String json = JSONConverter.get().toJSON(configuration); + + /* test */ + assertNotNull(json); + } + + @Test + void deserialize_codeScan_config_and_empty_use() { + /* prepare */ + String json = """ + { + "codeScan" : { + "use" : [ ] + }, + "apiVersion" : "1.0" + } + """; + + /* execute */ + SecHubConfigurationModel model = JSONConverter.get().fromJSON(SecHubConfigurationModel.class, json); + + /* test */ + SecHubCodeScanConfiguration codeScan = model.getCodeScan().get(); + assertNotNull(codeScan); + } } diff --git a/sechub-commons-pds/build.gradle b/sechub-commons-pds/build.gradle index bd9cd9ad2d..bca1b19aaf 100644 --- a/sechub-commons-pds/build.gradle +++ b/sechub-commons-pds/build.gradle @@ -11,6 +11,5 @@ dependencies{ testImplementation spring_boot_dependency.junit_jupiter testImplementation spring_boot_dependency.mockito_core - testImplementation library.mockito_inline testImplementation spring_boot_dependency.hamcrest } \ No newline at end of file diff --git a/sechub-developertools/scripts/container/common-containerscript.sh b/sechub-developertools/scripts/container/common-containerscript.sh index 8a56613553..8d2ee0f44d 100644 --- a/sechub-developertools/scripts/container/common-containerscript.sh +++ b/sechub-developertools/scripts/container/common-containerscript.sh @@ -83,7 +83,9 @@ function checkContainerRunning(){ if [ $? -eq 1 ]; then echo "* $container_name does not exist." running=CONST_DOES_NOT_EXIST + sleep 2s fi + } function startContainer(){ diff --git a/sechub-doc/build.gradle b/sechub-doc/build.gradle index 342023c88a..b72cb03032 100644 --- a/sechub-doc/build.gradle +++ b/sechub-doc/build.gradle @@ -55,6 +55,10 @@ dependencies { } implementation library.apache_commons_io + implementation spring_boot_dependency.jackson_core + implementation spring_boot_dependency.jackson_databind + implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${spring_boot_dependency_version.jackson_databind}" + testImplementation library.epages_restdoc_api_spec_mockmvc testImplementation project(':sechub-commons-model-testframework') diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/03_coding_conventions.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/03_coding_conventions.adoc index e4234befe7..769eb52865 100644 --- a/sechub-doc/src/docs/asciidoc/documents/techdoc/03_coding_conventions.adoc +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/03_coding_conventions.adoc @@ -463,3 +463,86 @@ System tests are tests which test the entire application. ====== Naming The name pattern `${nameOfClassToTest}SystemTest.java` is used to find system tests. + +=== Updates +==== Updating Spring Boot version + +===== Update build.gradle +As first we update the spring boot version inside `${rootFolder}/build.gradle`. + +As an example we upgrade from version 3.2.2 to 3.2.4: + +The existing code in `${rootFolder}/build.gradle` +[source,gradle] +---- +id 'org.springframework.boot' version '3.2.2' apply false +---- + +will be replaced by + +[source,gradle] +---- +id 'org.springframework.boot' version '3.2.4' apply false +---- + +===== Generate spring_boot_dependagen.gradle +We have some projects which do not have any Spring dependencies (e.g. `sechub-commons-core`). +But these projects are used in different {sechub} Spring boot applications as dependencies and also +often use the same libraries which are used in Spring as well. + +Here we could have version conflicts and it is pretty hard to handle this manually. + +This is the reason why we use https://github.com/de-jcup/dependagen to create the +file `spring_boot_dependagen.gradle`. + +====== Howto use DependaGen +[NOTE] +==== +If not already done, clone the `dependagen` repository loca and generate IDE parts by gradle + +For example: +[source,bash] +---- +git clone https://github.com/de-jcup/dependagen.git +cd dependagen +./gradlew eclipse +---- + +After this you can import the dependagen project into your Eclipse IDE and it is ready to use. +==== + +*Change the spring boot template to wanted version* +[source,bash] +---- +vim ./dependagen/gradle-templates/spring-boot/template_build.gradle +---- + +Change the spring boot version _(and if necessary also the version for spring dependency management plugin)_ +[source,bash] +---- +// ... +plugins { + id 'org.springframework.boot' version '3.2.4' + id 'io.spring.dependency-management' version '1.1.4' + id 'org.asciidoctor.convert' version '1.5.8' + id 'java' +} +// ... +---- +*Generate files* + +Execute `DependaGenApplication` with `generate` as argument. + +*Copy the generated output*/ +Please copy +`dependagen/gen/gradle-templates/springboot/spring_boot_dependagen.gradle` + +to + +`sechub/gradle/spring_boot_dependagen.gradle` + +After this regenerate your IDE setup - e.g. for eclipse: `./gradlew cleanEclipse eclipse`. +Check there are no compile issues. If no problems appear you can commit and push and the update +is done. + + diff --git a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/ListedProfileModel.java b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/ListedProfileModel.java index 7eaadde74b..c8f308a30c 100644 --- a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/ListedProfileModel.java +++ b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/ListedProfileModel.java @@ -3,16 +3,25 @@ import java.io.File; import java.io.IOException; -import java.nio.file.Files; import java.util.ArrayList; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.mercedesbenz.sechub.docgen.spring.SpringProfilesPlantumlGenerator.SpringProfileGenoConfig; public class ListedProfileModel { + + private static final Logger LOG = LoggerFactory.getLogger(ListedProfileModel.class); + List profiles = new ArrayList<>(); List errorMessages = new ArrayList<>(); @@ -28,6 +37,7 @@ public void add(File configFile) { } if (found == null) { found = new ListedProfile(profileName); + LOG.info("added listed profile: {}", profileName); this.profiles.add(found); } found.configFiles.add(configFile); @@ -38,7 +48,6 @@ public void calculate(SpringProfileGenoConfig config) { /* add includes */ buildModelRelations(config); filter(config); - } private void filter(SpringProfileGenoConfig config) { @@ -94,7 +103,8 @@ private void addRecursive(Set remaining, ListedProfile profile) { private void buildModelRelations(SpringProfileGenoConfig config) { ListedProfile baseProfile = ensureProfile(""); ensureProfile("test"); - for (ListedProfile profile : profiles) { + List iterateList = new ArrayList<>(profiles); + for (ListedProfile profile : iterateList) { handleProfile(profile); } for (ListedProfile profile : profiles) { @@ -132,50 +142,66 @@ private ListedProfile ensureProfile(String profileName) { return baseProfile; } + @SuppressWarnings("unchecked") private void handleProfile(ListedProfile profile) { + ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + LOG.info("Handle profile: label:{}, name:{}", profile.getLabel(), profile.getName()); +// spring: +// profiles: +// group: +// pds_integrationtest: "pds_localserver,pds_integrationtest" +// pds_debug: "pds_debug" +// pds_dev: "pds_dev,pds_localserver" +// pds_prod: "pds_postgres,pds_server" + for (File file : profile.configFiles) { + if (!ListedProfile.isYaml(file)) { continue; } + LOG.debug("Read from file: {}", file); + Map result = null; try { - List lines = Files.readAllLines(file.toPath()); - for (Iterator it = lines.iterator(); it.hasNext();) { -// spring.profiles.include: - // -... name - String line = it.next(); - if (!line.trim().contentEquals("spring.profiles.include:")) { - continue; - } - boolean doneEvenWhenIteratorHasNext = false; - while (it.hasNext()) { - String l = it.next().trim(); - if (!l.startsWith("-")) { - doneEvenWhenIteratorHasNext = true; - break; - } - String profileName = l.substring(1).trim(); - ListedProfile profileToInclude = null; - for (ListedProfile incProfile : this.profiles) { - if (incProfile.getName().contentEquals(profileName)) { - profileToInclude = incProfile; - break; - } - } - if (profileToInclude != null) { - profile.includedProfiles.add(profileToInclude); - } else { - String message = "Include profile not found:" + profileName; - SpringProfilesPlantumlGenerator.LOG.error(message); - addError(message); - } - - } - if (doneEvenWhenIteratorHasNext) { - break; - } + result = objectMapper.readValue(file, Map.class); + + } catch (JsonMappingException e) { + if (e.getMessage().contains("No content")) { + // just ignore empty files + continue; } + addError(e.getMessage()); + continue; } catch (IOException e) { - throw new IllegalStateException("Cannot read lines of " + file); + addError(e.getMessage()); + continue; + } + Object spring = result.get("spring"); + if (!(spring instanceof Map)) { + continue; + } + Map springMap = (Map) spring; + Object profiles = springMap.get("profiles"); + if (!(profiles instanceof Map)) { + continue; + } + Map profilesMap = (Map) profiles; + Object group = profilesMap.get("group"); + if (!(group instanceof Map)) { + continue; + } + Map groupMap = (Map) group; + + Set groupNames = groupMap.keySet(); + for (String groupName : groupNames) { + String content = (String) groupMap.get(groupName); + String[] splitted = content.split(","); + LOG.info("group '{}' : {}", groupName, splitted); + ListedProfile currentProfile = ensureProfile(groupName); + for (String split : splitted) { + currentProfile.includedProfiles.add(ensureProfile(split.trim())); + } } } } diff --git a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/SpringProfilesPlantumlGenerator.java b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/SpringProfilesPlantumlGenerator.java index 99c68cef7c..25fe3bf00a 100644 --- a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/SpringProfilesPlantumlGenerator.java +++ b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/spring/SpringProfilesPlantumlGenerator.java @@ -94,6 +94,9 @@ public boolean isOverviewGeneration() { } public String generate(SpringProfileGenoConfig config) { + LOG.info("Start spring profile plantuml generation. filtered profile={}, satelite profiles={}", config.getFilteredProfile(), + config.getSateliteProfiles()); + File serverFolder = new File("./sechub-server/"); if (!serverFolder.exists()) { /* not gradle but inside IDE: */ diff --git a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/PDSUseCaseModelDataCollector.java b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/PDSUseCaseModelDataCollector.java index 2393c56e19..837af86d64 100644 --- a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/PDSUseCaseModelDataCollector.java +++ b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/PDSUseCaseModelDataCollector.java @@ -10,8 +10,6 @@ import java.util.List; import java.util.Set; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.pds.usecase.PDSStep; import com.mercedesbenz.sechub.pds.usecase.PDSUseCaseDefinition; +import jakarta.annotation.security.RolesAllowed; + /** * Collector - inspired by * diff --git a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModel.java b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModel.java index 12f9fa0dbb..0a2137f0f0 100644 --- a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModel.java +++ b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModel.java @@ -15,8 +15,6 @@ import java.util.TreeMap; import java.util.TreeSet; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,6 +28,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseGroup; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseIdentifier; +import jakarta.annotation.security.RolesAllowed; + public class UseCaseModel { private static final Logger LOG = LoggerFactory.getLogger(UseCaseModel.class); diff --git a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModelDataCollector.java b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModelDataCollector.java index d5d03f8e21..5b0b03de15 100644 --- a/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModelDataCollector.java +++ b/sechub-doc/src/main/java/com/mercedesbenz/sechub/docgen/usecase/UseCaseModelDataCollector.java @@ -10,8 +10,6 @@ import java.util.List; import java.util.Set; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.Step; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseDefinition; +import jakarta.annotation.security.RolesAllowed; + /** * Collector - inspired by * https://github.com/de-jcup/code2doc/blob/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/TechInfoLinkAnnotationDataCollector.java diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AdminShowsScanLogsForProjectRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AdminShowsScanLogsForProjectRestDocTest.java index d510522f7c..177571f675 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AdminShowsScanLogsForProjectRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AdminShowsScanLogsForProjectRestDocTest.java @@ -42,7 +42,7 @@ import com.mercedesbenz.sechub.domain.scan.log.ScanLogRestController; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminShowsScanLogsForProject; import com.mercedesbenz.sechub.test.ExampleConstants; @@ -52,7 +52,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(ProjectAdministrationRestController.class) @ContextConfiguration(classes = { ScanLogRestController.class, AdminShowsScanLogsForProjectRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles(Profiles.TEST) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class AdminShowsScanLogsForProjectRestDocTest implements TestIsNecessaryForDocumentation { @@ -125,7 +125,7 @@ public void restdoc_admin_downloads_scan_logs_for_project() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousCheckAliveRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousCheckAliveRestDocTest.java index d9a36ca51b..8553c18f77 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousCheckAliveRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousCheckAliveRestDocTest.java @@ -25,7 +25,7 @@ import com.mercedesbenz.sechub.docgen.util.RestDocFactory; import com.mercedesbenz.sechub.server.core.AnonymousCheckAliveRestController; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.anonymous.UseCaseAnonymousCheckAlive; import com.mercedesbenz.sechub.test.ExampleConstants; @@ -95,7 +95,7 @@ public void calling_check_alive_get_returns_HTTP_200() throws Exception { @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousSignupRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousSignupRestControllerRestDocTest.java index 8c74262147..678f132aac 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousSignupRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousSignupRestControllerRestDocTest.java @@ -30,7 +30,7 @@ import com.mercedesbenz.sechub.domain.administration.signup.AnonymousSignupRestController; import com.mercedesbenz.sechub.domain.administration.signup.SignupJsonInputValidator; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserSignup; import com.mercedesbenz.sechub.sharedkernel.validation.ApiVersionValidationFactory; @@ -96,7 +96,7 @@ public void calling_with_api_1_0_and_valid_userid_and_email_returns_HTTP_200() t @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.java index 51f4967007..7111900b60 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.java @@ -1,18 +1,19 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.restdoc; -import static com.mercedesbenz.sechub.restdoc.RestDocumentation.*; -import static com.mercedesbenz.sechub.test.RestDocPathParameter.*; -import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.*; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; -import static org.springframework.restdocs.request.RequestDocumentation.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static com.mercedesbenz.sechub.restdoc.RestDocumentation.defineRestService; +import static com.mercedesbenz.sechub.test.RestDocPathParameter.ONE_TIME_TOKEN; +import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.https; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; +import static org.springframework.restdocs.request.RequestDocumentation.pathParameters; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.lang.annotation.Annotation; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; @@ -23,21 +24,21 @@ import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import com.mercedesbenz.sechub.docgen.util.RestDocFactory; import com.mercedesbenz.sechub.domain.administration.user.AnonymousUserGetAPITokenByOneTimeTokenService; import com.mercedesbenz.sechub.domain.administration.user.AnonymousUserGetApiTokenByOneTimeTokenRestController; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserClicksLinkToGetNewAPIToken; import com.mercedesbenz.sechub.test.ExampleConstants; import com.mercedesbenz.sechub.test.TestIsNecessaryForDocumentation; import com.mercedesbenz.sechub.test.TestPortProvider; -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @WebMvcTest(AnonymousUserGetApiTokenByOneTimeTokenRestController.class) @ContextConfiguration(classes = { AnonymousUserGetApiTokenByOneTimeTokenRestController.class, AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.SimpleTestConfiguration.class }) @@ -53,8 +54,8 @@ public class AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest imp @MockBean AnonymousUserGetAPITokenByOneTimeTokenService userApiTokenService; - @Before - public void before() { + @BeforeEach + public void beforeEach() { } @Test @@ -87,7 +88,7 @@ public void restdoc_user_clicks_link_to_get_NewApiToken() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserRequestsNewApiTokenRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserRequestsNewApiTokenRestDocTest.java index 4423c99b07..cb295f756f 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserRequestsNewApiTokenRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/AnonymousUserRequestsNewApiTokenRestDocTest.java @@ -30,7 +30,7 @@ import com.mercedesbenz.sechub.domain.administration.user.AnonymousUserRequestNewApiTokenRestController; import com.mercedesbenz.sechub.domain.administration.user.AnonymousUserRequestsNewApiTokenService; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserRequestsNewApiToken; import com.mercedesbenz.sechub.test.ExampleConstants; @@ -85,7 +85,7 @@ public void calling_with_api_1_0_and_valid_userid_and_email_returns_HTTP_200() t @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ConfigAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ConfigAdministrationRestControllerRestDocTest.java index b829f171de..14ae3277f8 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ConfigAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ConfigAdministrationRestControllerRestDocTest.java @@ -33,7 +33,7 @@ import com.mercedesbenz.sechub.domain.administration.scheduler.SchedulerAdministrationRestController; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesAutoCleanupConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminUpdatesAutoCleanupConfiguration; @@ -44,7 +44,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(SchedulerAdministrationRestController.class) @ContextConfiguration(classes = { ConfigAdministrationRestController.class, ConfigAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class ConfigAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -124,7 +124,7 @@ public void restdoc_admin_fetches_auto_cleanup_configuration() throws Exception @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/DownloadsFullScanDataForJobRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/DownloadsFullScanDataForJobRestDocTest.java index ae83a446e9..1f47195d20 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/DownloadsFullScanDataForJobRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/DownloadsFullScanDataForJobRestDocTest.java @@ -38,7 +38,7 @@ import com.mercedesbenz.sechub.domain.scan.log.ProjectScanLog; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.logging.LogSanitizer; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; @@ -51,7 +51,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(ProjectAdministrationRestController.class) @ContextConfiguration(classes = { FullScanDataRestController.class, DownloadsFullScanDataForJobRestDocTest.SimpleTestConfiguration.class, LogSanitizer.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles(Profiles.TEST) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class DownloadsFullScanDataForJobRestDocTest implements TestIsNecessaryForDocumentation { @@ -126,7 +126,7 @@ public void restdoc_admin_downloads_fullscan_data_for_job() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/FalsePositiveRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/FalsePositiveRestControllerRestDocTest.java index 3c67ed2cc7..f2a2138bc3 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/FalsePositiveRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/FalsePositiveRestControllerRestDocTest.java @@ -56,7 +56,7 @@ import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; import com.mercedesbenz.sechub.sharedkernel.UserContextService; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserFetchesFalsePositiveConfigurationOfProject; import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserMarksFalsePositivesForJob; @@ -69,7 +69,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(FalsePositiveRestController.class) @ContextConfiguration(classes = { FalsePositiveRestController.class, FalsePositiveRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class FalsePositiveRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -303,7 +303,7 @@ public void user_fetches_false_positive_configuration() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/JobAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/JobAdministrationRestControllerRestDocTest.java index 973dd4fd75..2c9b197ab5 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/JobAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/JobAdministrationRestControllerRestDocTest.java @@ -41,7 +41,7 @@ import com.mercedesbenz.sechub.domain.administration.job.JobStatus; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.job.UseCaseAdminCancelsJob; import com.mercedesbenz.sechub.sharedkernel.usecases.job.UseCaseAdminListsAllRunningJobs; @@ -54,7 +54,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(JobAdministrationRestController.class) @ContextConfiguration(classes = { JobAdministrationRestController.class, JobAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class JobAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -233,7 +233,7 @@ private static String inArray(String field) { } @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/MappingAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/MappingAdministrationRestControllerRestDocTest.java index c235dae79d..a0ffce8f32 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/MappingAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/MappingAdministrationRestControllerRestDocTest.java @@ -37,7 +37,7 @@ import com.mercedesbenz.sechub.domain.administration.status.StatusEntry; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.status.UseCaseAdminListsStatusInformation; import com.mercedesbenz.sechub.test.ExampleConstants; @@ -47,7 +47,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(StatusAdministrationRestController.class) @ContextConfiguration(classes = { StatusAdministrationRestController.class, MappingAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class MappingAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -123,7 +123,7 @@ public void restdoc_admin_lists_status_information() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutionProfileRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutionProfileRestControllerRestDocTest.java index 9edf808725..7c2b34c16c 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutionProfileRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutionProfileRestControllerRestDocTest.java @@ -50,7 +50,7 @@ import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminAssignsExecutionProfileToProject; @@ -72,7 +72,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(ProductExecutionProfileRestController.class) @ContextConfiguration(classes = { ProductExecutionProfileRestController.class, ProductExecutionProfileRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class ProductExecutionProfileRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -440,7 +440,7 @@ public void restDoc_admin_fetches_profiles_list() throws Exception { @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutorConfigRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutorConfigRestControllerRestDocTest.java index 22afbe4a93..277856f357 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutorConfigRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProductExecutorConfigRestControllerRestDocTest.java @@ -51,7 +51,7 @@ import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminCreatesExecutorConfiguration; @@ -68,7 +68,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(ProductExecutorConfigRestController.class) @ContextConfiguration(classes = { ProductExecutorConfigRestController.class, ProductExecutorConfigRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class ProductExecutorConfigRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -369,7 +369,7 @@ public void restDoc_admin_fetches_executor_config_list() throws Exception { @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectAdministrationRestControllerRestDocTest.java index ef215015b1..5e94d1b7b5 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectAdministrationRestControllerRestDocTest.java @@ -61,7 +61,7 @@ import com.mercedesbenz.sechub.server.SecHubWebMvcConfigurer; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.project.ProjectAccessLevel; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminChangesProjectDescription; @@ -81,7 +81,7 @@ @WebMvcTest(ProjectAdministrationRestController.class) @ContextConfiguration(classes = { ProjectAdministrationRestController.class, ProjectAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class, SecHubWebMvcConfigurer.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class ProjectAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -546,7 +546,7 @@ public void restdoc_change_project_description() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectUpdateAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectUpdateAdministrationRestControllerRestDocTest.java index d4d95acfdc..09e3f94b29 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectUpdateAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ProjectUpdateAdministrationRestControllerRestDocTest.java @@ -39,7 +39,7 @@ import com.mercedesbenz.sechub.domain.administration.project.UpdateProjectInputValidator; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectMetaData; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectWhitelist; @@ -51,7 +51,7 @@ @WebMvcTest(ProjectUpdateAdministrationRestController.class) @ContextConfiguration(classes = { ProjectUpdateAdministrationRestController.class, ProjectUpdateAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class ProjectUpdateAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -156,7 +156,7 @@ public void restdoc_update_metadata_for_project() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ScanProjectMockDataRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ScanProjectMockDataRestControllerRestDocTest.java index ae187a2440..7110cec06e 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ScanProjectMockDataRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ScanProjectMockDataRestControllerRestDocTest.java @@ -33,7 +33,7 @@ import com.mercedesbenz.sechub.domain.scan.project.ScanProjectMockDataConfigurationService; import com.mercedesbenz.sechub.domain.scan.project.ScanProjectMockDataRestController; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserDefinesProjectMockdata; import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserRetrievesProjectMockdata; @@ -142,7 +142,7 @@ public void get_project_mock_configuration() throws Exception { @TestConfiguration @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerAdministrationRestControllerRestDocTest.java index 5940354278..9f9d8acbb8 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerAdministrationRestControllerRestDocTest.java @@ -31,7 +31,7 @@ import com.mercedesbenz.sechub.domain.administration.scheduler.TriggerSchedulerStatusRefreshService; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.schedule.UseCaseAdminDisablesSchedulerJobProcessing; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.schedule.UseCaseAdminEnablesSchedulerJobProcessing; @@ -43,7 +43,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(SchedulerAdministrationRestController.class) @ContextConfiguration(classes = { SchedulerAdministrationRestController.class, SchedulerAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class SchedulerAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -149,7 +149,7 @@ public void restdoc_admin_enables_scheduler_job_processing() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerRestControllerRestDocTest.java index 81eef3fb62..cfe6d965dd 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SchedulerRestControllerRestDocTest.java @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.restdoc; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.*; import static com.mercedesbenz.sechub.commons.model.SecHubConfigurationModel.*; import static com.mercedesbenz.sechub.commons.model.TestSecHubConfigurationBuilder.*; import static com.mercedesbenz.sechub.restdoc.RestDocumentation.*; @@ -26,9 +27,9 @@ import java.util.TreeMap; import java.util.UUID; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; @@ -38,10 +39,10 @@ import org.springframework.context.annotation.Profile; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; +import org.springframework.restdocs.RestDocumentationExtension; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.util.StringUtils; @@ -85,7 +86,7 @@ import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobInfoForUserService; import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobRepository; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfiguration; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfigurationValidator; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; @@ -99,10 +100,10 @@ import com.mercedesbenz.sechub.test.TestIsNecessaryForDocumentation; import com.mercedesbenz.sechub.test.TestPortProvider; -@RunWith(SpringRunner.class) @WebMvcTest(SchedulerRestController.class) @ContextConfiguration(classes = { SchedulerRestController.class, SchedulerRestControllerRestDocTest.SimpleTestConfiguration.class }) @WithMockUser +@ExtendWith(RestDocumentationExtension.class) @ActiveProfiles(Profiles.TEST) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class SchedulerRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -920,31 +921,33 @@ public UUID getUUID() { MockMultipartFile file1 = new MockMultipartFile("file", inputStreamTo); /* execute + test @formatter:off */ this.mockMvc.perform( - multipart(apiEndpoint, PROJECT1_ID, randomUUID). - file(file1).param("checkSum", "mychecksum") - ). - andExpect(status().isOk()). - // https://docs.spring.io/spring-restdocs/docs/2.0.2.RELEASE/reference/html5/ - andDo(defineRestService(). + multipart(apiEndpoint, PROJECT1_ID, randomUUID). + file(file1). + queryParam(MULTIPART_CHECKSUM, "checkSumValue") + ). + andExpect(status().isOk()). + // https://docs.spring.io/spring-restdocs/docs/2.0.2.RELEASE/reference/html5/ + andDo(defineRestService(). with(). useCaseData(useCase). tag(RestDocFactory.extractTag(apiEndpoint)). and(). document( - requestHeaders( - - ), + requestHeaders( + ), pathParameters( parameterWithName("projectId").description("The id of the project where sourcecode shall be uploaded for"), parameterWithName("jobUUID").description(DESCRIPTION_JOB_UUID) ), - requestParameters( - parameterWithName("checkSum").description("A sha256 checksum for file upload validation") + queryParameters( + parameterWithName(MULTIPART_CHECKSUM).description("A sha256 checksum for file upload validation") ), // TODO Jeremias Eppler, 2020-12-07: It is not possible to document this part properly in OpenAPI. // See: https://github.com/ePages-de/restdocs-api-spec/issues/105 - requestParts(partWithName("file").description("The sourcecode as zipfile to upload")) - )); + requestParts( + partWithName(MULTIPART_FILE).description("The sourcecode as zipfile to upload") + ) + )); /* @formatter:on */ } @@ -973,39 +976,39 @@ public UUID getUUID() { when(mockedScheduleJobStatusService.getJobStatus(PROJECT1_ID, randomUUID)).thenReturn(status); InputStream inputStreamTo = RestDocTestFileSupport.getTestfileSupport().getInputStreamTo("upload/tarfile_contains_only_test1.txt.tar"); - MockMultipartFile file1 = new MockMultipartFile("file", inputStreamTo); - /* execute + test @formatter:off */ + MockMultipartFile file = new MockMultipartFile("file", inputStreamTo); + MockMultipartFile checkSum = new MockMultipartFile("checkSum", "", "", "checkSumValue".getBytes()); + + /* execute + test */ + /* @formatter:off */ this.mockMvc.perform( multipart(apiEndpoint, PROJECT1_ID, randomUUID). - file(file1). - param("checkSum", "mychecksum"). - header(CommonConstants.FILE_SIZE_HEADER_FIELD_NAME, file1.getBytes().length) + file(file). + file(checkSum). + header(CommonConstants.FILE_SIZE_HEADER_FIELD_NAME, file.getBytes().length) ). andExpect(status().isOk()). - // https://docs.spring.io/spring-restdocs/docs/2.0.2.RELEASE/reference/html5/ + // https://docs.spring.io/spring-restdocs/docs/2.0.2.RELEASE/reference/html5/ andDo(defineRestService(). with(). useCaseData(useCase). tag(RestDocFactory.extractTag(apiEndpoint)). and(). document( - requestHeaders( - - ), pathParameters( parameterWithName("projectId").description("The id of the project for which the binaries are uploaded for"), parameterWithName("jobUUID").description(DESCRIPTION_JOB_UUID) ), - requestParameters( - parameterWithName("checkSum").description("A sha256 checksum for file upload validation") - ), requestHeaders( headerWithName(CommonConstants.FILE_SIZE_HEADER_FIELD_NAME).description("The file size of the tar-archive to upload in bytes. Needs to be a positive integer value.") ), // TODO de-jcup, 2022-04-14: It is not possible to document this part properly in OpenAPI. // See: https://github.com/ePages-de/restdocs-api-spec/issues/105 - requestParts(partWithName("file").description("The binaries as tarfile to upload")) + requestParts( + partWithName("file").description("The binaries as tarfile to upload"), + partWithName(CommonConstants.MULTIPART_CHECKSUM).description("A sha256 checksum for file upload validation") + ) )); /* @formatter:on */ @@ -1174,7 +1177,7 @@ public void restDoc_userListsJobsForProject() throws Exception { pathParameters( parameterWithName(PROJECT_ID.paramName()).description("The id of the project where job information shall be fetched for") ), - requestParameters( + queryParameters( parameterWithName(SIZE.paramName()).optional().description("The wanted (maximum) size for the result set. When not defined, the default will be "+SchedulerRestController.DEFAULT_JOB_INFORMATION_SIZE+"."), parameterWithName(PAGE.paramName()).optional().description("The wanted page number. When not defined, the default will be "+SchedulerRestController.DEFAULT_JOB_INFORMATION_PAGE+"."), parameterWithName("metadata.labels.*").optional(). @@ -1204,7 +1207,7 @@ public void restDoc_userListsJobsForProject() throws Exception { /* @formatter:on */ } - @Before + @BeforeEach public void before() { randomUUID = UUID.randomUUID(); project1 = mock(ScheduleAccess.class); @@ -1220,7 +1223,7 @@ public void before() { @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ServerInfoAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ServerInfoAdministrationRestControllerRestDocTest.java index 660f27a683..7ea44c62ce 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ServerInfoAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/ServerInfoAdministrationRestControllerRestDocTest.java @@ -33,7 +33,7 @@ import com.mercedesbenz.sechub.server.core.ServerRuntimeData; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.status.UseCaseAdminFetchesServerRuntimeData; import com.mercedesbenz.sechub.test.ExampleConstants; @@ -44,7 +44,7 @@ @WebMvcTest(ServerInfoAdministrationRestController.class) @ContextConfiguration(classes = { ServerInfoAdministrationRestController.class, ServerInfoAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class ServerInfoAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -97,7 +97,7 @@ public void restdoc_admin_get_server_version_as_Json() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SignupAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SignupAdministrationRestControllerRestDocTest.java index 9b646168ad..fe560311a6 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SignupAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/SignupAdministrationRestControllerRestDocTest.java @@ -38,7 +38,7 @@ import com.mercedesbenz.sechub.domain.administration.signup.SignupRepository; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.signup.UseCaseAdminDeletesSignup; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.signup.UseCaseAdminListsOpenUserSignups; @@ -50,7 +50,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(SignupAdministrationRestController.class) @ContextConfiguration(classes = { SignupAdministrationRestController.class, SignupAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class SignupAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -152,7 +152,7 @@ public void restdoc_delete_signup() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/StatusAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/StatusAdministrationRestControllerRestDocTest.java index 4bab46200d..fc86599eb3 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/StatusAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/StatusAdministrationRestControllerRestDocTest.java @@ -38,7 +38,7 @@ import com.mercedesbenz.sechub.domain.administration.mapping.UpdateMappingService; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.mapping.MappingIdentifier; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdmiUpdatesMappingConfiguration; @@ -51,7 +51,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(MappingAdministrationRestController.class) @ContextConfiguration(classes = { MappingAdministrationRestController.class, MappingAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class StatusAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -163,7 +163,7 @@ public void restdoc_admin_updates_mapping_configuration() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/UserAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/UserAdministrationRestControllerRestDocTest.java index 5cdfb5f552..ac69f7025c 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/UserAdministrationRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/UserAdministrationRestControllerRestDocTest.java @@ -47,7 +47,7 @@ import com.mercedesbenz.sechub.domain.administration.user.UserRevokeSuperAdminRightsService; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseRestDoc; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.signup.UseCaseAdminAcceptsSignup; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminDeletesUser; @@ -66,7 +66,7 @@ @RunWith(SpringRunner.class) @WebMvcTest(UserAdministrationRestController.class) @ContextConfiguration(classes = { UserAdministrationRestController.class, UserAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) -@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = RoleConstants.ROLE_SUPERADMIN) @ActiveProfiles({ Profiles.TEST, Profiles.ADMIN_ACCESS }) @AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) public class UserAdministrationRestControllerRestDocTest implements TestIsNecessaryForDocumentation { @@ -438,7 +438,7 @@ public void restdoc_show_user_details_for_email_address() throws Exception { @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-examples/example-sechub-api-java/build.gradle b/sechub-examples/example-sechub-api-java/build.gradle index 5237da6925..da09407364 100644 --- a/sechub-examples/example-sechub-api-java/build.gradle +++ b/sechub-examples/example-sechub-api-java/build.gradle @@ -25,7 +25,6 @@ dependencies { testImplementation spring_boot_dependency.junit_jupiter testImplementation spring_boot_dependency.mockito_core - testImplementation library.mockito_inline testImplementation spring_boot_dependency.hamcrest implementation library.jcommander diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/SecurityTestHelper.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/SecurityTestHelper.java index 8ae320fae7..7e6e07b3d8 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/SecurityTestHelper.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/SecurityTestHelper.java @@ -123,7 +123,7 @@ private void callTestURLWithProtocol(SSLTestContext context) throws Exception { httpsConnection.setSSLSocketFactory(socketFactory); /* - * next fetch of conent is also necessary and we do also getotherwise we have a + * next fetch of conent is also necessary and we do also get otherwise we have a * "java.lang.IllegalStateException: connection not yet open" */ print_content(httpsConnection); @@ -223,22 +223,27 @@ public X509Certificate[] getAcceptedIssuers() { public void assertNotContainedMacsInCiphers(String... notAllowedMacs) throws Exception { ensureCipherTestDone(); + StringBuilder problems = new StringBuilder(); + for (CipherCheck check : cipherTestData.cipherChecks) { if ("true".equals(check.verified)) { String mac = getMac(check); if (mac == null) { - fail("mac is null in test cipher - should not happen!"); + problems.append("Mac is null in test cipher - should never happen!\n * " + check + "\n"); } for (String notAllowedMac : notAllowedMacs) { if (mac.equalsIgnoreCase(notAllowedMac)) { - fail("Not wanted mac: " + mac + " found inside verfified cipher: " + check.cipher); + problems.append("Not wanted mac: " + mac + " found inside verfified cipher: " + check.cipher + "\n"); } } } } + if (!problems.isEmpty()) { + fail("Problems found:\n" + problems.toString()); + } } @@ -379,6 +384,15 @@ private void ensureCipherTestDone() throws Exception { assertNoConnectionHasBeenRefused(); + StringBuilder sb = new StringBuilder(); + sb.append("Accepted ciphers for " + targetType + " from " + testURL + "\n"); + for (CipherCheck check : cipherTestData.cipherChecks) { + if (Boolean.valueOf(check.verified)) { + sb.append("- " + check.cipher + "\n"); + } + } + LOG.info(sb.toString()); + } /* Sanity check - when no server is available we have only unknown results */ diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AbstractHttpStatusCodeExceptionTestValidator.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AbstractHttpStatusCodeExceptionTestValidator.java index 1092920bbd..e33b82eab5 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AbstractHttpStatusCodeExceptionTestValidator.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AbstractHttpStatusCodeExceptionTestValidator.java @@ -46,7 +46,7 @@ public final void validate(HttpStatusCodeException exception) { } protected void validateHttpStatusCode(HttpStatusCodeException exception) { - int status = exception.getRawStatusCode(); + int status = exception.getStatusCode().value(); boolean failedAsExpected = isExpectedStatusCode(status, expectedStatusCodes); if (failedAsExpected) { return; diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AssertReport.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AssertReport.java index dd2ca7aff3..254003eb05 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AssertReport.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AssertReport.java @@ -7,13 +7,26 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.Set; import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.mercedesbenz.sechub.commons.model.*; +import com.mercedesbenz.sechub.commons.model.ScanType; +import com.mercedesbenz.sechub.commons.model.SecHubCodeCallStack; +import com.mercedesbenz.sechub.commons.model.SecHubFinding; +import com.mercedesbenz.sechub.commons.model.SecHubMessage; +import com.mercedesbenz.sechub.commons.model.SecHubMessageType; +import com.mercedesbenz.sechub.commons.model.SecHubReportData; +import com.mercedesbenz.sechub.commons.model.SecHubReportMetaData; +import com.mercedesbenz.sechub.commons.model.SecHubReportModel; +import com.mercedesbenz.sechub.commons.model.SecHubReportScanTypeSummary; +import com.mercedesbenz.sechub.commons.model.SecHubReportSummary; +import com.mercedesbenz.sechub.commons.model.SecHubReportVersion; +import com.mercedesbenz.sechub.commons.model.SecHubResult; +import com.mercedesbenz.sechub.commons.model.SecHubStatus; +import com.mercedesbenz.sechub.commons.model.Severity; +import com.mercedesbenz.sechub.commons.model.TrafficLight; import com.mercedesbenz.sechub.integrationtest.internal.SecHubJobAutoDumper; public class AssertReport { @@ -50,34 +63,23 @@ public AssertReportUnordered hasUnordered() { } public AssertReport hasMessages(int expectedAmountOfMessages) { - int size = report.getMessages().size(); - - if (expectedAmountOfMessages != size) { - dumpMessages(report); - } - autoDumper.execute(() -> { - assertEquals(expectedAmountOfMessages, size); + int amountOfMessages = report.getMessages().size(); + + if (amountOfMessages != expectedAmountOfMessages) { + StringBuilder sb = new StringBuilder(); + sb.append("Expected messages count: ").append(expectedAmountOfMessages).append(" but was: ").append(amountOfMessages); + sb.append("\n"); + for (SecHubMessage secHubMessage : report.getMessages()) { + sb.append(secHubMessage); + sb.append("\n"); + } + fail(sb.toString()); + } }); return this; } - private void dumpMessages(SecHubReportModel report) { - Set messages = report.getMessages(); - - System.out.println("#".repeat(100)); - System.out.println("# DUMP all Messages for SecHub job: " + report.getJobUUID()); - System.out.println("#".repeat(100)); - - int count = 0; - for (SecHubMessage message : messages) { - count++; - System.out.println(count + ":" + message.toString()); - } - System.out.println(""); - - } - public AssertReport hasMessage(SecHubMessageType type, String message) { autoDumper.execute(() -> { SecHubMessage expectedMessage = new SecHubMessage(type, message); diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/IntegrationTestSetup.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/IntegrationTestSetup.java index c8a0bf7ffc..5bcf660474 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/IntegrationTestSetup.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/IntegrationTestSetup.java @@ -15,7 +15,7 @@ import org.junit.runners.model.Statement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.ResourceAccessException; @@ -230,11 +230,10 @@ public void evaluate() throws Throwable { try { next.evaluate(); } catch (HttpStatusCodeException e) { - HttpStatus code = e.getStatusCode(); + HttpStatusCode code = e.getStatusCode(); String lastURL = TestRestHelper.getLastUrl(); - throw new IntegrationTestException( - "HTTP ERROR " + e.getRawStatusCode() + " '" + (code != null ? code.getReasonPhrase() : "?") + "', " + lastURL, e); + throw new IntegrationTestException("HTTP ERROR " + code + " '" + (code != null ? e.getStatusText() : "?") + "', " + lastURL, e); } finally { logEnd(TestTag.DONE, testClass, testMethod, startTime); } diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidator.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidator.java index 402c4c1107..34b1b43f9d 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidator.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidator.java @@ -91,7 +91,7 @@ protected void validateErrorField(Map map, HttpStatusCodeExcepti String error = map.get(FIELD_ERROR); assertNotNull("error is null", error); // check error contains expected reasonphrase - assertEquals("Status code resaonphrase is not used as error inside JSON", "" + HttpStatus.valueOf(exception.getRawStatusCode()).getReasonPhrase(), + assertEquals("Status code reason phrase is not used as error inside JSON", "" + HttpStatus.valueOf(exception.getStatusCode().value()).getReasonPhrase(), error); } diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java index 1e967d3afe..490c1b590b 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java @@ -1253,7 +1253,7 @@ public boolean runAndReturnTrueWhenSuccesfulImpl() throws Exception { */ public static void resetAutoCleanupDays(int wantedFormerDays) { ensureAutoCleanupSetToDays(wantedFormerDays); - resetIntegrationTestAutoCleanupInspector(); + resetIntegrationTestAutoCleanupInspectorEvents(); } public static void resetPDSAutoCleanupDaysToZero() { @@ -1262,7 +1262,7 @@ public static void resetPDSAutoCleanupDaysToZero() { waitUntilPDSAutoCleanupConfigurationChangedTo(data); } - private static void resetIntegrationTestAutoCleanupInspector() { + public static void resetIntegrationTestAutoCleanupInspectorEvents() { String url = getURLBuilder().buildIntegrationTestResetAutoCleanupInspectionUrl(); getSuperAdminRestHelper().post(url); } @@ -1305,7 +1305,6 @@ public static void waitUntilPDSAutoCleanupConfigurationChangedTo(TestAutoCleanup executeUntilSuccessOrTimeout(new AbstractTestExecutable(PDS_ADMIN, 2, 200) { @Override public boolean runAndReturnTrueWhenSuccesfulImpl() throws Exception { - asPDSUser(PDS_ADMIN).fetchAutoCleanupConfiguration(); TestAutoCleanupData autoCleanupConfig2 = asPDSUser(PDS_ADMIN).fetchAutoCleanupConfiguration(); return data.equals(autoCleanupConfig2); } diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/TestRestHelper.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/TestRestHelper.java index ad090cdbf2..29fdc160a9 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/TestRestHelper.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/TestRestHelper.java @@ -1,7 +1,9 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.integrationtest.internal; -import static com.mercedesbenz.sechub.commons.core.CommonConstants.*; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.FILE_SIZE_HEADER_FIELD_NAME; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.MULTIPART_CHECKSUM; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.MULTIPART_FILE; import java.io.BufferedReader; import java.io.File; @@ -17,7 +19,7 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.client.BufferingClientHttpRequestFactory; @@ -286,7 +288,6 @@ public String upload(String uploadUrl, File file, String checkSum) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); - headers.set("", checkSum); String fileSize = String.valueOf(file.length()); headers.set(FILE_SIZE_HEADER_FIELD_NAME, fileSize); @@ -313,7 +314,7 @@ private String getStringWithHeaders(String url, HttpHeaders headers) { private class ErrorHandler extends DefaultResponseErrorHandler { @Override - protected void handleError(ClientHttpResponse response, HttpStatus statusCode) throws IOException { + protected void handleError(ClientHttpResponse response, HttpStatusCode statusCode) throws IOException { StringBuilder sb = new StringBuilder(); try (BufferedReader br = new BufferedReader(new InputStreamReader(response.getBody()))) { String line = null; diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/AbstractAssertAutoCleanupInspections.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/AbstractAssertAutoCleanupInspections.java index c29addeb8e..39f7e8dde3 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/AbstractAssertAutoCleanupInspections.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/AbstractAssertAutoCleanupInspections.java @@ -1,16 +1,22 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.integrationtest.internal.autoclean; +import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.*; + import java.util.ArrayList; import java.util.List; import org.junit.Assert; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.mercedesbenz.sechub.integrationtest.api.AbstractTestExecutable; import com.mercedesbenz.sechub.integrationtest.api.TestAPI; public abstract class AbstractAssertAutoCleanupInspections { + private static final Logger LOG = LoggerFactory.getLogger(AbstractAssertAutoCleanupInspections.class); + private static final String LINER = "************************************************************************"; private List actions; @@ -60,19 +66,42 @@ protected interface TestAutoCleanJsonDeleteCountFetcher { /** * Will start check for the expected parts. If failing a retry will be done - * until time out. When timeout has reached an exception will be thrown and test - * fails. + * fails. Attention: in case of {@link ActionState#PLEASE_GO_FURTHER} (e.g. for + * {@link #addExpectedNeverAnyDeleteInspection()} ) always retries will be done, + * which means: a timeout is here also the amount of time because always a retry + * is done! + * + * Time to wait for next retry is 300 milliseconds. + * + * @param timeoutInSeconds time out in seconds */ public void assertAsExpectedWithTimeOut(int timeoutInSeconds) { + assertAsExpectedWithTimeOut(timeoutInSeconds, 300); + } + + /** + * Will start check for the expected parts. If failing a retry will be done - + * until time out. When timeout has reached an exception will be thrown and test + * fails. Attention: in case of {@link ActionState#PLEASE_GO_FURTHER} (e.g. for + * {@link #addExpectedNeverAnyDeleteInspection()} ) always retries will be done, + * which means: a timeout is here also the amount of time because always a retry + * is done! + * + * @param timeoutInSeconds time out in seconds + * @param timeToWaitInMilliseconds time in milliseconds to wait before next + * retry + */ + public void assertAsExpectedWithTimeOut(int timeoutInSeconds, int timeToWaitInMilliseconds) { TestAutoCleanJsonDeleteCountFetcher fetcher = createFeatcher(); - assertAsExpectedWithTimeOut(timeoutInSeconds, fetcher); + assertAsExpectedWithTimeOut(timeoutInSeconds, fetcher, timeToWaitInMilliseconds); } protected abstract TestAutoCleanJsonDeleteCountFetcher createFeatcher(); - private void assertAsExpectedWithTimeOut(int timeoutInSeconds, TestAutoCleanJsonDeleteCountFetcher fetcher) { + private void assertAsExpectedWithTimeOut(int timeoutInSeconds, TestAutoCleanJsonDeleteCountFetcher fetcher, int timeToWaitInMilliseconds) { List problems = new ArrayList<>(); try { - TestAPI.executeUntilSuccessOrTimeout(new AbstractTestExecutable(TestAPI.SUPER_ADMIN, timeoutInSeconds, 300) { + executeUntilSuccessOrTimeout(new AbstractTestExecutable(TestAPI.SUPER_ADMIN, timeoutInSeconds, timeToWaitInMilliseconds) { @Override public boolean runAndReturnTrueWhenSuccesfulImpl() throws Exception { @@ -84,23 +113,30 @@ public boolean runAndReturnTrueWhenSuccesfulImpl() throws Exception { if (action instanceof AssertAutoCleanupDeleteCountAction) { AssertAutoCleanupDeleteCountAction deleteAction = (AssertAutoCleanupDeleteCountAction) action; ActionState state = deleteAction.validate(counts, problemMessageBuilder); + /* + * Special case when ActionState.PLEASE_GO_FURTHER - always retry + */ atLeastOneWantsToRetry = atLeastOneWantsToRetry || state == ActionState.PLEASE_GO_FURTHER; } } boolean noProblems = problemMessageBuilder.length() == 0; if (noProblems) { if (atLeastOneWantsToRetry) { + LOG.debug("No problems found, but at least one retry necessary, return false"); return false; } + LOG.debug("No problems found, no retry necessary, return true"); return true; } problemMessageBuilder.append("\n\n").append(LINER).append("\nReturned data from integration test server:\n").append(LINER); for (TestAutoCleanJsonDeleteCount count : counts) { - problemMessageBuilder.append("\n - variant=").append(count.variant).append(", expectedDeletes=").append(count.deleteCount) + problemMessageBuilder.append("\n - count: variant=").append(count.variant).append(", deleted=").append(count.deleteCount) .append(",className=").append(count.className); } problemMessageBuilder.append("\n"); problems.add("\nProblem(s):\n" + LINER + "\n" + problemMessageBuilder.toString()); + + LOG.debug("Problems found, return false"); return false; } }); diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/ActionState.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/ActionState.java index 5870961a0e..477d5c12f0 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/ActionState.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/internal/autoclean/ActionState.java @@ -2,7 +2,14 @@ package com.mercedesbenz.sechub.integrationtest.internal.autoclean; public enum ActionState { + + /** + * Can determine a state. Means no retry necessary, + */ DONE_CAN_MAKE_STATEMENT, + /** + * Cannot determine state - please retry ... + */ PLEASE_GO_FURTHER, } \ No newline at end of file diff --git a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidatorTest.java b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidatorTest.java index 2dc6369a31..69f1587de1 100644 --- a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidatorTest.java +++ b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/api/JsonErrorFieldNamesAvailableHttpStatusExceptionTestValidatorTest.java @@ -141,7 +141,7 @@ void expected_404_null_body_is_invalid() { private HttpStatusCodeException createMockedException(String json, HttpStatus expectedStatus) { HttpStatusCodeException exception = mock(HttpStatusCodeException.class); - when(exception.getRawStatusCode()).thenReturn(expectedStatus.value()); + when(exception.getStatusCode()).thenReturn(expectedStatus); when(exception.getResponseBodyAsString()).thenReturn(json); return exception; } diff --git a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/AutoCleanupScenario1IntTest.java b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/AutoCleanupScenario1IntTest.java index e20c95aa4a..c352285326 100644 --- a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/AutoCleanupScenario1IntTest.java +++ b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/AutoCleanupScenario1IntTest.java @@ -31,7 +31,23 @@ public class AutoCleanupScenario1IntTest { public Timeout timeOut = Timeout.seconds(600); @Test - public void auto_cleanup_executed_in_every_domain_when_admin_configures_cleanupdays_1() { + public void auto_cleanup_multi_test() { + /* + * why is this a multi test? Because we cannot predict the ordering in different + * junit tests and there were flaky test situations, the both tests are combined + * here and run different. + * + * Inside the stacktrace we can still see at which "stage" the test fail + */ + + /* first we configure and expect events */ + auto_cleanup_executed_in_every_domain_when_admin_configures_cleanupdays_1(); + + /* next reset to 0 and expect no longer events */ + auto_cleanup_NEVER_executed_in_any_domain_when_admin_configures_cleanupdays_0(); + } + + private void auto_cleanup_executed_in_every_domain_when_admin_configures_cleanupdays_1() { /* prepare */ resetAutoCleanupDays(0); @@ -64,11 +80,7 @@ public void auto_cleanup_executed_in_every_domain_when_admin_configures_cleanupd } - @Test - public void auto_cleanup_NEVER_executed_in_any_domain_when_admin_configures_cleanupdays_0() { - - /* prepare */ - resetAutoCleanupDays(4711);// so different to 0 which we will set next + private void auto_cleanup_NEVER_executed_in_any_domain_when_admin_configures_cleanupdays_0() { /* execute */ as(SUPER_ADMIN).updateAutoCleanupConfiguration(new TestAutoCleanupData(0, TestCleanupTimeUnit.DAY)); @@ -76,11 +88,18 @@ public void auto_cleanup_NEVER_executed_in_any_domain_when_admin_configures_clea /* test */ /* @formatter:off */ waitUntilEveryDomainHasAutoCleanupSynchedToDays(0); - + waitMilliSeconds(500); // give server chance to trigger/handle last remaining events + resetIntegrationTestAutoCleanupInspectorEvents(); // clear existing events + + // now we check that even after 3 seconds, there is no interaction/no new events + // why 3 seconds? Please look at application-integrationtest.yml: auto clean trigger is here set to + // delay of 2 seconds, initial delay 100 milliseconds. + // when we wait 3 seconds the next trigger would be done, if it would not be turned off! + // (we test cleanup is no longer triggered when set to 0) assertAutoCleanupInspections(). - addExpectedNeverAnyDeleteInspection(). // this will take 5 seconds + addExpectedNeverAnyDeleteInspection(). - assertAsExpectedWithTimeOut(3); + assertAsExpectedWithTimeOut(3,1000); // we have here always a retry, means check is done here for a given time of 3 seconds /* @formatter:on */ diff --git a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario4/CancelJobScenario4IntTest.java b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario4/CancelJobScenario4IntTest.java index 2aa8869c4a..76e49a1067 100644 --- a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario4/CancelJobScenario4IntTest.java +++ b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario4/CancelJobScenario4IntTest.java @@ -3,7 +3,6 @@ import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.*; import static com.mercedesbenz.sechub.integrationtest.scenario4.Scenario4.*; -import static org.junit.Assert.*; import java.util.UUID; diff --git a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/PDSServerEncryptionIntTest.java b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/PDSServerEncryptionIntTest.java index c8c423ba3c..c43beab3e0 100644 --- a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/PDSServerEncryptionIntTest.java +++ b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/PDSServerEncryptionIntTest.java @@ -28,12 +28,12 @@ static void beforeAll() throws Exception { } @Test - void verified_ciphers_do_have_MAC_with_SHA_or_SHA1() throws Exception { + void verified_ciphers_do_not_have_MAC_with_SHA_or_SHA1() throws Exception { securityTestHelper.assertNotContainedMacsInCiphers("SHA", "SHA1"); } @Test - void verified_ciphers_do_have_MAC_with_MD5() throws Exception { + void verified_ciphers_do_not_have_MAC_with_MD5() throws Exception { securityTestHelper.assertNotContainedMacsInCiphers("MD5"); } diff --git a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/ServerEncryptionIntTest.java b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/ServerEncryptionIntTest.java index 46beb4ea43..97805e4ebf 100644 --- a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/ServerEncryptionIntTest.java +++ b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/security/ServerEncryptionIntTest.java @@ -28,12 +28,12 @@ static void beforeAll() throws Exception { } @Test - void verified_ciphers_do_have_MAC_with_SHA_or_SHA1() throws Exception { + void verified_ciphers_do_not_have_MAC_with_SHA_or_SHA1() throws Exception { securityTestHelper.assertNotContainedMacsInCiphers("SHA", "SHA1"); } @Test - void verified_ciphers_do_have_MAC_with_MD5() throws Exception { + void verified_ciphers_do_not_have_MAC_with_MD5() throws Exception { securityTestHelper.assertNotContainedMacsInCiphers("MD5"); } diff --git a/sechub-notification/src/main/java/com/mercedesbenz/sechub/domain/notification/email/MockEmailRestController.java b/sechub-notification/src/main/java/com/mercedesbenz/sechub/domain/notification/email/MockEmailRestController.java index dff3fd3099..4ffaa872bb 100644 --- a/sechub-notification/src/main/java/com/mercedesbenz/sechub/domain/notification/email/MockEmailRestController.java +++ b/sechub-notification/src/main/java/com/mercedesbenz/sechub/domain/notification/email/MockEmailRestController.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; +import jakarta.annotation.security.RolesAllowed; + /** * This is only availabe in mocked_notification profile. Interesting for * integration tests to get the emails send... diff --git a/sechub-pds-commons-core/build.gradle b/sechub-pds-commons-core/build.gradle index 2811d4b744..14e7d4f7b0 100644 --- a/sechub-pds-commons-core/build.gradle +++ b/sechub-pds-commons-core/build.gradle @@ -16,6 +16,5 @@ dependencies{ testImplementation spring_boot_dependency.junit_jupiter testImplementation spring_boot_dependency.mockito_core - testImplementation library.mockito_inline testImplementation spring_boot_dependency.hamcrest } \ No newline at end of file diff --git a/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/PDSProfiles.java b/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/PDSProfiles.java index 4aef661677..3efc9a5438 100644 --- a/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/PDSProfiles.java +++ b/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/PDSProfiles.java @@ -10,7 +10,7 @@ private PDSProfiles() { public static final String DEV = "pds_dev"; public static final String PROD = "pds_prod"; public static final String SQL_TRACE = "pds_sqltrace"; - public static final String TEST = "test"; + public static final String TEST = "pds_test"; /** * Special profile suitable for development time - will show extreme debug * information. Should never be used in production diff --git a/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoleConstants.java b/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoleConstants.java index de36914cdb..dafea1d941 100644 --- a/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoleConstants.java +++ b/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoleConstants.java @@ -2,20 +2,17 @@ package com.mercedesbenz.sechub.pds.security; /** - * Never change the string content of identifiers! Will be used for persistence - * and also inside code! + * PDS role constants without authority prefix "ROLE_"! Remark: Content is only + * used at runtime and not persisted. * * @author Albert Tregnaghi * */ public class PDSRoleConstants { - /* - * Never change the string content of identifiers! Will be used for persistence - * and also inside code! - */ - public static final String ROLE_SUPERADMIN = "ROLE_SUPERADMIN"; - public static final String ROLE_USER = "ROLE_USER"; + public static final String ROLE_SUPERADMIN = "SUPERADMIN"; + + public static final String ROLE_USER = "USER"; private PDSRoleConstants() { } diff --git a/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoles.java b/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoles.java index 566c36a3d0..3c87b5e6ab 100644 --- a/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoles.java +++ b/sechub-pds-core/src/main/java/com/mercedesbenz/sechub/pds/security/PDSRoles.java @@ -2,21 +2,18 @@ package com.mercedesbenz.sechub.pds.security; public enum PDSRoles { + USER(PDSRoleConstants.ROLE_USER), SUPERADMIN(PDSRoleConstants.ROLE_SUPERADMIN); - private String id; - - private PDSRoles(String id) { - this.id = id; - } + private String role; - public String getRoleId() { - return id; + private PDSRoles(String role) { + this.role = role; } public String getRole() { - return name(); + return role; } } diff --git a/sechub-pds/build.gradle b/sechub-pds/build.gradle index 73062f924c..71f9ceeded 100644 --- a/sechub-pds/build.gradle +++ b/sechub-pds/build.gradle @@ -12,15 +12,19 @@ plugins { dependencies { - implementation library.springboot_starter_web - implementation library.springboot_starter_data_jpa - implementation library.springboot_starter_security - implementation library.flyway - implementation library.logstashLogbackEncoder - implementation library.database_h2 - implementation library.database_postgres - implementation library.apache_commons_io - implementation(library.apache_commons_fileupload) + implementation(library.springboot_starter_web) + implementation(library.springboot_starter_data_jpa) + implementation(library.springboot_starter_security) + implementation(library.flyway) + implementation(library.logstashLogbackEncoder) + implementation(library.database_h2) + implementation(library.database_postgres) + implementation(library.apache_commons_io) + implementation(library.apache_commons_fileupload2_core) + implementation(library.apache_commons_fileupload2_jakarta) + + + api project(':sechub-pds-core') diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSExceptionHandler.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSExceptionHandler.java index b9c549425b..409d68ad79 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSExceptionHandler.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSExceptionHandler.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds; -import javax.servlet.http.HttpServletResponse; - import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; @@ -10,6 +8,8 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MaxUploadSizeExceededException; +import jakarta.servlet.http.HttpServletResponse; + @ControllerAdvice public class PDSExceptionHandler { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSServerErrorController.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSServerErrorController.java index b5e5596877..1239b878db 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSServerErrorController.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSServerErrorController.java @@ -3,9 +3,6 @@ import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +16,9 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.ServletWebRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + @RestController public class PDSServerErrorController implements ErrorController { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSSystemPropertyInjector.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSSystemPropertyInjector.java index 942c3c3af9..4e4832c586 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSSystemPropertyInjector.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/PDSSystemPropertyInjector.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds; -import javax.annotation.PostConstruct; - import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import jakarta.annotation.PostConstruct; + /** * This component injects some special PDS Spring Boot values into corresponding * JVM system properties. So we can configure those parts in our diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/batch/PDSBatchTriggerService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/batch/PDSBatchTriggerService.java index 0a73cd587d..5fa5765a36 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/batch/PDSBatchTriggerService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/batch/PDSBatchTriggerService.java @@ -4,8 +4,6 @@ import java.util.Random; import java.util.UUID; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.pds.job.PDSJobRepository; import com.mercedesbenz.sechub.pds.job.PDSJobTransactionService; +import jakarta.annotation.PostConstruct; + @Service public class PDSBatchTriggerService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSAdminConfigRestController.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSAdminConfigRestController.java index 564d30fae7..36dffb1f46 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSAdminConfigRestController.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSAdminConfigRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.config; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.http.HttpStatus; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesServerConfiguration; import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminUpdatesAutoCleanupConfiguration; +import jakarta.annotation.security.RolesAllowed; + /** * The REST API for PDS jobs * diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSConfig.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSConfig.java index 9e1b200bdc..621d8b539b 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSConfig.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSConfig.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.config; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * Global configuration entry for domain 'administration' inside database. diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSServerConfigurationService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSServerConfigurationService.java index c4a9acc62b..9ae837d6ee 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSServerConfigurationService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/config/PDSServerConfigurationService.java @@ -8,8 +8,6 @@ import java.nio.file.Paths; import java.util.List; -import javax.annotation.PostConstruct; - import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,6 +25,8 @@ import com.mercedesbenz.sechub.pds.commons.core.config.PDSProductSetup; import com.mercedesbenz.sechub.pds.commons.core.config.PDSServerConfiguration; +import jakarta.annotation.PostConstruct; + @Service public class PDSServerConfigurationService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/execution/PDSExecutionService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/execution/PDSExecutionService.java index 4c1ecb2eca..432f11d797 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/execution/PDSExecutionService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/execution/PDSExecutionService.java @@ -21,9 +21,6 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +41,9 @@ import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesMonitoringStatus; import com.mercedesbenz.sechub.pds.usecase.UseCaseSystemHandlesJobCancelRequests; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; + /** * This class is responsible for all execution queuing parts - it will also know * what currently is happening, which job is started, executed etc. But will diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSAdminJobRestController.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSAdminJobRestController.java index 4200796266..b8d4fd45f1 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSAdminJobRestController.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSAdminJobRestController.java @@ -3,8 +3,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.http.MediaType; @@ -22,6 +20,8 @@ import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesJobOutputStream; import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesJobResultOrFailureText; +import jakarta.annotation.security.RolesAllowed; + /** * The REST API for PDS jobs * diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCancelJobService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCancelJobService.java index e3442b31f0..1786e7b5fd 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCancelJobService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCancelJobService.java @@ -6,8 +6,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.pds.usecase.PDSStep; import com.mercedesbenz.sechub.pds.usecase.UseCaseUserRequestsJobCancellation; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed({ PDSRoleConstants.ROLE_USER, PDSRoleConstants.ROLE_SUPERADMIN }) public class PDSCancelJobService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCreateJobService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCreateJobService.java index 8c53533cec..56454c8081 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCreateJobService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSCreateJobService.java @@ -3,8 +3,6 @@ import java.time.LocalDateTime; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.pds.usecase.PDSStep; import com.mercedesbenz.sechub.pds.usecase.UseCaseUserCreatesJob; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed({ PDSRoleConstants.ROLE_USER, PDSRoleConstants.ROLE_SUPERADMIN }) public class PDSCreateJobService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobService.java index d84952daf4..52a85ff4fd 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobService.java @@ -8,22 +8,19 @@ import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.Objects; import java.util.UUID; -import javax.annotation.security.RolesAllowed; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload.FileItemIterator; -import org.apache.commons.fileupload.FileItemStream; -import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; -import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.fileupload.util.Streams; +import org.apache.commons.fileupload2.core.FileItemInput; +import org.apache.commons.fileupload2.core.FileItemInputIterator; +import org.apache.commons.fileupload2.core.FileUploadException; +import org.apache.commons.fileupload2.core.FileUploadSizeException; +import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.apache.commons.io.input.CountingInputStream; -import org.apache.commons.io.input.MessageDigestCalculatingInputStream; +import org.apache.commons.io.input.MessageDigestInputStream; +import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +41,9 @@ import com.mercedesbenz.sechub.pds.util.PDSArchiveSupportProvider; import com.mercedesbenz.sechub.storage.core.JobStorage; +import jakarta.annotation.security.RolesAllowed; +import jakarta.servlet.http.HttpServletRequest; + @Service @RolesAllowed({ PDSRoleConstants.ROLE_SUPERADMIN, PDSRoleConstants.ROLE_USER }) public class PDSFileUploadJobService { @@ -101,15 +101,15 @@ private void handleUploadAndProblems(UUID jobUUID, HttpServletRequest request, S startUpload(jobUUID, request, fileName); - } catch (SizeLimitExceededException sizeLimitExceededException) { + } catch (FileUploadSizeException fileUploadSizeException) { - LOG.error("Size limit reached: {}", sizeLimitExceededException.getMessage()); - throw new PDSBadRequestException("Binaries upload maximum reached. Please reduce your upload size.", sizeLimitExceededException); + LOG.error("Size limit reached: {}", fileUploadSizeException.getMessage()); + throw new PDSBadRequestException("Upload maximum reached. Please reduce your upload size.", fileUploadSizeException); - } catch (FileSizeLimitExceededException fileSizeLimitExceededException) { + } catch (SizeLimitExceededException sizeLimitExceededException) { - LOG.error("Size limit reached: {}", fileSizeLimitExceededException.getMessage()); - throw new PDSBadRequestException("Binaries upload maximum reached. Please reduce your upload file size.", fileSizeLimitExceededException); + LOG.error("Size limit reached: {}", sizeLimitExceededException.getMessage()); + throw new PDSBadRequestException("Upload maximum reached. Please reduce your upload size.", sizeLimitExceededException); } catch (UnsupportedEncodingException e) { @@ -140,7 +140,7 @@ private void startUpload(UUID jobUUID, HttpServletRequest request, String fileNa JobStorage jobStorage = storageService.getJobStorage(jobUUID); - ServletFileUpload upload = servletFileUploadFactory.create(); + JakartaServletFileUpload upload = servletFileUploadFactory.create(); long maxUploadSize = configuration.getMaxUploadSizeInBytes(); long maxUploadSizeWithHeaders = maxUploadSize + 600; // we accept 600 bytes more for header, checksum etc. @@ -174,15 +174,15 @@ private void startUpload(UUID jobUUID, HttpServletRequest request, String fileNa * * ------------------------- So please do NOT change! ------------------------- */ - FileItemIterator iterStream = upload.getItemIterator(request); + FileItemInputIterator iterStream = upload.getItemIterator(request); while (iterStream.hasNext()) { - FileItemStream item = iterStream.next(); + FileItemInput item = iterStream.next(); String fieldName = item.getFieldName(); switch (fieldName) { case MULTIPART_CHECKSUM: - try (InputStream checkSumInputStream = item.openStream()) { - checksumFromUser = Streams.asString(checkSumInputStream); + try (InputStream checkSumInputStream = item.getInputStream()) { + checksumFromUser = streamToString(checkSumInputStream); CheckSumValidationResult validationResult = checksumSupport.validateSha256Checksum(checksumFromUser); if (!validationResult.isValid()) { @@ -195,11 +195,17 @@ private void startUpload(UUID jobUUID, HttpServletRequest request, String fileNa checkSumDefinedByUser = true; break; case MULTIPART_FILE: - try (InputStream fileInputstream = item.openStream()) { + try (InputStream fileInputstream = item.getInputStream()) { MessageDigest digest = checksumSupport.createSha256MessageDigest(); - MessageDigestCalculatingInputStream messageDigestInputStream = new MessageDigestCalculatingInputStream(fileInputstream, digest); + /* @formatter:off */ + MessageDigestInputStream messageDigestInputStream = MessageDigestInputStream.builder(). + setInputStream(fileInputstream). + setMessageDigest(digest). + get(); + /* @formatter:on */ + CountingInputStream byteCountingInputStream = new CountingInputStream(messageDigestInputStream); if (fileSizeFromUser == null) { @@ -261,7 +267,7 @@ private Long getFileSize(HttpServletRequest request) { } private void assertMultipart(HttpServletRequest request) { - if (!ServletFileUpload.isMultipartContent(request)) { + if (!JakartaServletFileUpload.isMultipartContent(request)) { throw new PDSBadRequestException("The upload request did not contain multipart content"); } } @@ -288,4 +294,8 @@ private void validateFileName(String fileName) { } } } + + String streamToString(InputStream inputStream) throws IOException { + return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + } } diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobExecutionDataContentService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobExecutionDataContentService.java index 48c51f1991..ecd4a944df 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobExecutionDataContentService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobExecutionDataContentService.java @@ -7,8 +7,6 @@ import java.time.LocalDateTime; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -26,6 +24,8 @@ import com.mercedesbenz.sechub.pds.util.PDSResilientRetryExecutor; import com.mercedesbenz.sechub.pds.util.PDSResilientRetryExecutor.ExceptionThrower; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(PDSRoleConstants.ROLE_SUPERADMIN) public class PDSGetJobExecutionDataContentService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobMessagesService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobMessagesService.java index c0e6f02c92..6c61d05c85 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobMessagesService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobMessagesService.java @@ -6,8 +6,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -16,6 +14,8 @@ import com.mercedesbenz.sechub.pds.usecase.PDSStep; import com.mercedesbenz.sechub.pds.usecase.UseCaseUserFetchesJobMessages; +import jakarta.annotation.security.RolesAllowed; + @Service public class PDSGetJobMessagesService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobResultService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobResultService.java index 8a708f9c36..07acefc265 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobResultService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobResultService.java @@ -6,8 +6,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -17,6 +15,8 @@ import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesJobResultOrFailureText; import com.mercedesbenz.sechub.pds.usecase.UseCaseUserFetchesJobResult; +import jakarta.annotation.security.RolesAllowed; + @Service public class PDSGetJobResultService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobStatusService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobStatusService.java index 1ff4288665..904a407906 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobStatusService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSGetJobStatusService.java @@ -6,8 +6,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.pds.usecase.PDSStep; import com.mercedesbenz.sechub.pds.usecase.UseCaseUserFetchesJobStatus; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed({ PDSRoleConstants.ROLE_SUPERADMIN, PDSRoleConstants.ROLE_USER }) public class PDSGetJobStatusService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJob.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJob.java index 590067f358..3fccecb51e 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJob.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJob.java @@ -1,22 +1,15 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.job; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.STRING; +import java.sql.Types; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -24,6 +17,14 @@ import com.mercedesbenz.sechub.commons.model.SecHubLocalDateTimeSerializer; import com.mercedesbenz.sechub.commons.pds.data.PDSJobStatusState; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents a PDS Job which contains information about ownership, related * sechub job and also state,configuration and last but not least the result of @@ -137,16 +138,16 @@ public class PDSJob { String jsonConfiguration; @Column(name = COLUMN_RESULT) - @Type(type = "text") // why not using @Lob, because hibernate/postgres issues. see + @JdbcTypeCode(Types.LONGNVARCHAR) // why not using @Lob, because hibernate/postgres issues. see // https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 String result; @Column(name = COLUMN_ERROR_STREAM_TEXT) - @Type(type = "text") // see remarks on COLUMN_RESULT + @JdbcTypeCode(Types.LONGNVARCHAR) // see remarks on COLUMN_RESULT String errorStreamText; @Column(name = COLUMN_OUTPUT_STREAM_TEXT) - @Type(type = "text") // see remarks on COLUMN_RESULT + @JdbcTypeCode(Types.LONGNVARCHAR) // see remarks on COLUMN_RESULT String outputStreamText; @Enumerated(STRING) @@ -158,11 +159,11 @@ public class PDSJob { Integer version; @Column(name = COLUMN_MESSAGES) - @Type(type = "text") // see remarks on COLUMN_RESULT + @JdbcTypeCode(Types.LONGNVARCHAR) // see remarks on COLUMN_RESULT String messages; @Column(name = COLUMN_META_DATA) - @Type(type = "text") // see remarks on COLUMN_RESULT + @JdbcTypeCode(Types.LONGNVARCHAR) // see remarks on COLUMN_RESULT String metaDataText; public void setServerId(String serverId) { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryImpl.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryImpl.java index dc00f029c2..479ebe6e2c 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryImpl.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryImpl.java @@ -7,16 +7,16 @@ import java.util.List; import java.util.Optional; -import javax.persistence.EntityManager; -import javax.persistence.LockModeType; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - import org.springframework.beans.factory.annotation.Autowired; import com.mercedesbenz.sechub.commons.pds.data.PDSJobStatusState; import com.mercedesbenz.sechub.pds.config.PDSServerConfigurationService; +import jakarta.persistence.EntityManager; +import jakarta.persistence.LockModeType; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; + public class PDSJobRepositoryImpl implements PDSJobRepositoryCustom { /* @formatter:off */ diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRestController.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRestController.java index 8e3bee8675..b7462f25c8 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRestController.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobRestController.java @@ -3,9 +3,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; -import javax.servlet.http.HttpServletRequest; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.validation.annotation.Validated; @@ -26,6 +23,9 @@ import com.mercedesbenz.sechub.pds.usecase.UseCaseUserRequestsJobCancellation; import com.mercedesbenz.sechub.pds.usecase.UseCaseUserUploadsJobData; +import jakarta.annotation.security.RolesAllowed; +import jakarta.servlet.http.HttpServletRequest; + /** * The REST API for PDS jobs * diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobTransactionService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobTransactionService.java index f996cf6ab0..a98cf72970 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobTransactionService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSJobTransactionService.java @@ -9,8 +9,6 @@ import java.util.Set; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +25,8 @@ import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesJobMetaData; import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesJobOutputStream; +import jakarta.annotation.security.RolesAllowed; + @Service @Transactional(propagation = Propagation.REQUIRES_NEW) public class PDSJobTransactionService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSRequestJobCancellationService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSRequestJobCancellationService.java index 51e48d3b8c..89e6857048 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSRequestJobCancellationService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSRequestJobCancellationService.java @@ -6,8 +6,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.pds.util.PDSResilientRetryExecutor; import com.mercedesbenz.sechub.pds.util.PDSResilientRetryExecutor.ExceptionThrower; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed({ PDSRoleConstants.ROLE_USER, PDSRoleConstants.ROLE_SUPERADMIN }) public class PDSRequestJobCancellationService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSServletFileUploadFactory.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSServletFileUploadFactory.java index 4fc10bdb36..d11f3b242a 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSServletFileUploadFactory.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSServletFileUploadFactory.java @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.job; -import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.springframework.stereotype.Component; @Component public class PDSServletFileUploadFactory { - public ServletFileUpload create() { - return new ServletFileUpload(); + public JakartaServletFileUpload create() { + return new JakartaServletFileUpload(); } } diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSUpdateJobStreamContentService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSUpdateJobStreamContentService.java index b316a03122..2e112fff10 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSUpdateJobStreamContentService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/job/PDSUpdateJobStreamContentService.java @@ -7,8 +7,6 @@ import java.time.LocalDateTime; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.pds.util.PDSResilientRetryExecutor; import com.mercedesbenz.sechub.pds.util.PDSResilientRetryExecutor.ExceptionThrower; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(PDSRoleConstants.ROLE_SUPERADMIN) public class PDSUpdateJobStreamContentService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestController.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestController.java index 19e8501b24..39e0aa505b 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestController.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.monitoring; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.validation.annotation.Validated; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.pds.usecase.PDSStep; import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesMonitoringStatus; +import jakarta.annotation.security.RolesAllowed; + /** * The REST API for PDS jobs * diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeat.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeat.java index 15144750dd..4e37b86462 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeat.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeat.java @@ -1,19 +1,20 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.monitoring; +import java.sql.Types; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * Represents a PDS Job which contains information about ownership, related @@ -64,7 +65,7 @@ public class PDSHeartBeat { String serverId; @Column(name = COLUMN_RESULT) - @Type(type = "text") // why not using @Lob, because hibernate/postgres issues. see + @JdbcTypeCode(Types.LONGNVARCHAR) // why not using @Lob, because hibernate/postgres issues. see // https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 String clusterMemberData; diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeatTriggerService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeatTriggerService.java index 630d8191e4..9d0c3ce680 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeatTriggerService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/monitoring/PDSHeartBeatTriggerService.java @@ -5,8 +5,6 @@ import java.util.Optional; import java.util.UUID; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.pds.usecase.UseCaseAdminFetchesMonitoringStatus; import com.mercedesbenz.sechub.pds.util.PDSLocalhostDataBuilder; +import jakarta.annotation.PostConstruct; + @Service public class PDSHeartBeatTriggerService { diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/AbstractAllowPDSAPISecurityConfiguration.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/AbstractAllowPDSAPISecurityConfiguration.java deleted file mode 100644 index 9724a1d89c..0000000000 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/AbstractAllowPDSAPISecurityConfiguration.java +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: MIT -package com.mercedesbenz.sechub.pds.security; - -import static com.mercedesbenz.sechub.pds.security.PDSRoleConstants.*; - -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.http.SessionCreationPolicy; - -import com.mercedesbenz.sechub.pds.PDSAPIConstants; - -/** - * A base class for web security having access to "/api/**" when being a user or - * super admin
- *
- * Defaults: - *
    - *
  • CSRF is disabled
  • - *
  • HTTP basic enabled
  • - *
  • api/anonymous is available also when not authenticated
  • - *
  • api/job is available when authenticated and role user
  • - *
- * - */ -public abstract class AbstractAllowPDSAPISecurityConfiguration extends WebSecurityConfigurerAdapter { - // https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4 - // https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#core-services-password-encoding - - @Override - protected void configure(HttpSecurity http) throws Exception { - /* @formatter:off */ - http. - sessionManagement(). - sessionCreationPolicy(SessionCreationPolicy.STATELESS). - and(). - authorizeRequests(). - antMatchers(PDSAPIConstants.API_JOB+"**"). - hasAnyAuthority(ROLE_USER, ROLE_SUPERADMIN). - antMatchers(PDSAPIConstants.API_ADMIN+"**"). - hasAnyAuthority(ROLE_SUPERADMIN). - antMatchers(PDSAPIConstants.API_ANONYMOUS+"**"). - permitAll(). - antMatchers(PDSAPIConstants.ERROR_PAGE). - permitAll(). - antMatchers(PDSAPIConstants.ACTUATOR+"**"). - permitAll(). - /* to prevent configuration failures - I had this issue before - - * all other matchers do deny all. So if not correct - * configured nobody has access - please keep the denyAll parts - */ - antMatchers("/**"). - denyAll(). - - and(). - csrf(). - disable(). /* disable CSRF for api so we have no CSRF-TOKEN problems - POST would not work*/ - httpBasic()./* no login screen, just basic auth */ - and(). - headers(). - contentSecurityPolicy("default-src 'none'"); - - /* @formatter:on */ - } - -} \ No newline at end of file diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSAPISecurityConfiguration.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSAPISecurityConfiguration.java new file mode 100644 index 0000000000..50a8ff248c --- /dev/null +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSAPISecurityConfiguration.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.pds.security; + +import static com.mercedesbenz.sechub.pds.security.PDSRoleConstants.ROLE_SUPERADMIN; +import static com.mercedesbenz.sechub.pds.security.PDSRoleConstants.ROLE_USER; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; + +import com.mercedesbenz.sechub.pds.PDSAPIConstants; + +@Configuration +@EnableWebSecurity +public class PDSAPISecurityConfiguration { + + @Bean + public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + + /* @formatter:off */ + httpSecurity.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests((auth) -> auth. + requestMatchers(PDSAPIConstants.API_JOB + "**").hasAnyRole(ROLE_USER, ROLE_SUPERADMIN). + requestMatchers(PDSAPIConstants.API_ADMIN + "**").hasAnyRole(ROLE_USER, ROLE_SUPERADMIN). + requestMatchers(PDSAPIConstants.API_ANONYMOUS+"**").permitAll(). + requestMatchers(PDSAPIConstants.ERROR_PAGE).permitAll(). + requestMatchers(PDSAPIConstants.ACTUATOR + "**").permitAll(). + requestMatchers("/**").denyAll()) + .csrf((csrf) -> csrf.disable()) // CSRF protection disabled. The CookieServerCsrfTokenRepository does + // not work, since Spring Boot 3 + .httpBasic(Customizer.withDefaults()).headers((headers) -> headers + .contentSecurityPolicy((csp) -> csp.policyDirectives("default-src 'none'"))); + /* @formatter:on */ + + return httpSecurity.build(); + } + +} diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSAuthorityConstants.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSAuthorityConstants.java new file mode 100644 index 0000000000..9d43c7a543 --- /dev/null +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSAuthorityConstants.java @@ -0,0 +1,11 @@ +package com.mercedesbenz.sechub.pds.security; + +public class PDSAuthorityConstants { + + /** + * When it comes to differ between authorities and roles, this prefix is used. + * Roles do not have this prefix but authorities have this prefix. + */ + public static final String AUTHORITY_ROLE_PREFIX = "ROLE_"; + +} diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSSecurityConfiguration.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSSecurityConfiguration.java index bc527f2382..8f84122496 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSSecurityConfiguration.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSSecurityConfiguration.java @@ -5,20 +5,20 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.provisioning.UserDetailsManager; import com.mercedesbenz.sechub.pds.PDSMustBeDocumented; @Configuration -@EnableGlobalMethodSecurity(jsr250Enabled = true) +@EnableMethodSecurity(jsr250Enabled = true) @EnableWebSecurity @Order(1) -public class PDSSecurityConfiguration extends AbstractAllowPDSAPISecurityConfiguration { +public class PDSSecurityConfiguration { /* * TODO Albert Tregnaghi, 2020-06-18: extreme simple approach: we just allow ONE @@ -49,8 +49,7 @@ public class PDSSecurityConfiguration extends AbstractAllowPDSAPISecurityConfigu String adminApiToken; @Bean - @Override - public UserDetailsService userDetailsService() { + public UserDetailsManager userDetailsService() { /* @formatter:off */ PDSPasswordTransformer pdsPasswordTransformer = new PDSPasswordTransformer(); diff --git a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSUserContextService.java b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSUserContextService.java index a1340c5472..8ea4698313 100644 --- a/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSUserContextService.java +++ b/sechub-pds/src/main/java/com/mercedesbenz/sechub/pds/security/PDSUserContextService.java @@ -39,12 +39,13 @@ private boolean hasRole(String role) { if (authentication == null) { return false; } + String authorityForRole = PDSAuthorityConstants.AUTHORITY_ROLE_PREFIX + role; Collection authorities = authentication.getAuthorities(); for (GrantedAuthority auth : authorities) { if (auth == null) { continue; } - if (role.equals(auth.getAuthority())) { + if (authorityForRole.equals(auth.getAuthority())) { return true; } } diff --git a/sechub-pds/src/main/resources/application-pds_dev.yml b/sechub-pds/src/main/resources/application-pds_dev.yml index 043a14e69b..588f745109 100644 --- a/sechub-pds/src/main/resources/application-pds_dev.yml +++ b/sechub-pds/src/main/resources/application-pds_dev.yml @@ -1,7 +1,4 @@ # SPDX-License-Identifier: MIT -spring.profiles.include: - - pds_localserver - pds.config.file: "src/test/resources/dev-pds-config.json" sechub.initialadmin: diff --git a/sechub-pds/src/main/resources/application-pds_h2.properties b/sechub-pds/src/main/resources/application-pds_h2.yml similarity index 51% rename from sechub-pds/src/main/resources/application-pds_h2.properties rename to sechub-pds/src/main/resources/application-pds_h2.yml index 1c83c4ceae..5f09e43e36 100644 --- a/sechub-pds/src/main/resources/application-pds_h2.properties +++ b/sechub-pds/src/main/resources/application-pds_h2.yml @@ -1,4 +1,6 @@ # SPDX-License-Identifier: MIT # only used in development or demo mode - so username password does not matter... -spring.datasource.driver-class-name=org.h2.Driver -spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 +spring: + datasource: + driver-class-name: org.h2.Driver + url: jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 \ No newline at end of file diff --git a/sechub-pds/src/main/resources/application-pds_integrationtest.yaml b/sechub-pds/src/main/resources/application-pds_integrationtest.yml similarity index 96% rename from sechub-pds/src/main/resources/application-pds_integrationtest.yaml rename to sechub-pds/src/main/resources/application-pds_integrationtest.yml index 97af5e81f8..33ad5f4949 100644 --- a/sechub-pds/src/main/resources/application-pds_integrationtest.yaml +++ b/sechub-pds/src/main/resources/application-pds_integrationtest.yml @@ -1,7 +1,4 @@ # SPDX-License-Identifier: MIT -spring.profiles.include: -- pds_localserver - server: address: 127.0.0.1 diff --git a/sechub-pds/src/main/resources/application-pds_localserver.yaml b/sechub-pds/src/main/resources/application-pds_localserver.yml similarity index 99% rename from sechub-pds/src/main/resources/application-pds_localserver.yaml rename to sechub-pds/src/main/resources/application-pds_localserver.yml index 480bd2d550..5a3f471942 100644 --- a/sechub-pds/src/main/resources/application-pds_localserver.yaml +++ b/sechub-pds/src/main/resources/application-pds_localserver.yml @@ -22,4 +22,4 @@ pds: nextjob: initialdelay: 100 delay: 500 - \ No newline at end of file + \ No newline at end of file diff --git a/sechub-pds/src/main/resources/application-pds_postgres.properties b/sechub-pds/src/main/resources/application-pds_postgres.yml similarity index 54% rename from sechub-pds/src/main/resources/application-pds_postgres.properties rename to sechub-pds/src/main/resources/application-pds_postgres.yml index c072b3e1fe..d428b28107 100644 --- a/sechub-pds/src/main/resources/application-pds_postgres.properties +++ b/sechub-pds/src/main/resources/application-pds_postgres.yml @@ -2,11 +2,14 @@ ## -------------------------------------------- ## PostgreSQL setup ## -------------------------------------------- -spring.datasource.driverClassName=org.postgresql.Driver -spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect # next lines are defined for integration tests using PostgreSQL test container # for production you must change it by setting environment entries. E.g. in k8s deployment -spring.datasource.url=${POSTGRES_DB_URL} -spring.datasource.username=${POSTGRES_DB_USERNAME} -spring.datasource.password=${POSTGRES_DB_PASSWORD} \ No newline at end of file +spring: + jpa: + database-platform: org.hibernate.dialect.PostgreSQLDialect + datasource: + url: ${POSTGRES_DB_URL} + username: ${POSTGRES_DB_USERNAME} + password: ${POSTGRES_DB_PASSWORD} + driverClassName: org.postgresql.Driver \ No newline at end of file diff --git a/sechub-pds/src/main/resources/application-pds_prod.yml b/sechub-pds/src/main/resources/application-pds_prod.yml index 51a9711c70..bb29d87dfd 100644 --- a/sechub-pds/src/main/resources/application-pds_prod.yml +++ b/sechub-pds/src/main/resources/application-pds_prod.yml @@ -1,4 +1,2 @@ # SPDX-License-Identifier: MIT -spring.profiles.include: - - pds_postgres - - pds_server +# Intentionally empty. No, configuration necessary diff --git a/sechub-pds/src/main/resources/application-pds_sqltrace.properties b/sechub-pds/src/main/resources/application-pds_sqltrace.properties deleted file mode 100644 index dd667dc95d..0000000000 --- a/sechub-pds/src/main/resources/application-pds_sqltrace.properties +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: MIT - -#show sql statement -logging.level.org.hibernate.SQL=debug - -#show sql values -logging.level.org.hibernate.type.descriptor.sql=trace - -# format sql output -spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file diff --git a/sechub-pds/src/main/resources/application-pds_sqltrace.yml b/sechub-pds/src/main/resources/application-pds_sqltrace.yml new file mode 100644 index 0000000000..2a1f87ed0a --- /dev/null +++ b/sechub-pds/src/main/resources/application-pds_sqltrace.yml @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: MIT + +logging: + level: + org: + hibernate: + SQL: debug #show sql statement + type: + descriptor: + sql: trace #show sql values + +spring: + jpa: + properties: + hibernate: + format_sql: true # format sql output \ No newline at end of file diff --git a/sechub-pds/src/main/resources/application.yml b/sechub-pds/src/main/resources/application.yml index fae4b0b339..02da3b66dc 100644 --- a/sechub-pds/src/main/resources/application.yml +++ b/sechub-pds/src/main/resources/application.yml @@ -1,4 +1,5 @@ # SPDX-License-Identifier: MIT + sechub: targettype: detection: @@ -10,8 +11,14 @@ pds: diffiehellman: length: 2048 # JDK uses per default 1024, we set here to 2048 which is more secure spring: - config: - use-legacy-processing: true # see https://spring.io/blog/2020/08/14/config-file-processing-in-spring-boot-2-4 and https://stackoverflow.com/questions/64907675/including-profiles-in-spring-boot-2-4-0-version + profiles: + group: + pds_integrationtest: "pds_localserver,pds_integrationtest" + pds_debug: "pds_debug" + pds_dev: "pds_dev,pds_localserver" + pds_prod: "pds_postgres,pds_server" + #pds_test: "pds_test,pds_h2" + jackson: # https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-customize-the-jackson-objectmapper mapper: diff --git a/sechub-pds/src/main/resources/logback-spring.xml b/sechub-pds/src/main/resources/logback-spring.xml index 08dfd4043d..36e1962e00 100644 --- a/sechub-pds/src/main/resources/logback-spring.xml +++ b/sechub-pds/src/main/resources/logback-spring.xml @@ -1,4 +1,8 @@ + + + + diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSJobSchedulerSmokeSpringBootTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSJobSchedulerSmokeSpringBootTest.java index 452d08ab99..1427f3a83e 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSJobSchedulerSmokeSpringBootTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSJobSchedulerSmokeSpringBootTest.java @@ -1,14 +1,13 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; import com.mercedesbenz.sechub.pds.job.PDSJobRestController; @@ -19,9 +18,9 @@ * @author Albert Tregnaghi * */ -@RunWith(SpringRunner.class) @SpringBootTest -@TestPropertySource(locations = "classpath:application-test.properties") +@TestPropertySource(locations = "classpath:application-pds_test.yml") +@ActiveProfiles(PDSProfiles.TEST) public class PDSJobSchedulerSmokeSpringBootTest { @Autowired diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSServerErrorControllerTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSServerErrorControllerTest.java index 4791b3c659..8b2915ffa3 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSServerErrorControllerTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/PDSServerErrorControllerTest.java @@ -4,15 +4,15 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; -import javax.servlet.RequestDispatcher; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.web.servlet.error.DefaultErrorAttributes; import org.springframework.http.ResponseEntity; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + class PDSServerErrorControllerTest { private static final String TEST_ERROR_MESSAGE = "my PDS error message"; diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobServiceTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobServiceTest.java index ca949a593a..db99e85ec0 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobServiceTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSFileUploadJobServiceTest.java @@ -11,9 +11,6 @@ import java.util.Optional; import java.util.UUID; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.mock.web.MockMultipartFile; @@ -32,6 +29,9 @@ import com.mercedesbenz.sechub.storage.core.JobStorage; import com.mercedesbenz.sechub.test.TestUtil; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; + public class PDSFileUploadJobServiceTest { private static final String CONTENT_DATA = "content data"; diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryDBTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryDBTest.java index 5741260b3e..2bde98ac6e 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryDBTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRepositoryDBTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.EnumSource.Mode; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; @@ -24,7 +25,6 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; import com.mercedesbenz.sechub.commons.model.SecHubDataConfigurationTypeListParser; import com.mercedesbenz.sechub.commons.pds.data.PDSJobStatusState; @@ -38,11 +38,21 @@ import com.mercedesbenz.sechub.pds.config.PDSServerIdentifierValidator; @ActiveProfiles(PDSProfiles.TEST) -@ExtendWith(SpringExtension.class) +@ExtendWith(MockitoExtension.class) @DataJpaTest -@ContextConfiguration(classes = { PDSPathExecutableValidator.class, PDSServerIdentifierValidator.class, PDSServerConfigurationValidator.class, - PDSProductIdentifierValidator.class, PDSShutdownService.class, PDSJobRepository.class, PDSServerConfigurationService.class, - PDSJobRepositoryDBTest.SimpleTestConfiguration.class, PDSConfigurationAutoFix.class, SecHubDataConfigurationTypeListParser.class }) +/* @formatter:off */ +@ContextConfiguration(classes = { + PDSPathExecutableValidator.class, + PDSServerIdentifierValidator.class, + PDSServerConfigurationValidator.class, + PDSProductIdentifierValidator.class, + PDSJobRepository.class, + PDSShutdownService.class, + PDSConfigurationAutoFix.class, + PDSServerConfigurationService.class, + PDSJobRepositoryDBTest.SimpleTestConfiguration.class, + SecHubDataConfigurationTypeListParser.class }) +/* @formatter:on */ public class PDSJobRepositoryDBTest { @Autowired diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRestControllerMockTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRestControllerMockTest.java index 04b20408ea..6e9d04d30f 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRestControllerMockTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/job/PDSJobRestControllerMockTest.java @@ -1,18 +1,24 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.job; -import static com.mercedesbenz.sechub.test.PDSTestURLBuilder.*; -import static com.mercedesbenz.sechub.test.TestConstants.*; -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static com.mercedesbenz.sechub.test.PDSTestURLBuilder.https; +import static com.mercedesbenz.sechub.test.TestConstants.SOURCECODE_ZIP; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.util.UUID; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -25,15 +31,15 @@ import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import com.mercedesbenz.sechub.pds.PDSProfiles; -import com.mercedesbenz.sechub.pds.security.AbstractAllowPDSAPISecurityConfiguration; +import com.mercedesbenz.sechub.pds.security.PDSAPISecurityConfiguration; import com.mercedesbenz.sechub.pds.security.PDSRoleConstants; import com.mercedesbenz.sechub.test.TestPortProvider; -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @WebMvcTest(PDSJobRestController.class) /* @formatter:off */ @ContextConfiguration(classes = { @@ -44,9 +50,9 @@ PDSGetJobResultService.class, PDSRequestJobCancellationService.class, PDSGetJobStatusService.class, - PDSJobRestControllerMockTest.SimpleTestConfiguration.class }) + PDSJobRestControllerMockTest.SimpleTestConfiguration.class}) /* @formatter:on */ -@WithMockUser(authorities = PDSRoleConstants.ROLE_USER) +@WithMockUser(roles = PDSRoleConstants.ROLE_USER) @ActiveProfiles(PDSProfiles.TEST) public class PDSJobRestControllerMockTest { @@ -216,8 +222,7 @@ public void an_upload__call_calls_upload_file_service_and_returns_ok() throws Ex @TestConfiguration @Profile(PDSProfiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowPDSAPISecurityConfiguration { + public static class SimpleTestConfiguration extends PDSAPISecurityConfiguration { } - } diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestControllerMockTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestControllerMockTest.java index bf2e846a7e..fc6274309f 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestControllerMockTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAdminMonitoringRestControllerMockTest.java @@ -1,14 +1,15 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.monitoring; -import static com.mercedesbenz.sechub.test.PDSTestURLBuilder.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import static com.mercedesbenz.sechub.test.PDSTestURLBuilder.https; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; @@ -18,23 +19,23 @@ import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import com.mercedesbenz.sechub.pds.PDSProfiles; import com.mercedesbenz.sechub.pds.commons.core.PDSJSONConverter; -import com.mercedesbenz.sechub.pds.security.AbstractAllowPDSAPISecurityConfiguration; +import com.mercedesbenz.sechub.pds.security.PDSAPISecurityConfiguration; import com.mercedesbenz.sechub.pds.security.PDSRoleConstants; import com.mercedesbenz.sechub.test.TestPortProvider; -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @WebMvcTest(PDSAdminMonitoringRestController.class) /* @formatter:off */ @ContextConfiguration(classes = { PDSAdminMonitoringRestController.class, PDSAdminMonitoringRestControllerMockTest.SimpleTestConfiguration.class }) /* @formatter:on */ -@WithMockUser(authorities = PDSRoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = PDSRoleConstants.ROLE_SUPERADMIN) @ActiveProfiles(PDSProfiles.TEST) public class PDSAdminMonitoringRestControllerMockTest { @@ -48,8 +49,8 @@ public class PDSAdminMonitoringRestControllerMockTest { private PDSMonitoring result; - @Before - public void before() throws Exception { + @BeforeEach + public void beforeEach() throws Exception { /* prepare */ result = PDSMonitoringTestDataUtil.createTestMonitoringWith2ClusterMembers(); } @@ -77,7 +78,7 @@ public void a_get_execution_status_calls_executionService_and_returns_result() t @TestConfiguration @Profile(PDSProfiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowPDSAPISecurityConfiguration { + public static class SimpleTestConfiguration extends PDSAPISecurityConfiguration { } diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAnonymousCheckAliveRestControllerMockTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAnonymousCheckAliveRestControllerMockTest.java index cb3c277791..c46d4bad52 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAnonymousCheckAliveRestControllerMockTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSAnonymousCheckAliveRestControllerMockTest.java @@ -19,7 +19,7 @@ import org.springframework.test.web.servlet.MockMvc; import com.mercedesbenz.sechub.pds.PDSProfiles; -import com.mercedesbenz.sechub.pds.security.AbstractAllowPDSAPISecurityConfiguration; +import com.mercedesbenz.sechub.pds.security.PDSAPISecurityConfiguration; import com.mercedesbenz.sechub.pds.security.PDSRoleConstants; import com.mercedesbenz.sechub.test.TestPortProvider; @@ -30,7 +30,7 @@ PDSAnonymousCheckAliveRestController.class, PDSAnonymousCheckAliveRestControllerMockTest.SimpleTestConfiguration.class }) /* @formatter:on */ -@WithMockUser(authorities = PDSRoleConstants.ROLE_SUPERADMIN) +@WithMockUser(roles = PDSRoleConstants.ROLE_SUPERADMIN) @ActiveProfiles(PDSProfiles.TEST) public class PDSAnonymousCheckAliveRestControllerMockTest { @@ -74,7 +74,7 @@ public void calling_check_alive_get_returns_HTTP_200() throws Exception { @TestConfiguration @Profile(PDSProfiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowPDSAPISecurityConfiguration { + public static class SimpleTestConfiguration extends PDSAPISecurityConfiguration { } diff --git a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSPDSHeartBeatRepositoryDBTest.java b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSPDSHeartBeatRepositoryDBTest.java index 41818be274..db76f93d44 100644 --- a/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSPDSHeartBeatRepositoryDBTest.java +++ b/sechub-pds/src/test/java/com/mercedesbenz/sechub/pds/monitoring/PDSPDSHeartBeatRepositoryDBTest.java @@ -1,15 +1,17 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.pds.monitoring; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.LocalDateTime; import java.util.Optional; import java.util.UUID; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; @@ -17,7 +19,6 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; import com.mercedesbenz.sechub.commons.model.SecHubDataConfigurationTypeListParser; import com.mercedesbenz.sechub.pds.PDSProfiles; @@ -31,7 +32,6 @@ import com.mercedesbenz.sechub.pds.job.PDSJobRepository; @ActiveProfiles({ PDSProfiles.TEST/* , PDSProfiles.SQL_TRACE */ }) -@RunWith(SpringRunner.class) @DataJpaTest @ContextConfiguration(classes = { PDSPathExecutableValidator.class, PDSServerIdentifierValidator.class, PDSServerConfigurationValidator.class, PDSProductIdentifierValidator.class, PDSShutdownService.class, PDSJobRepository.class, PDSServerConfigurationService.class, @@ -43,8 +43,8 @@ public class PDSPDSHeartBeatRepositoryDBTest { @Autowired private PDSHeartBeatRepository repositoryToTest; - @Before - public void before() { + @BeforeEach + public void beforeEach() { } @Test diff --git a/sechub-pds/src/test/resources/application-pds_test.yml b/sechub-pds/src/test/resources/application-pds_test.yml new file mode 100644 index 0000000000..043d894194 --- /dev/null +++ b/sechub-pds/src/test/resources/application-pds_test.yml @@ -0,0 +1,30 @@ +# SPDX-License-Identifier: MIT + +pds: + server: + baseurl: http://localhost + config: + scheduling: + enable: false # scheduler turned off in normal junit tests + heartbeat: + enable: false # heartbeat turned off in normal junit tests + file: "./src/test/resources/config/pds-config-test.json" + storage: + sharedvolume: + upload: + dir: temp +# security credentials for tests + techuser: + userid: test-techuser + apitoken: apitoken-just-for-testing-only + admin: + userid: test-admin + apitoken: apitoken-just-for-testing-only +spring: + jpa: + hibernate: + ddl-auto: create-drop # always drop and recreate ddl for tests + datasource: + initialization-mode: never + flyway: + enabled: false # Flyway turned off for testing! \ No newline at end of file diff --git a/sechub-pds/src/test/resources/application-test.properties b/sechub-pds/src/test/resources/application-test.properties deleted file mode 100644 index 174bc4fb4c..0000000000 --- a/sechub-pds/src/test/resources/application-test.properties +++ /dev/null @@ -1,24 +0,0 @@ -# SPDX-License-Identifier: MIT -spring.profiles.active=pds_h2,test -pds.server.baseurl=http://localhost - -# scheduler + heartbeat turned off in normal junit tests -pds.config.scheduling.enable=false -pds.config.heartbeat.enable=false - -#pds.storage.sharedvolume.upload.dir=temp -pds.config.file=./src/test/resources/config/pds-config-test.json - -# always drop and recreate ddl for tests -spring.jpa.hibernate.ddl-auto=create-drop -spring.datasource.initialization-mode=never -# Flyway turned off for testing! -spring.flyway.enabled=false - -# security credentials for tests -pds.techuser.userid=test-techuser -pds.techuser.apitoken=apitoken-just-for-testing-only -pds.admin.userid=test-admin -pds.admin.apitoken=apitoken-just-for-testing-only - -pds.storage.sharedvolume.upload.dir=temp diff --git a/sechub-scan-product-checkmarx/src/main/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutor.java b/sechub-scan-product-checkmarx/src/main/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutor.java index 2d1ad26948..41a45ef00b 100644 --- a/sechub-scan-product-checkmarx/src/main/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutor.java +++ b/sechub-scan-product-checkmarx/src/main/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutor.java @@ -9,8 +9,6 @@ import java.util.List; import java.util.UUID; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +39,8 @@ import com.mercedesbenz.sechub.storage.core.JobStorage; import com.mercedesbenz.sechub.storage.core.StorageService; +import jakarta.annotation.PostConstruct; + /** * This class is marked as deprecated. Why? The product executor shall no longer * be used in production. We use the PDS solution for checkmarx which does a @@ -53,6 +53,7 @@ * @author Albert Tregnaghi * */ + @Service @Deprecated public class CheckmarxProductExecutor extends AbstractProductExecutor { diff --git a/sechub-scan-product-checkmarx/src/test/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutorMockTest.java b/sechub-scan-product-checkmarx/src/test/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutorMockTest.java index 4668e8d742..d92f8701d7 100644 --- a/sechub-scan-product-checkmarx/src/test/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutorMockTest.java +++ b/sechub-scan-product-checkmarx/src/test/java/com/mercedesbenz/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutorMockTest.java @@ -1,9 +1,13 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.product.checkmarx; -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +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; @@ -46,7 +50,7 @@ import com.mercedesbenz.sechub.domain.scan.resolve.NetworkTargetResolver; import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfiguration; import com.mercedesbenz.sechub.sharedkernel.mapping.MappingIdentifier; import com.mercedesbenz.sechub.sharedkernel.metadata.DefaultMetaDataInspector; @@ -213,7 +217,7 @@ private SecHubExecutionContext createExecutionContextForPseudoCodeScan() { @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } diff --git a/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/AbstractPDSProductExecutor.java b/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/AbstractPDSProductExecutor.java index 6476fbfb94..bb2fed1f9a 100644 --- a/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/AbstractPDSProductExecutor.java +++ b/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/AbstractPDSProductExecutor.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; import com.mercedesbenz.sechub.sharedkernel.metadata.MetaDataInspector; +import jakarta.annotation.PostConstruct; + public abstract class AbstractPDSProductExecutor extends AbstractProductExecutor implements CanceableProductExecutor { private static final Logger LOG = LoggerFactory.getLogger(AbstractPDSProductExecutor.class); diff --git a/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/PDSAdapterConfigurationStrategy.java b/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/PDSAdapterConfigurationStrategy.java index 52579d6acf..7693ce64bd 100644 --- a/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/PDSAdapterConfigurationStrategy.java +++ b/sechub-scan-product-pds/src/main/java/com/mercedesbenz/sechub/domain/scan/product/pds/PDSAdapterConfigurationStrategy.java @@ -239,19 +239,21 @@ private void handleBinariesFileSize(PDSAdapterConfigurator pdsConfigurable) { private void handleCommonParts(B configBuilder) { /* standard configuration */ - /* - * TODO Albert Tregnaghi, 2022-05-20: We should move the "configBuilder" parts - * to another configuration strategy and use this in every adapter not only for - * PDS. But we cannot do this as long as the install setup is different and - * there are still some static setup - like for checkmarx - and not all - * available by configuration support. - */ - configBuilder - .configure(new DefaultAdapterConfigurationStrategy(strategyConfig.productExecutorData, strategyConfig.configSupport, strategyConfig.scanType)); + + /* @formatter:off */ + configBuilder.configure(new DefaultAdapterConfigurationStrategy( + strategyConfig.productExecutorData, + strategyConfig.configSupport, + strategyConfig.scanType)); + configBuilder.setTrustAllCertificates(strategyConfig.configSupport.isTrustAllCertificatesEnabled()); - configBuilder.setTimeToWaitForNextCheckOperationInMilliseconds( - strategyConfig.configSupport.getTimeToWaitForNextCheckOperationInMilliseconds(strategyConfig.installSetup)); - configBuilder.setTimeOutInMinutes(strategyConfig.configSupport.getTimeoutInMinutes(strategyConfig.installSetup)); + + int timeToWaitInMilliseconds = strategyConfig.configSupport.getTimeToWaitForNextCheckOperationInMilliseconds(strategyConfig.installSetup); + configBuilder.setTimeToWaitForNextCheckOperationInMilliseconds(timeToWaitInMilliseconds); + + int timeOutInMinutes = strategyConfig.configSupport.getTimeoutInMinutes(strategyConfig.installSetup); + configBuilder.setTimeOutInMinutes(timeOutInMinutes); + /* @formatter:on */ } } diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/ProjectDataDeleteService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/ProjectDataDeleteService.java index 01185b9719..2580f42855 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/ProjectDataDeleteService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/ProjectDataDeleteService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan; -import javax.transaction.Transactional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +16,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminDeleteProject; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.transaction.Transactional; + /** * This service will delete all project data from domain scan in ONE * transaction. diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanAccess.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanAccess.java index b7f9bd0366..275075f9f6 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanAccess.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanAccess.java @@ -3,12 +3,12 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * This entity represents only the access for users to a project. As long as diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanDeleteAnyAccessToProjectAtAllService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanDeleteAnyAccessToProjectAtAllService.java index 2fd7a2090f..b099a76029 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanDeleteAnyAccessToProjectAtAllService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanDeleteAnyAccessToProjectAtAllService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.access; -import javax.transaction.Transactional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +11,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminDeleteProject; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.transaction.Transactional; + @Service public class ScanDeleteAnyAccessToProjectAtAllService { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanRevokeUserAccessAtAllService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanRevokeUserAccessAtAllService.java index 14e9a49afb..a8b77d4bf9 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanRevokeUserAccessAtAllService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/access/ScanRevokeUserAccessAtAllService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.access; -import javax.transaction.Transactional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +10,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminDeletesUser; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.transaction.Transactional; + @Service public class ScanRevokeUserAccessAtAllService { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataRestController.java index 3dbd422592..2569aeecc9 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataRestController.java @@ -5,9 +5,6 @@ import java.io.OutputStream; import java.util.UUID; -import javax.annotation.security.RolesAllowed; -import javax.servlet.http.HttpServletResponse; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +22,9 @@ import com.mercedesbenz.sechub.sharedkernel.logging.LogSanitizer; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminDownloadsFullScanDataForJob; +import jakarta.annotation.security.RolesAllowed; +import jakarta.servlet.http.HttpServletResponse; + @RestController @EnableAutoConfiguration @RequestMapping(APIConstants.API_ADMINISTRATION) diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataService.java index 772e19a0f6..099e44d1bd 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/admin/FullScanDataService.java @@ -4,8 +4,6 @@ import java.util.List; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +18,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminDownloadsFullScanDataForJob; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) public class FullScanDataService { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanConfig.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanConfig.java index 2691864470..29d2be710d 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanConfig.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanConfig.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.config; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * Global configuration entry for domain 'scan' inside database. Contains only diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanMapping.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanMapping.java index 2bfdad183c..a1ceefcb5e 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanMapping.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/config/ScanMapping.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.config; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; @Entity @Table(name = ScanMapping.TABLE_NAME) diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLog.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLog.java index a786b8b32d..5421d14a78 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLog.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLog.java @@ -1,19 +1,13 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.log; +import java.sql.Types; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; @@ -22,6 +16,13 @@ import com.mercedesbenz.sechub.commons.model.SecHubLocalDateTimeDeserializer; import com.mercedesbenz.sechub.commons.model.SecHubLocalDateTimeSerializer; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents a mapping between a scan, job and and job configuration. So its an * INTERNAL information @@ -82,7 +83,7 @@ public class ProjectScanLog { @Column(name = COLUMN_SECHUB_JOB_UUID, nullable = false, columnDefinition = "UUID") UUID sechubJobUUID; - @Type(type = "text") + @JdbcTypeCode(Types.LONGVARCHAR) @Column(name = COLUMN_CONFIG) String config; diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java index 9811639161..140f21e2f2 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java @@ -5,9 +5,9 @@ import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; public class ProjectScanLogRepositoryImpl implements ProjectScanLogRepositoryCustom { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogService.java index d7eec6a2fd..38d5476e28 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ProjectScanLogService.java @@ -6,8 +6,6 @@ import java.util.Optional; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +16,8 @@ import com.mercedesbenz.sechub.sharedkernel.RoleConstants; import com.mercedesbenz.sechub.sharedkernel.logging.LogSanitizer; +import jakarta.annotation.security.RolesAllowed; + @Service public class ProjectScanLogService { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ScanLogRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ScanLogRestController.java index 15c8da4d49..81a25102bd 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ScanLogRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/log/ScanLogRestController.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.http.MediaType; @@ -18,6 +16,8 @@ import com.mercedesbenz.sechub.sharedkernel.Step; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminShowsScanLogsForProject; +import jakarta.annotation.security.RolesAllowed; + @RestController @EnableAutoConfiguration @RequestMapping(APIConstants.API_ADMINISTRATION + "project/{projectId}") // API like https://developer.github.com/v3/issues/labels/#create-a-label diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/AbstractProductExecutionService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/AbstractProductExecutionService.java index 1df1f50e01..563df7d67d 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/AbstractProductExecutionService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/AbstractProductExecutionService.java @@ -9,8 +9,6 @@ import java.util.List; import java.util.UUID; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +23,8 @@ import com.mercedesbenz.sechub.sharedkernel.UUIDTraceLogID; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfiguration; +import jakarta.annotation.PostConstruct; + /** * Abstract base implementation for all product execution services. Service will * execute registered executors and persist the results automatic diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResult.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResult.java index 62653cb8f9..852f85f747 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResult.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResult.java @@ -1,25 +1,26 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.product; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.*; +import java.sql.Types; import java.time.LocalDateTime; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import com.mercedesbenz.sechub.domain.scan.product.config.ProductExecutorConfigInfo; import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents a product result for a SecHub job UUID * @@ -81,8 +82,9 @@ public UUID getUUID() { @Column(name = COLUMN_PRODUCT_IDENTIFIER, nullable = false) ProductIdentifier productIdentifier; - @Type(type = "text") // why not using @Lob, because hibernate/postgres issues. see - // https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 + @JdbcTypeCode(Types.LONGVARCHAR) // why not using @Lob, because hibernate/postgres issues. see + // https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 + // In Hibernate 6: https://stackoverflow.com/a/74602072 @Column(name = COLUMN_RESULT) private String result; @@ -102,14 +104,14 @@ public UUID getUUID() { @Column(name = COLUMN_ENDED) // remark: we setup hibernate to use UTC settings - see application.properties LocalDateTime ended; - @Type(type = "text") + @JdbcTypeCode(Types.LONGVARCHAR) @Column(name = COLUMN_META_DATA, nullable = true) String metaData; @Column(name = COLUMN_PRODUCT_CONFIG_UUID, nullable = true, columnDefinition = "UUID") // when null it means we got (old) entries or SERECO fallback UUID productExecutorConfigUUID; - @Type(type = "text") + @JdbcTypeCode(Types.LONGVARCHAR) @Column(name = COLUMN_MESSAGES, nullable = true) String messages; diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultRepositoryImpl.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultRepositoryImpl.java index 4d2d2b55dd..aa71a0e094 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultRepositoryImpl.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultRepositoryImpl.java @@ -8,13 +8,13 @@ import java.util.List; import java.util.UUID; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - import com.mercedesbenz.sechub.domain.scan.product.config.ProductExecutorConfigInfo; import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; + public class ProductResultRepositoryImpl implements ProductResultRepositoryCustom { /* @formatter:off */ public static final String JPQL_STRING_SELECT_BY_SECHUB_JOB_UUID_AND_PRODUCT_IDS = diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultService.java index 10e85aeaf0..ffb34b9adc 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/ProductResultService.java @@ -4,8 +4,6 @@ import java.util.List; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.Example; @@ -20,6 +18,8 @@ import com.mercedesbenz.sechub.sharedkernel.messaging.MessageDataKeys; import com.mercedesbenz.sechub.sharedkernel.messaging.MessageID; +import jakarta.annotation.security.RolesAllowed; + @Service public class ProductResultService { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutionProfileService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutionProfileService.java index 6f7576db90..ba8c509368 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutionProfileService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutionProfileService.java @@ -8,8 +8,6 @@ import java.util.Optional; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminCreatesExecutionProfile; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutorConfigService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutorConfigService.java index 69ba05645b..72c885f004 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutorConfigService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/CreateProductExecutorConfigService.java @@ -5,8 +5,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminCreatesExecutorConfiguration; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutionProfileService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutionProfileService.java index fd56467e42..7f085d7f9f 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutionProfileService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutionProfileService.java @@ -5,8 +5,6 @@ import java.util.Optional; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminDeletesExecutionProfile; import com.mercedesbenz.sechub.sharedkernel.validation.ProductExecutionProfileIdValidation; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutorConfigService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutorConfigService.java index 1cd5d02767..e3bf80b716 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutorConfigService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/DeleteProductExecutorConfigService.java @@ -4,8 +4,6 @@ import java.util.Optional; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminDeletesExecutorConfiguration; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileListService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileListService.java index 689a1531b6..cadafa94d2 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileListService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileListService.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesExecutionProfileList; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileService.java index 7a263c0d6d..74bf65d611 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutionProfileService.java @@ -5,8 +5,6 @@ import java.util.Optional; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; @@ -19,6 +17,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesExecutionProfile; import com.mercedesbenz.sechub.sharedkernel.validation.ProductExecutionProfileIdValidation; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigListService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigListService.java index 82afe6d1d6..ab88be46fa 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigListService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigListService.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesExecutorConfigurationList; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigService.java index 711a88451e..5aca2784dd 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/FetchProductExecutorConfigService.java @@ -4,8 +4,6 @@ import java.util.Optional; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; @@ -17,6 +15,8 @@ import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesExecutorConfiguration; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfile.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfile.java index a26d523ec2..1b7e299ebc 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfile.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfile.java @@ -5,21 +5,21 @@ import java.util.Objects; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.Id; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.Table; -import javax.persistence.Version; - import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; +import jakarta.persistence.CascadeType; +import jakarta.persistence.CollectionTable; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents a product execution profile * diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfileRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfileRestController.java index ff44f120cd..4f60e3d71d 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfileRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutionProfileRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.product.config; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -29,6 +27,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminUnassignsExecutionProfileFromProject; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminUpdatesExecutionProfile; +import jakarta.annotation.security.RolesAllowed; + /** * The REST API for project executor config done by a super admin. * diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfig.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfig.java index 2190e675b5..0b72638059 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfig.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfig.java @@ -1,31 +1,31 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.product.config; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.*; import java.util.HashSet; import java.util.Set; import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Convert; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToMany; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.GenericGenerator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; +import jakarta.persistence.Basic; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Convert; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents a product executor configuration * diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigRestController.java index 4fb17d6f64..30a9f00b5c 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigRestController.java @@ -3,8 +3,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -29,6 +27,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminFetchesExecutorConfigurationList; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminUpdatesExecutorConfig; +import jakarta.annotation.security.RolesAllowed; + /** * The REST API for project executor config done by a super admin. * diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigSetupJpaConverter.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigSetupJpaConverter.java index cfce3b3ed4..02ded1abfc 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigSetupJpaConverter.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/ProductExecutorConfigSetupJpaConverter.java @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.product.config; -import javax.persistence.AttributeConverter; +import jakarta.persistence.AttributeConverter; public class ProductExecutorConfigSetupJpaConverter implements AttributeConverter { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutionProfileService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutionProfileService.java index 4a9b96058a..d323124c46 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutionProfileService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutionProfileService.java @@ -7,9 +7,6 @@ import java.util.Set; import java.util.UUID; -import javax.annotation.security.RolesAllowed; -import javax.transaction.Transactional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +24,9 @@ import com.mercedesbenz.sechub.sharedkernel.validation.ProductExecutionProfileIdValidation; import com.mercedesbenz.sechub.sharedkernel.validation.ProjectIdValidation; +import jakarta.annotation.security.RolesAllowed; +import jakarta.transaction.Transactional; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutorConfigService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutorConfigService.java index 427400258d..3d12d5caf8 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutorConfigService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/product/config/UpdateProductExecutorConfigService.java @@ -6,8 +6,6 @@ import java.util.Optional; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.logging.AuditLogService; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.config.UseCaseAdminUpdatesExecutorConfig; +import jakarta.annotation.security.RolesAllowed; + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) @Profile(Profiles.ADMIN_ACCESS) @Service diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveJobDataListValidationImpl.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveJobDataListValidationImpl.java index 830fa18c84..2cfa3c7dc6 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveJobDataListValidationImpl.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveJobDataListValidationImpl.java @@ -3,8 +3,6 @@ import java.util.List; -import javax.annotation.PostConstruct; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -14,6 +12,8 @@ import com.mercedesbenz.sechub.sharedkernel.validation.ValidationContext; import com.mercedesbenz.sechub.sharedkernel.validation.ValidationResult; +import jakarta.annotation.PostConstruct; + @Component public class FalsePositiveJobDataListValidationImpl extends AbstractValidation implements FalsePositiveJobDataListValidation { diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveRestController.java index 15cdffcdb2..a67ad05c86 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/FalsePositiveRestController.java @@ -3,8 +3,6 @@ import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.http.MediaType; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserMarksFalsePositivesForJob; import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserUnmarksFalsePositives; +import jakarta.annotation.security.RolesAllowed; + /** * The rest API for project false positive handling - API centric * diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java index ff4d23d9ca..b27366dc5f 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java @@ -1,18 +1,19 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.project; -import static com.mercedesbenz.sechub.sharedkernel.util.Assert.*; +import static com.mercedesbenz.sechub.sharedkernel.util.Assert.notNull; import java.io.Serializable; +import java.sql.Types; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.Table; -import javax.persistence.Version; +import org.hibernate.annotations.JdbcTypeCode; -import org.hibernate.annotations.Type; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * Configuration entry for project configuration inside database (domain scan). @@ -46,7 +47,7 @@ public class ScanProjectConfig { @Column(name = "VERSION") Integer version; - @Type(type = "text") + @JdbcTypeCode(Types.LONGVARCHAR) @Column(name = COLUMN_DATA) String data; diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectMockDataRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectMockDataRestController.java index 437de25c0e..5be28399e8 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectMockDataRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectMockDataRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.project; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -20,6 +18,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserDefinesProjectMockdata; import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserRetrievesProjectMockdata; +import jakarta.annotation.security.RolesAllowed; + /** * The rest API for project mockdata * diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReport.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReport.java index d843cd132d..3681c227c2 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReport.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReport.java @@ -1,24 +1,25 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.scan.report; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.STRING; +import java.sql.Types; import java.time.LocalDateTime; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import com.mercedesbenz.sechub.commons.model.TrafficLight; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + @Entity @Table(name = ScanReport.TABLE_NAME) public class ScanReport { @@ -57,8 +58,9 @@ public class ScanReport { UUID secHubJobUUID; // no referential integrity - only as information for report collecting // necessary - @Type(type = "text") // why not using @Lob, because hibernate/postgres issues. see - // https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 + @JdbcTypeCode(Types.LONGVARCHAR) // why not using @Lob, because hibernate/postgres issues. see + // https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 + // In Hibernate 6: https://stackoverflow.com/a/74602072 @Column(name = COLUMN_RESULT) private String result; diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReportRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReportRestController.java index 1314a6d988..43796a1a77 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReportRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/report/ScanReportRestController.java @@ -4,8 +4,6 @@ import java.util.Map; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.http.MediaType; @@ -23,6 +21,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserDownloadsSpdxJobReport; import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserStartsSynchronousScanByClient; +import jakarta.annotation.security.RolesAllowed; + /** * The rest API for job scheduling. It shall be same obvious like * https://developer.github.com/v3/issues/labels/ diff --git a/sechub-schedule/build.gradle b/sechub-schedule/build.gradle index ba664b67f0..8428acda80 100644 --- a/sechub-schedule/build.gradle +++ b/sechub-schedule/build.gradle @@ -8,7 +8,8 @@ dependencies { implementation(library.apache_commons_io) - implementation(library.apache_commons_fileupload) + implementation(library.apache_commons_fileupload2_core) + implementation(library.apache_commons_fileupload2_jakarta) implementation project(':sechub-shared-kernel') diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/IntegrationTestSchedulerService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/IntegrationTestSchedulerService.java index 4236da0f3d..74bf15dd12 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/IntegrationTestSchedulerService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/IntegrationTestSchedulerService.java @@ -6,9 +6,6 @@ import java.util.Optional; import java.util.UUID; -import javax.persistence.EntityManager; -import javax.persistence.Query; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; @@ -21,6 +18,9 @@ import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.error.NotFoundException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Query; + @Service @Profile(Profiles.INTEGRATIONTEST) public class IntegrationTestSchedulerService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ScheduleAssertService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ScheduleAssertService.java index 51263d0e79..15b8dcd4c0 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ScheduleAssertService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ScheduleAssertService.java @@ -4,8 +4,6 @@ import java.util.Optional; import java.util.UUID; -import javax.validation.Valid; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.validation.AssertValidation; import com.mercedesbenz.sechub.sharedkernel.validation.ProjectIdValidation; +import jakarta.validation.Valid; + @Service public class ScheduleAssertService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadService.java index 5dd261d5e7..c5d3e90a29 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadService.java @@ -1,28 +1,28 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule; -import static com.mercedesbenz.sechub.commons.core.CommonConstants.*; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.FILENAME_BINARIES_TAR; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.FILENAME_BINARIES_TAR_CHECKSUM; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.FILENAME_BINARIES_TAR_FILESIZE; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.FILE_SIZE_HEADER_FIELD_NAME; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.annotation.security.RolesAllowed; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload.FileItemIterator; -import org.apache.commons.fileupload.FileItemStream; -import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; -import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.fileupload.util.Streams; +import org.apache.commons.fileupload2.core.FileItemInput; +import org.apache.commons.fileupload2.core.FileItemInputIterator; +import org.apache.commons.fileupload2.core.FileUploadException; +import org.apache.commons.fileupload2.core.FileUploadSizeException; +import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.apache.commons.io.input.CountingInputStream; -import org.apache.commons.io.input.MessageDigestCalculatingInputStream; +import org.apache.commons.io.input.MessageDigestInputStream; +import org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -49,6 +49,9 @@ import com.mercedesbenz.sechub.storage.core.JobStorage; import com.mercedesbenz.sechub.storage.core.StorageService; +import jakarta.annotation.security.RolesAllowed; +import jakarta.servlet.http.HttpServletRequest; + @Service @RolesAllowed(RoleConstants.ROLE_USER) public class SchedulerBinariesUploadService { @@ -108,10 +111,10 @@ private void handleUploadAndProblems(String projectId, UUID jobUUID, HttpServlet startUpload(projectId, jobUUID, request); - } catch (SizeLimitExceededException sizeLimitExceededException) { + } catch (FileUploadSizeException fileUploadSizeException) { - LOG.error("Size limit reached: {}", sizeLimitExceededException.getMessage()); - throw new BadRequestException("Binaries upload maximum reached. Please reduce your upload size.", sizeLimitExceededException); + LOG.error("Size limit reached: {}", fileUploadSizeException.getMessage()); + throw new BadRequestException("Binaries upload maximum reached. Please reduce your upload size.", fileUploadSizeException); } catch (FileSizeLimitExceededException fileSizeLimitExceededException) { @@ -145,7 +148,7 @@ private void startUpload(String projectId, UUID jobUUID, HttpServletRequest requ JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); - ServletFileUpload upload = servletFileUploadFactory.create(); + JakartaServletFileUpload upload = servletFileUploadFactory.create(); long maxUploadSize = configuration.getMaxUploadSizeInBytes(); long maxUploadSizeWithHeaders = maxUploadSize + 600; // we accept 600 bytes more for header, checksum etc. @@ -179,15 +182,15 @@ private void startUpload(String projectId, UUID jobUUID, HttpServletRequest requ * * ------------------------- So please do NOT change! ------------------------- */ - FileItemIterator iterStream = upload.getItemIterator(request); + FileItemInputIterator iterStream = upload.getItemIterator(request); while (iterStream.hasNext()) { - FileItemStream item = iterStream.next(); + FileItemInput item = iterStream.next(); String fieldName = item.getFieldName(); switch (fieldName) { case PARAMETER_CHECKSUM: - try (InputStream checkSumInputStream = item.openStream()) { - checksumFromUser = Streams.asString(checkSumInputStream); + try (InputStream checkSumInputStream = item.getInputStream()) { + checksumFromUser = streamToString(checkSumInputStream); assertion.assertIsValidSha256Checksum(checksumFromUser); @@ -197,11 +200,17 @@ private void startUpload(String projectId, UUID jobUUID, HttpServletRequest requ checkSumDefinedByUser = true; break; case PARAMETER_FILE: - try (InputStream fileInputstream = item.openStream()) { + try (InputStream fileInputstream = item.getInputStream()) { MessageDigest digest = checkSumSupport.createSha256MessageDigest(); - MessageDigestCalculatingInputStream messageDigestInputStream = new MessageDigestCalculatingInputStream(fileInputstream, digest); + /* @formatter:off */ + MessageDigestInputStream messageDigestInputStream = MessageDigestInputStream.builder(). + setInputStream(fileInputstream). + setMessageDigest(digest). + get(); + /* @formatter:on */ + CountingInputStream byteCountingInputStream = new CountingInputStream(messageDigestInputStream); jobStorage.store(FILENAME_BINARIES_TAR, byteCountingInputStream, binaryFileSizeFromUser); @@ -286,9 +295,13 @@ private long getBinaryFileSize(HttpServletRequest request) { return binaryFileSizeFromUser; } + String streamToString(InputStream inputStream) throws IOException { + return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + } + private void assertMultipart(HttpServletRequest request) { - if (!ServletFileUpload.isMultipartContent(request)) { - throw new BadRequestException("The binary upload request did not contain multipart content"); + if (!JakartaServletFileUpload.isMultipartContent(request)) { + throw new BadRequestException("The upload request did not contain multipart content"); } } diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobService.java index 6667ad9c64..e7e21d75be 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobService.java @@ -7,8 +7,6 @@ import java.util.Map; import java.util.UUID; -import javax.validation.Valid; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -32,6 +30,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserCreatesNewJob; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.validation.Valid; + @Service public class SchedulerCreateJobService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerJobBatchTriggerService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerJobBatchTriggerService.java index fcc128f267..409079f820 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerJobBatchTriggerService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerJobBatchTriggerService.java @@ -6,8 +6,6 @@ import java.util.concurrent.ThreadLocalRandom; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +23,8 @@ import com.mercedesbenz.sechub.sharedkernel.monitoring.SystemMonitorService; import com.mercedesbenz.sechub.sharedkernel.usecases.job.UseCaseSchedulerStartsJob; +import jakarta.annotation.PostConstruct; + @Service public class SchedulerJobBatchTriggerService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestController.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestController.java index 8a7eb982c1..ac5f880df9 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestController.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestController.java @@ -1,13 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.*; + import java.util.Map; import java.util.UUID; -import javax.annotation.security.RolesAllowed; -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.validation.annotation.Validated; @@ -36,6 +34,10 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserUploadsBinaries; import com.mercedesbenz.sechub.sharedkernel.usecases.user.execute.UseCaseUserUploadsSourceCode; +import jakarta.annotation.security.RolesAllowed; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + /** * The rest api for job scheduling. It shall be same obvious like * https://developer.github.com/v3/issues/labels/ @@ -90,12 +92,12 @@ public SchedulerResult createJob(@PathVariable("projectId") String projectId, @R @UseCaseUserUploadsSourceCode(@Step(number=1,name="Authenticated REST call",needsRestDoc=true)) @RequestMapping(path = "/job/{jobUUID}/sourcecode", method = RequestMethod.POST) public void uploadSourceCode( - @PathVariable("projectId") String projectId, - @PathVariable("jobUUID") UUID jobUUID, - @RequestParam("file") MultipartFile file, - @RequestParam("checkSum") String checkSum - ) { - sourcecodeUploadService.uploadSourceCode(projectId, jobUUID, file, checkSum); + @PathVariable("projectId") String projectId, + @PathVariable("jobUUID") UUID jobUUID, + @RequestParam(MULTIPART_FILE) MultipartFile file, + @RequestParam(MULTIPART_CHECKSUM) String checkSum + ) { + sourcecodeUploadService.uploadSourceCode(projectId, jobUUID, file, checkSum); } /* @formatter:on */ @@ -104,8 +106,10 @@ public void uploadSourceCode( @UseCaseUserUploadsBinaries(@Step(number=1,name="Authenticated REST call" ,needsRestDoc=true)) @RolesAllowed(RoleConstants.ROLE_USER) @RequestMapping(path = "/job/{jobUUID}/binaries", method = RequestMethod.POST) - public void uploadBinaries( @PathVariable("projectId") String projectId, - @PathVariable("jobUUID") UUID jobUUID, HttpServletRequest request) throws Exception { + public void uploadBinaries( + @PathVariable("projectId") String projectId, + @PathVariable("jobUUID") UUID jobUUID, + HttpServletRequest request) throws Exception { binariesUploadService.uploadBinaries(projectId, jobUUID, request); } /* @formatter:on */ diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadService.java index 72b92f8952..a9a250f6dc 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadService.java @@ -9,8 +9,6 @@ import java.time.LocalDateTime; import java.util.UUID; -import javax.annotation.security.RolesAllowed; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +39,8 @@ import com.mercedesbenz.sechub.storage.core.JobStorage; import com.mercedesbenz.sechub.storage.core.StorageService; +import jakarta.annotation.security.RolesAllowed; + @Service @RolesAllowed(RoleConstants.ROLE_USER) public class SchedulerSourcecodeUploadService { @@ -85,6 +85,7 @@ public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, /* assert */ assertion.assertIsValidProjectId(projectId); assertion.assertIsValidJobUUID(jobUUID); + assertion.assertIsValidSha256Checksum(checkSum); notNull(file, "file may not be null!"); diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ServletFileUploadFactory.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ServletFileUploadFactory.java index dfb963d0cb..36c910cf1d 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ServletFileUploadFactory.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/ServletFileUploadFactory.java @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule; -import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.springframework.stereotype.Component; @Component public class ServletFileUploadFactory { - public ServletFileUpload create() { - return new ServletFileUpload(); + public JakartaServletFileUpload create() { + return new JakartaServletFileUpload(); } } \ No newline at end of file diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleAccess.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleAccess.java index 8b0ac06ff1..577210e991 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleAccess.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleAccess.java @@ -3,12 +3,12 @@ import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * This entity represents only the access for users to a project. As long as diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleDeleteAllProjectAcessService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleDeleteAllProjectAcessService.java index 1e34fda6e0..1113c3555b 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleDeleteAllProjectAcessService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleDeleteAllProjectAcessService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule.access; -import javax.transaction.Transactional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +10,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.project.UseCaseAdminDeleteProject; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.transaction.Transactional; + @Service public class ScheduleDeleteAllProjectAcessService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleRevokeUserAccessAtAllService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleRevokeUserAccessAtAllService.java index fdb5cbbc5c..dd5549eec8 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleRevokeUserAccessAtAllService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/access/ScheduleRevokeUserAccessAtAllService.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule.access; -import javax.transaction.Transactional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +10,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.admin.user.UseCaseAdminDeletesUser; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.transaction.Transactional; + @Service public class ScheduleRevokeUserAccessAtAllService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerConfig.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerConfig.java index 87d19efedb..44c24ea42c 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerConfig.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerConfig.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule.config; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * Global configuration entry for domain 'schedule' inside database. Contains diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerProjectConfig.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerProjectConfig.java index 3a81c5bc8d..6478f638da 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerProjectConfig.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/config/SchedulerProjectConfig.java @@ -3,14 +3,14 @@ import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import com.mercedesbenz.sechub.sharedkernel.project.ProjectAccessLevel; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Configuration entry for scheduler project configuration data inside database. * Here we store some project specific data. diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJob.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJob.java index a7cc38a0af..049b57deed 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJob.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJob.java @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule.job; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.*; import java.time.LocalDateTime; import java.util.HashSet; @@ -9,16 +9,6 @@ import java.util.Set; import java.util.UUID; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.GenericGenerator; import com.mercedesbenz.sechub.commons.model.ModuleGroup; @@ -26,6 +16,16 @@ import com.mercedesbenz.sechub.commons.model.job.ExecutionResult; import com.mercedesbenz.sechub.commons.model.job.ExecutionState; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents a JOB in SecHub. We did not name it as Job because of Spring batch * has already a Job class which did confuse. diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobData.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobData.java index 3870fe14c9..1a471e3dd6 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobData.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobData.java @@ -5,12 +5,12 @@ import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.IdClass; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * Represents additional (internal) JOB data in SecHub. diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobSpecifications.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobSpecifications.java index 8f254f9971..f0e070c855 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobSpecifications.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/ScheduleSecHubJobSpecifications.java @@ -5,14 +5,14 @@ import java.util.List; import java.util.Map; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; -import javax.persistence.criteria.Subquery; - import org.springframework.data.jpa.domain.Specification; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; +import jakarta.persistence.criteria.Subquery; + public class ScheduleSecHubJobSpecifications { public static Specification hasProjectIdAndData(String projectId, Map wantedDataEntries) { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobFactory.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobFactory.java index 31e36549e9..b04e116171 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobFactory.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobFactory.java @@ -6,8 +6,6 @@ import java.time.LocalDateTime; import java.util.Set; -import javax.validation.Valid; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +19,8 @@ import com.mercedesbenz.sechub.sharedkernel.UserContextService; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfiguration; +import jakarta.validation.Valid; + @Component public class SecHubJobFactory { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobInfoForUserService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobInfoForUserService.java index 2a74fcb0c3..c4ad924ea9 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobInfoForUserService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobInfoForUserService.java @@ -4,8 +4,6 @@ import java.util.Map; import java.util.Optional; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +27,8 @@ import com.mercedesbenz.sechub.sharedkernel.error.BadRequestException; import com.mercedesbenz.sechub.sharedkernel.usecases.job.UseCaseUserListsJobsForProject; +import jakarta.annotation.PostConstruct; + @Service public class SecHubJobInfoForUserService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepository.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepository.java index d11a3186ac..ce642399fc 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepository.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepository.java @@ -27,7 +27,7 @@ public interface SecHubJobRepository extends JpaRepository findAllRunningJobsStartedBefore(@Param("untilLocalDateTime") LocalDateTime untilLocalDateTime); @Query(value = "SELECT COUNT(t) FROM " + ScheduleSecHubJob.CLASS_NAME + " t where t." + PROPERTY_EXECUTION_STATE - + " is :executionState", nativeQuery = false) + + " = :executionState", nativeQuery = false) public long countJobsInExecutionState(@Param("executionState") ExecutionState state); @Transactional diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepositoryImpl.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepositoryImpl.java index bf5393853f..e3b270f350 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepositoryImpl.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/job/SecHubJobRepositoryImpl.java @@ -6,14 +6,14 @@ import java.util.Optional; import java.util.UUID; -import javax.persistence.EntityManager; -import javax.persistence.LockModeType; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - import com.mercedesbenz.sechub.commons.model.job.ExecutionState; import com.mercedesbenz.sechub.sharedkernel.jpa.TypedQuerySupport; +import jakarta.persistence.EntityManager; +import jakarta.persistence.LockModeType; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; + public class SecHubJobRepositoryImpl implements SecHubJobRepositoryCustom { private static final String PARAM_UUID = "p_uuid"; diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhiteListUpdateService.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhiteListUpdateService.java index aff09bb1ec..9d2af51ad5 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhiteListUpdateService.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhiteListUpdateService.java @@ -4,8 +4,6 @@ import java.net.URI; import java.util.Set; -import javax.transaction.Transactional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +11,8 @@ import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; +import jakarta.transaction.Transactional; + @Service public class ProjectWhiteListUpdateService { diff --git a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhitelistEntry.java b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhitelistEntry.java index a0fab341f7..b0bbb89b4a 100644 --- a/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhitelistEntry.java +++ b/sechub-schedule/src/main/java/com/mercedesbenz/sechub/domain/schedule/whitelist/ProjectWhitelistEntry.java @@ -4,12 +4,12 @@ import java.io.Serializable; import java.net.URI; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.Table; -import javax.persistence.Version; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.persistence.Version; /** * This entity represents only the whitelist uri entries for a project diff --git a/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadServiceTest.java b/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadServiceTest.java index 3b43603131..d8e10a3810 100644 --- a/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadServiceTest.java +++ b/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerBinariesUploadServiceTest.java @@ -1,23 +1,26 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule; -import static com.mercedesbenz.sechub.commons.core.CommonConstants.*; -import static com.mercedesbenz.sechub.test.JUnitAssertionAddon.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; +import static com.mercedesbenz.sechub.commons.core.CommonConstants.FILE_SIZE_HEADER_FIELD_NAME; +import static com.mercedesbenz.sechub.test.JUnitAssertionAddon.assertThrowsExceptionContainingMessage; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.security.MessageDigest; import java.util.UUID; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload.FileItemIterator; -import org.apache.commons.fileupload.FileItemStream; -import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload2.core.FileItemInput; +import org.apache.commons.fileupload2.core.FileItemInputIterator; +import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -35,6 +38,9 @@ import com.mercedesbenz.sechub.storage.core.JobStorage; import com.mercedesbenz.sechub.storage.core.StorageService; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; + public class SchedulerBinariesUploadServiceTest { private static final String PROJECT1 = "project1"; @@ -98,7 +104,7 @@ void when_illegal_content_bad_request_returned() throws Exception { when(httpRequest.getMethod()).thenReturn("POST"); when(httpRequest.getContentType()).thenReturn("multipart/"); when(httpRequest.getInputStream()).thenReturn(inputStream); - when(servletFileUploadFactory.create()).thenReturn(new ServletFileUpload()); + when(servletFileUploadFactory.create()).thenReturn(new JakartaServletFileUpload()); String numberOfBytes = String.valueOf(fileContent.getBytes().length); when(httpRequest.getHeader(FILE_SIZE_HEADER_FIELD_NAME)).thenReturn(numberOfBytes); @@ -173,7 +179,7 @@ void when_x_binary_header_field_is_greater_than_max_upload_size_in_bytes() throw when(httpRequest.getMethod()).thenReturn("POST"); when(httpRequest.getContentType()).thenReturn("multipart/"); when(httpRequest.getHeader(FILE_SIZE_HEADER_FIELD_NAME)).thenReturn("611"); // Add 600 bytes for headers. - when(servletFileUploadFactory.create()).thenReturn(new ServletFileUpload()); + when(servletFileUploadFactory.create()).thenReturn(new JakartaServletFileUpload()); when(configuration.getMaxUploadSizeInBytes()).thenReturn((long) 10); @@ -200,24 +206,25 @@ void upload_done_but_checksumfailure_will_send_upload_event() throws Exception { when(configuration.getMaxUploadSizeInBytes()).thenReturn((long) 612); - ServletFileUpload upload = mock(ServletFileUpload.class); + JakartaServletFileUpload upload = mock(JakartaServletFileUpload.class); when(servletFileUploadFactory.create()).thenReturn(upload); - FileItemIterator itemIterator = mock(FileItemIterator.class); - FileItemStream checksumItemStream = mock(FileItemStream.class); - FileItemStream fileItemStream = mock(FileItemStream.class); + FileItemInputIterator itemIterator = mock(FileItemInputIterator.class); + FileItemInput checksumItemStream = mock(FileItemInput.class); + FileItemInput fileItemStream = mock(FileItemInput.class); when(itemIterator.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false); when(itemIterator.next()).thenReturn(fileItemStream).thenReturn(checksumItemStream); - when(fileItemStream.openStream()).thenReturn(input); + when(fileItemStream.getInputStream()).thenReturn(input); when(fileItemStream.getFieldName()).thenReturn("file"); when(checksumItemStream.getFieldName()).thenReturn("checkSum"); - when(checksumItemStream.openStream()).thenReturn(new ByteArrayInputStream("12345".getBytes())); + when(checksumItemStream.getInputStream()).thenReturn(new ByteArrayInputStream("12345".getBytes())); when(upload.getItemIterator(httpRequest)).thenReturn(itemIterator); when(checkSumSupport.convertMessageDigestToHex(any())).thenReturn("1234"); + when(checkSumSupport.createSha256MessageDigest()).thenReturn(MessageDigest.getInstance("SHA-256")); /* execute + test (checksum failure) */ assertThrowsExceptionContainingMessage(BadRequestException.class, "Binaries checksum check failed", diff --git a/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestControllerMockTest.java b/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestControllerMockTest.java index d29763e3b7..00627015ed 100644 --- a/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestControllerMockTest.java +++ b/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerRestControllerMockTest.java @@ -1,24 +1,27 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule; -import static com.mercedesbenz.sechub.test.RestDocPathParameter.*; -import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static com.mercedesbenz.sechub.test.RestDocPathParameter.JOB_UUID; +import static com.mercedesbenz.sechub.test.RestDocPathParameter.PROJECT_ID; +import static com.mercedesbenz.sechub.test.SecHubTestURLBuilder.https; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.io.InputStream; import java.time.LocalDateTime; import java.util.Optional; import java.util.UUID; -import javax.validation.ValidationException; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -31,7 +34,6 @@ import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import com.mercedesbenz.sechub.commons.model.TrafficLight; @@ -44,12 +46,13 @@ import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobInfoForUserService; import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobRepository; import com.mercedesbenz.sechub.sharedkernel.Profiles; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfiguration; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfigurationValidator; import com.mercedesbenz.sechub.test.TestPortProvider; -@RunWith(SpringRunner.class) +import jakarta.validation.ValidationException; + @WebMvcTest(SchedulerRestController.class) @ContextConfiguration(classes = { SchedulerRestController.class, SchedulerRestControllerMockTest.SimpleTestConfiguration.class }) @WithMockUser @@ -188,7 +191,7 @@ public UUID getUUID() { /* execute + test @formatter:off */ this.mockMvc.perform( multipart(https(PORT_USED). - buildUploadSourceCodeUrl(PROJECT_ID.pathElement(), JOB_UUID.pathElement()) ,PROJECT1_ID,randomUUID). + buildUploadSourceCodeUrl(PROJECT_ID.pathElement(), JOB_UUID.pathElement()), PROJECT1_ID, randomUUID). file(file1). param("checkSum", "mychecksum") ); @@ -229,8 +232,8 @@ public void scheduling_a_sechub_configuration_having_no_api_version_set__fails_H /* @formatter:on */ } - @Before - public void before() { + @BeforeEach + public void beforeEach() { randomUUID = UUID.randomUUID(); project1 = mock(ScheduleAccess.class); @@ -245,7 +248,7 @@ public void before() { @TestConfiguration @Profile(Profiles.TEST) @EnableAutoConfiguration - public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + public static class SimpleTestConfiguration extends AbstractSecHubAPISecurityConfiguration { } } diff --git a/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadServiceTest.java b/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadServiceTest.java index d111c29393..1d2ab963a9 100644 --- a/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadServiceTest.java +++ b/sechub-schedule/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSourcecodeUploadServiceTest.java @@ -5,6 +5,7 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.io.IOException; import java.util.UUID; import org.junit.jupiter.api.BeforeEach; @@ -39,6 +40,7 @@ public class SchedulerSourcecodeUploadServiceTest { private UUID randomUuid; private ScheduleAssertService mockedAssertService; private MultipartFile file; + private String checkSum = "mychecksum"; private JobStorage storage; private ArchiveSupport mockedArchiveSupport; @@ -47,7 +49,7 @@ public class SchedulerSourcecodeUploadServiceTest { private DomainMessageService domainMessageService; @BeforeEach - void beforeEach() { + void beforeEach() throws IOException { randomUuid = UUID.randomUUID(); checkSumSupport = mock(CheckSumSupport.class); @@ -97,7 +99,7 @@ void when_zipfile_is_empty_a_bad_request_400_is_thrown_even_when_zipfile_validat when(file.getSize()).thenReturn(fileSize); /* execute + test */ - assertThrows(BadRequestException.class, () -> serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum")); + assertThrows(BadRequestException.class, () -> serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, checkSum)); /* test */ assertNoUploadEvent(); @@ -113,7 +115,7 @@ void when_checksum_correct_and_is_zip__correct_no_failure() { when(configuration.isZipValidationEnabled()).thenReturn(true); /* execute */ - serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum"); + serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, checkSum); } @Test @@ -126,7 +128,7 @@ void when_checksum_is_NOT_correct_but_valid_zipfile_throws_404() { when(configuration.isZipValidationEnabled()).thenReturn(false); /* execute + test */ - assertThrows(NotAcceptableException.class, () -> serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum")); + assertThrows(NotAcceptableException.class, () -> serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, checkSum)); /* test */ assertNoUploadEvent(); @@ -142,7 +144,7 @@ void when_checksum_is_NOT_correct_but_valid_zipfile_but_checksum_validation_is_d when(configuration.isZipValidationEnabled()).thenReturn(true); /* execute + test (no exception) */ - serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum"); + serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, checkSum); /* test */ assertUploadEvent(); @@ -158,7 +160,7 @@ void when_checksum_is_correct_but_NOT_valid_zipfile_but_zip_validation_is_disabl when(configuration.isZipValidationEnabled()).thenReturn(false); /* execute + test (no exception) */ - serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum"); + serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, checkSum); /* test */ assertUploadEvent(); @@ -174,7 +176,7 @@ void when_checksum_is_correct_but_not_valid_zipfile_throws_404() { when(configuration.isZipValidationEnabled()).thenReturn(true); /* execute + test */ - assertThrows(NotAcceptableException.class, () -> serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum")); + assertThrows(NotAcceptableException.class, () -> serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, checkSum)); } private void assertNoUploadEvent() { diff --git a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/ImporterRegistry.java b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/ImporterRegistry.java index 4362c9b051..67e36d7667 100644 --- a/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/ImporterRegistry.java +++ b/sechub-sereco/src/main/java/com/mercedesbenz/sechub/sereco/ImporterRegistry.java @@ -4,8 +4,6 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +11,8 @@ import com.mercedesbenz.sechub.sereco.importer.ProductResultImporter; +import jakarta.annotation.PostConstruct; + @Component public class ImporterRegistry { diff --git a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/IntegrationTestServerRestController.java b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/IntegrationTestServerRestController.java index 6750eff5b3..350537abe0 100644 --- a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/IntegrationTestServerRestController.java +++ b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/IntegrationTestServerRestController.java @@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController; import com.mercedesbenz.sechub.sharedkernel.APIConstants; +import com.mercedesbenz.sechub.sharedkernel.AuthorityConstants; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.UserContextService; import com.mercedesbenz.sechub.sharedkernel.autocleanup.IntegrationTestAutoCleanupResultInspector; @@ -176,13 +177,15 @@ public void logInfo(@RequestBody String text) { public boolean checkRole(@PathVariable("role") String role) { String authories = userContextService.getAuthories(); String userId = userContextService.getUserId(); + LOG.info("Integration test server wants to know if current user '{}' has role '{}'", userId, role); + boolean hasRole = false; if (authories != null) { - String authRole = "ROLE_" + role.toUpperCase(); - hasRole = authories.indexOf(authRole) != -1; + String authority = AuthorityConstants.AUTHORITY_ROLE_PREFIX + role.toUpperCase(); + hasRole = authories.indexOf(authority) != -1; - LOG.debug("Check if authRole '{}' contained in authorities '{}'", authRole, authories); + LOG.debug("Check if authRole '{}' contained in authorities '{}'", authority, authories); } else { LOG.info("No authorities found - return false"); } diff --git a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubExceptionHandler.java b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubExceptionHandler.java index 45e9407772..c3eedde018 100644 --- a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubExceptionHandler.java +++ b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubExceptionHandler.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.server.core; -import javax.servlet.http.HttpServletResponse; - import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; @@ -15,6 +13,8 @@ import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonLocation; +import jakarta.servlet.http.HttpServletResponse; + @ControllerAdvice public class SecHubExceptionHandler { diff --git a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubHttpStatusRequestRejectedHandler.java b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubHttpStatusRequestRejectedHandler.java index 818b691874..9a9cabe84d 100644 --- a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubHttpStatusRequestRejectedHandler.java +++ b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecHubHttpStatusRequestRejectedHandler.java @@ -3,9 +3,6 @@ import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.catalina.connector.RequestFacade; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,6 +13,9 @@ import com.mercedesbenz.sechub.sharedkernel.logging.SecurityLogService; import com.mercedesbenz.sechub.sharedkernel.logging.SecurityLogType; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + /** * A special request reject handler which logs client IP adresses into security * log diff --git a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecurityLogFilter.java b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecurityLogFilter.java index d8f72468ba..cf66bb0e3c 100644 --- a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecurityLogFilter.java +++ b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/SecurityLogFilter.java @@ -5,14 +5,6 @@ import java.util.HashMap; import java.util.Map; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; @@ -22,6 +14,14 @@ import com.mercedesbenz.sechub.sharedkernel.logging.DefaultSecurityLogService; import com.mercedesbenz.sechub.sharedkernel.logging.SecurityLogType; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + /** * Special HTTP filter component - will log client errors to security log * diff --git a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerErrorController.java b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerErrorController.java index fced20532b..961336a1bf 100644 --- a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerErrorController.java +++ b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerErrorController.java @@ -3,9 +3,6 @@ import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +18,9 @@ import com.mercedesbenz.sechub.sharedkernel.MustBeDocumented; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + @RestController public class ServerErrorController implements ErrorController { diff --git a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerInfoAdministrationRestController.java b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerInfoAdministrationRestController.java index aed49787ff..693a3a12f8 100644 --- a/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerInfoAdministrationRestController.java +++ b/sechub-server-core/src/main/java/com/mercedesbenz/sechub/server/core/ServerInfoAdministrationRestController.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.server.core; -import javax.annotation.security.RolesAllowed; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Profile; @@ -18,6 +16,8 @@ import com.mercedesbenz.sechub.sharedkernel.Step; import com.mercedesbenz.sechub.sharedkernel.usecases.admin.status.UseCaseAdminFetchesServerRuntimeData; +import jakarta.annotation.security.RolesAllowed; + @RestController @EnableAutoConfiguration @Profile({ Profiles.ADMIN_ACCESS }) diff --git a/sechub-server-core/src/test/java/com/mercedesbenz/sechub/server/core/ServerErrorControllerTest.java b/sechub-server-core/src/test/java/com/mercedesbenz/sechub/server/core/ServerErrorControllerTest.java index 472dcd01cf..14e1abf119 100644 --- a/sechub-server-core/src/test/java/com/mercedesbenz/sechub/server/core/ServerErrorControllerTest.java +++ b/sechub-server-core/src/test/java/com/mercedesbenz/sechub/server/core/ServerErrorControllerTest.java @@ -9,10 +9,6 @@ import java.util.Iterator; import java.util.List; -import javax.servlet.RequestDispatcher; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.web.servlet.error.DefaultErrorAttributes; @@ -22,6 +18,10 @@ import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + class ServerErrorControllerTest { private static final String TEST_ERROR_MESSAGE = "my SecHub error message"; diff --git a/sechub-server/build.gradle b/sechub-server/build.gradle index 80c715e957..47a2e1ed1b 100644 --- a/sechub-server/build.gradle +++ b/sechub-server/build.gradle @@ -16,7 +16,8 @@ dependencies { implementation project(':sechub-adapter') // necessary because of adapter mocking factory methods implementation(library.flyway) - implementation(library.apache_commons_fileupload) + implementation(library.apache_commons_fileupload2_core) + implementation(library.apache_commons_fileupload2_jakarta) testImplementation project(':sechub-testframework') } diff --git a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/IntegrationTestServerWebSecurityConfiguration.java b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/IntegrationTestServerWebSecurityConfiguration.java index fec89125fb..7cdd277f37 100644 --- a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/IntegrationTestServerWebSecurityConfiguration.java +++ b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/IntegrationTestServerWebSecurityConfiguration.java @@ -1,26 +1,26 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.server; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.annotation.Order; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import com.mercedesbenz.sechub.sharedkernel.Profiles; @Configuration -@EnableGlobalMethodSecurity(jsr250Enabled = true) +@EnableMethodSecurity(jsr250Enabled = true) @EnableWebSecurity @Order(4000) @Profile(Profiles.INTEGRATIONTEST) -public class IntegrationTestServerWebSecurityConfiguration extends WebSecurityConfigurerAdapter { +public class IntegrationTestServerWebSecurityConfiguration { - @Override - public void configure(WebSecurity web) { - /* api for integration test is always allowed */ - web.ignoring().antMatchers("api/integrationtest/*"); + @Bean + public WebSecurityCustomizer ignoreIntegrationtestAPI(HttpSecurity httpSecurity) throws Exception { + return (web) -> web.ignoring().requestMatchers("api/integrationtest/*"); } } diff --git a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptor.java b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptor.java index 09a1089c4f..602528fcda 100644 --- a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptor.java +++ b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptor.java @@ -3,9 +3,6 @@ import java.util.UUID; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -14,6 +11,9 @@ import com.mercedesbenz.sechub.sharedkernel.APIConstants; import com.mercedesbenz.sechub.sharedkernel.LogConstants; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + public class SecHubServerMDCAsyncHandlerInterceptor implements AsyncHandlerInterceptor { private static final Logger LOG = LoggerFactory.getLogger(SecHubServerMDCAsyncHandlerInterceptor.class); diff --git a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerSecurityConfiguration.java b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerSecurityConfiguration.java index 379eeed6f2..89e7773d1a 100644 --- a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerSecurityConfiguration.java +++ b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubServerSecurityConfiguration.java @@ -3,15 +3,15 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractSecHubAPISecurityConfiguration; @Configuration -@EnableGlobalMethodSecurity(jsr250Enabled = true) +@EnableMethodSecurity(jsr250Enabled = true) @EnableWebSecurity @Order(1) -public class SecHubServerSecurityConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { +public class SecHubServerSecurityConfiguration extends AbstractSecHubAPISecurityConfiguration { } \ No newline at end of file diff --git a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubSystemPropertyInjector.java b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubSystemPropertyInjector.java index 73dd77ac4e..9bf1c8ffa1 100644 --- a/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubSystemPropertyInjector.java +++ b/sechub-server/src/main/java/com/mercedesbenz/sechub/server/SecHubSystemPropertyInjector.java @@ -1,13 +1,13 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.server; -import javax.annotation.PostConstruct; - import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import com.mercedesbenz.sechub.sharedkernel.MustBeDocumented; +import jakarta.annotation.PostConstruct; + /** * This component injects some special SecHub Spring Boot values into * corresponding JVM system properties. So we can configure those parts in our diff --git a/sechub-server/src/main/resources/application-dev.yml b/sechub-server/src/main/resources/application-dev.yml index ad1a4527ea..5e9f68612a 100644 --- a/sechub-server/src/main/resources/application-dev.yml +++ b/sechub-server/src/main/resources/application-dev.yml @@ -1,9 +1,4 @@ # SPDX-License-Identifier: MIT -spring.profiles.include: - - localserver - - initial_admin_predefined - - admin_access - sechub.initialadmin: userid: sechubadm email: sechubadm@example.org diff --git a/sechub-server/src/main/resources/application-integrationtest.yml b/sechub-server/src/main/resources/application-integrationtest.yml index 082ce8677e..73055354e3 100644 --- a/sechub-server/src/main/resources/application-integrationtest.yml +++ b/sechub-server/src/main/resources/application-integrationtest.yml @@ -1,9 +1,4 @@ # SPDX-License-Identifier: MIT -spring.profiles.include: -- localserver -- initial_admin_static -- mocked_notifications -- admin_access server: address: 127.0.0.1 diff --git a/sechub-server/src/main/resources/application-prod.yml b/sechub-server/src/main/resources/application-prod.yml index 64fff3a054..548d2d447d 100644 --- a/sechub-server/src/main/resources/application-prod.yml +++ b/sechub-server/src/main/resources/application-prod.yml @@ -1,6 +1 @@ # SPDX-License-Identifier: MIT -spring.profiles.include: - - postgres - - initial_admin_created - - real_products - - server diff --git a/sechub-server/src/main/resources/application.yml b/sechub-server/src/main/resources/application.yml index c994eee90f..fbd990afe8 100644 --- a/sechub-server/src/main/resources/application.yml +++ b/sechub-server/src/main/resources/application.yml @@ -8,10 +8,15 @@ sechub: security: diffiehellman: length: 2048 # JDK uses per default 1024, we set here to 2048 which is more secure - + spring: - config: - use-legacy-processing: true # see https://spring.io/blog/2020/08/14/config-file-processing-in-spring-boot-2-4 and https://stackoverflow.com/questions/64907675/including-profiles-in-spring-boot-2-4-0-version + profiles: + group: + prod: "server, initial_admin_created,real_products, postgres" + dev: "localserver, initial_admin_predefined, admin_access" + integrationtest: "localserver,initial_admin_static,mocked_notifications,admin_access" + test: "mocked_products,mocked_notifications,h2,test" + jackson: # https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-customize-the-jackson-objectmapper mapper: diff --git a/sechub-server/src/main/resources/logback-spring.xml b/sechub-server/src/main/resources/logback-spring.xml index 08dfd4043d..763b30380f 100644 --- a/sechub-server/src/main/resources/logback-spring.xml +++ b/sechub-server/src/main/resources/logback-spring.xml @@ -1,4 +1,5 @@ + diff --git a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/scan/resolve/TargetResolverServiceSpringBootTest.java b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/scan/resolve/TargetResolverServiceSpringBootTest.java index b4679c5762..807a6d6491 100644 --- a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/scan/resolve/TargetResolverServiceSpringBootTest.java +++ b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/scan/resolve/TargetResolverServiceSpringBootTest.java @@ -7,15 +7,15 @@ import java.net.InetAddress; import java.net.URI; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; import com.mercedesbenz.sechub.domain.scan.NetworkTarget; import com.mercedesbenz.sechub.domain.scan.NetworkTargetType; +import com.mercedesbenz.sechub.sharedkernel.Profiles; /** * Inside application-test.properties we have defined strategies, which will @@ -26,9 +26,9 @@ * @author Albert Tregnaghi * */ -@RunWith(SpringRunner.class) @SpringBootTest -@TestPropertySource(locations = "classpath:application-test.properties") +@TestPropertySource(locations = "classpath:application-test.yml") +@ActiveProfiles(Profiles.TEST) public class TargetResolverServiceSpringBootTest { @Autowired diff --git a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobServiceSpringBootTest.java b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobServiceSpringBootTest.java index 63196c79eb..3e4a046ffa 100644 --- a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobServiceSpringBootTest.java +++ b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerCreateJobServiceSpringBootTest.java @@ -1,34 +1,33 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.Optional; import java.util.UUID; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; import com.mercedesbenz.sechub.domain.schedule.job.ScheduleSecHubJob; import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobFactory; import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobRepository; +import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfiguration; import com.mercedesbenz.sechub.sharedkernel.error.NotFoundException; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; -import com.mercedesbenz.sechub.test.junit4.ExpectedExceptionFactory; -@RunWith(SpringRunner.class) @SpringBootTest -@TestPropertySource(locations = "classpath:application-test.properties") +@TestPropertySource(locations = "classpath:application-test.yml") +@ActiveProfiles(Profiles.TEST) public class SchedulerCreateJobServiceSpringBootTest { private static final String PROJECT_ID = "project1"; @@ -54,11 +53,8 @@ public class SchedulerCreateJobServiceSpringBootTest { private String projectUUID = "projectId1"; - @Rule - public ExpectedException expectedException = ExpectedExceptionFactory.none(); - - @Before - public void before() { + @BeforeEach + public void beforeEach() { jobUUID = UUID.randomUUID(); nextJob = mock(ScheduleSecHubJob.class); configuration = mock(SecHubConfiguration.class); @@ -75,28 +71,31 @@ public void before() { when(jobRepository.nextJobIdToExecuteFirstInFirstOut()).thenReturn(Optional.of(jobUUID)); } - @Test(expected = NotFoundException.class) // spring boot tests with Rule "ExpectedException" not working. + @Test public void scheduling_a_new_job_to_an_unexisting_project_throws_NOT_FOUND_exception() { - /* execute */ - serviceToTest.createJob("a-project-not-existing", configuration); + /* execute + test */ + Assertions.assertThrows(NotFoundException.class, () -> { + serviceToTest.createJob("a-project-not-existing", configuration); + }); } - @Test(expected = NotFoundException.class) + @Test public void no_access_entry__scheduling_a_configuration__will_throw_not_found_exception() { - /* execute */ - serviceToTest.createJob(PROJECT_ID, configuration); + /* execute + test */ + Assertions.assertThrows(NotFoundException.class, () -> { + serviceToTest.createJob(PROJECT_ID, configuration); + }); } @Test public void configuration_having_no_project_gets_project_from_URL() { - /* test (later) */ - expectedException.expect(NotFoundException.class); - /* prepare */ when(jobRepository.save(nextJob)).thenReturn(nextJob); - /* execute */ - serviceToTest.createJob(PROJECT_ID, configuration); + /* execute + test */ + Assertions.assertThrows(NotFoundException.class, () -> { + serviceToTest.createJob(PROJECT_ID, configuration); + }); } } diff --git a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerGetJobStatusServiceTest.java b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerGetJobStatusServiceTest.java index d5015189cc..d3d9bf2433 100644 --- a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerGetJobStatusServiceTest.java +++ b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerGetJobStatusServiceTest.java @@ -1,35 +1,34 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.schedule; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.Optional; import java.util.UUID; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; import com.mercedesbenz.sechub.domain.schedule.access.ScheduleAccessRepository; import com.mercedesbenz.sechub.domain.schedule.job.ScheduleSecHubJob; import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobFactory; import com.mercedesbenz.sechub.domain.schedule.job.SecHubJobRepository; +import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.configuration.SecHubConfiguration; import com.mercedesbenz.sechub.sharedkernel.error.NotFoundException; import com.mercedesbenz.sechub.sharedkernel.validation.UserInputAssertion; -import com.mercedesbenz.sechub.test.junit4.ExpectedExceptionFactory; -@RunWith(SpringRunner.class) @SpringBootTest -@TestPropertySource(locations = "classpath:application-test.properties") +@TestPropertySource(locations = "classpath:application-test.yml") +@ActiveProfiles(Profiles.TEST) public class SchedulerGetJobStatusServiceTest { private static final String PROJECT_ID = "project1"; @@ -58,11 +57,8 @@ public class SchedulerGetJobStatusServiceTest { private String projectUUID = "projectId1"; - @Rule - public ExpectedException expectedException = ExpectedExceptionFactory.none(); - - @Before - public void before() { + @BeforeEach + public void beforeEach() { jobUUID = UUID.randomUUID(); job = mock(ScheduleSecHubJob.class); configuration = mock(SecHubConfiguration.class); @@ -75,23 +71,31 @@ public void before() { when(jobFactory.createJob(eq(configuration))).thenReturn(job); } - @Test(expected = NotFoundException.class) // spring boot tests with Rule "ExpectedException" not working. + @Test public void get_a_job_status_from_an_unexisting_project_throws_NOT_FOUND_exception() { - /* execute */ + /* prepare */ UUID jobUUID = UUID.randomUUID(); when(jobRepository.findById(jobUUID)).thenReturn(Optional.of(mock(ScheduleSecHubJob.class)));// should not be necessary, but to + + /* execute + test */ // prevent dependency to call // hierachy... we simulate job can be // found - serviceToTest.getJobStatus("a-project-not-existing", jobUUID); + Assertions.assertThrows(NotFoundException.class, () -> { + serviceToTest.getJobStatus("a-project-not-existing", jobUUID); + }); } - @Test(expected = NotFoundException.class) // spring boot tests with Rule "ExpectedException" not working. + @Test public void get_a_job_status_from_an_exsting_project_but_no_job_throws_NOT_FOUND_exception() { - /* execute */ + /* prepare */ UUID jobUUID = UUID.randomUUID(); when(jobRepository.findById(jobUUID)).thenReturn(Optional.empty()); // not found... - serviceToTest.getJobStatus(PROJECT_ID, jobUUID); + + /* execute + test */ + Assertions.assertThrows(NotFoundException.class, () -> { + serviceToTest.getJobStatus(PROJECT_ID, jobUUID); + }); } } diff --git a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSmokeSpringBootTest.java b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSmokeSpringBootTest.java index 2e7c5dca5d..3ca3bbf8b2 100644 --- a/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSmokeSpringBootTest.java +++ b/sechub-server/src/test/java/com/mercedesbenz/sechub/domain/schedule/SchedulerSmokeSpringBootTest.java @@ -2,16 +2,17 @@ package com.mercedesbenz.sechub.domain.schedule; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; +import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.RoleConstants; /* @@ -21,10 +22,10 @@ * @author Albert Tregnaghi * */ -@RunWith(SpringRunner.class) @SpringBootTest -@TestPropertySource(locations = "classpath:application-test.properties") -@WithMockUser(authorities = { RoleConstants.ROLE_USER }) +@TestPropertySource(locations = "classpath:application-test.yml") +@WithMockUser(roles = { RoleConstants.ROLE_USER }) +@ActiveProfiles(Profiles.TEST) public class SchedulerSmokeSpringBootTest { @Autowired diff --git a/sechub-server/src/test/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptorTest.java b/sechub-server/src/test/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptorTest.java index 0349a88558..01dd7dae5b 100644 --- a/sechub-server/src/test/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptorTest.java +++ b/sechub-server/src/test/java/com/mercedesbenz/sechub/server/SecHubServerMDCAsyncHandlerInterceptorTest.java @@ -6,9 +6,6 @@ import java.util.UUID; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.junit.Before; import org.junit.Test; import org.slf4j.MDC; @@ -16,6 +13,9 @@ import com.mercedesbenz.sechub.sharedkernel.LogConstants; import com.mercedesbenz.sechub.test.SecHubTestURLBuilder; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + public class SecHubServerMDCAsyncHandlerInterceptorTest { private static final String DELETE_ME_ON_CLEAR = "delete-this-key"; diff --git a/sechub-server/src/test/resources/application-test.properties b/sechub-server/src/test/resources/application-test.properties deleted file mode 100644 index 1da327303a..0000000000 --- a/sechub-server/src/test/resources/application-test.properties +++ /dev/null @@ -1,96 +0,0 @@ -# SPDX-License-Identifier: MIT -sechub.config.scheduling.enable=false -# --------------- -# common setup -# --------------- -# use mock profile, so we can do nearly integration tests with -# standard JUNIT + spring without real stuff -# we use h2 for tests , more info about setup can be found at http://www.baeldung.com/spring-testing-separate-data-source -spring.profiles.active=mocked_products,mocked_notifications,h2,test -sechub.server.baseurl=http://localhost -sechub.storage.sharedvolume.upload.dir=temp - -# create SQL schema on every test suite call into build folder -# so can be used as a template when writing update scripts etc. -# for flyway - unfortunately the tests do not run correctly, with those settings, so we -# must only temporary activate the next 5 lines when necessary: -#spring.jpa.show-sql=true -#spring.jpa.properties.hibernate.format_sql=true -#spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata -#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create -#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=build/test-sql/created.sql - -# always drop and recreate ddl for tests -spring.jpa.hibernate.ddl-auto=create-drop - -# -# Special: For junit tests we do not need this but we test -# ProductionConfigurationSettingsTest.java that in prod server.ssl.enabled is -# true -server.ssl.enabled=false -# --------------------------------- -# Setup test target type strategies -# --------------------------------- -sechub.target.resolve.strategy.uri: intranet-hostname-ends-with:intranet.example.org,intranet.example.com|intranet-hostname-starts-with:192. -sechub.target.resolve.strategy.ip: intranet-ip-pattern:192.168.*.* - -sechub.notification.smtp.hostname=mail.example.org -# ------------------ -# Mock initial admin -# ------------------ -sechub.initialadmin.userid=test-user -sechub.initialadmin.email=test-user@example.org - -spring.datasource.initialization-mode=never -# ------------------------------ -# Flyway turned off for testing! -# ------------------------------ -spring.flyway.enabled=false - -# ----------------- -# Mock adapters -# ----------------- -# enable mocked adapters to check if the parameters are as expected -# just a sanity check that parameters are loaded etc. -sechub.adapter.mock.sanitycheck.enabled=true -# --------------- -# netsparker -# --------------- -sechub.adapter.netsparker.userid=netsparkerUserId -sechub.adapter.netsparker.apitoken=netsparkerAPIToken -sechub.adapter.netsparker.policyid=policyId -sechub.adapter.netsparker.baseurl=netsparkerBaseUrl -sechub.adapter.netsparker.licenseid=licenseId - -# --------------- -# checkmarx -# --------------- -sechub.adapter.checkmarx.baseurl=checkmarxBaseURL -sechub.adapter.checkmarx.userid=checkmarxUserId -sechub.adapter.checkmarx.password=checkmarxAPIToken -sechub.adapter.checkmarx.newproject.teamid=checkmarxNewProjectTeamId - -# --------------- -# nessus -# --------------- -sechub.adapter.nessus.intranet.userid=nessusIntranetUserId -sechub.adapter.nessus.internet.userid=nessusInternetUserId -sechub.adapter.nessus.intranet.password=nessusIntranetPassword -sechub.adapter.nessus.internet.password=nessusInternetPassword -sechub.adapter.nessus.defaultpolicyid=nessusDefaultPolicyId -sechub.adapter.nessus.intranet.baseurl=nessusIntranetBaseURL -sechub.adapter.nessus.internet.baseurl=nessusInternetBaseURL -#sechub.adapter.nessus.scanresultcheck.period.minutes:-1= -#sechub.adapter.nessus.scanresultcheck.timeout.minutes:-1= -#sechub.adapter.nessus.trustall:false= -#sechub.adapter.nessus.proxy.hostname:= -#sechub.adapter.nessus.proxy.port:0= -# --------------- -# email -# --------------- -sechub.notification.email.from=sechub@example.org -sechub.notification.email.administrators=sechub-admin-test@example.org - -# scheduler -sechub.config.trigger.nextjob.initialdelay=100 -sechub.config.trigger.nextjob.delay=300 diff --git a/sechub-server/src/test/resources/application-test.yml b/sechub-server/src/test/resources/application-test.yml new file mode 100644 index 0000000000..c431362dfc --- /dev/null +++ b/sechub-server/src/test/resources/application-test.yml @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: MIT + +# --------------- +# common setup +# --------------- +# use mock profile, so we can do nearly integration tests with +# standard JUNIT + spring without real stuff +# we use h2 for tests , more info about setup can be found at http://www.baeldung.com/spring-testing-separate-data-source +#spring.profiles.active=mocked_products,mocked_notifications,h2,test +# create SQL schema on every test suite call into build folder +# so can be used as a template when writing update scripts etc. +# for flyway - unfortunately the tests do not run correctly, with those settings, so we +# must only temporary activate the next 5 lines when necessary: +#spring.jpa.show-sql=true +#spring.jpa.properties.hibernate.format_sql=true +#spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata +#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create +#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=build/test-sql/created.sql + +sechub: + config: + scheduling: + enable: false + trigger: + nextjob: + initialdelay: 100 + delay: 300 + server: + baseurl: "http://localhost" + storage: + sharedvolume: + upload: + dir: temp + target: + resolve: + strategy: + uri: "intranet-hostname-ends-with:intranet.example.org,intranet.example.com|intranet-hostname-starts-with:192." + ip: "intranet-ip-pattern:192.168.*.*" + + notification: + smtp: + hostname: "mail.example.org" + email: + from: "sechub@example.org" + administrators: "sechub-admin-test@example.org" + initialadmin: + userid: test-user # Mock initial admin + email: "test-user@example.org" + adapter: + mock: + sanitycheck: + enabled: true # enable mocked adapters to check if the parameters are as expected. A sanity check that parameters are loaded etc. + netsparker: + userid: netsparkerUserId + apitoken: netsparkerAPIToken + policyid: policyId + baseurl: netsparkerBaseUrl + licenseid: licenseId + checkmarx: + baseurl: checkmarxBaseURL + userid: checkmarxUserId + password: checkmarxAPIToken + teamid: checkmarxNewProjectTeamId + nessus: + intranet: + userid: nessusIntranetUserId + password: nessusIntranetPassword + baseurl: nessusIntranetBaseURL + internet: + userid: nessusInternetUserId + password: nessusInternetPassword + baseurl: nessusInternetBaseURL + defaultpolicyid: nessusDefaultPolicyId + +#sechub.adapter.nessus.scanresultcheck.period.minutes:-1= +#sechub.adapter.nessus.scanresultcheck.timeout.minutes:-1= +#sechub.adapter.nessus.trustall:false= +#sechub.adapter.nessus.proxy.hostname:= +#sechub.adapter.nessus.proxy.port:0= + +spring: + jpa: + hibernate: + ddl-auto: create-drop # always drop and recreate ddl for tests + datasource: + initialization-mode: never + flyway: + enabled: false # Flyway turned off for testing + + +# +# Special: For junit tests we do not need this but we test +# ProductionConfigurationSettingsTest.java that in prod server.ssl.enabled is +# true +server: + ssl: + enabled: false \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/APIConstants.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/APIConstants.java index ec6cedf66a..4ee0ece544 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/APIConstants.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/APIConstants.java @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.sharedkernel; -import com.mercedesbenz.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; - /** * API constants, usable inside rest controllers etc. Be AWARE: its very * important to start the api constants always with an "/" e.g. "/api/admin/" diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/AuthorityConstants.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/AuthorityConstants.java new file mode 100644 index 0000000000..0b755ca75c --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/AuthorityConstants.java @@ -0,0 +1,11 @@ +package com.mercedesbenz.sechub.sharedkernel; + +public class AuthorityConstants { + + /** + * When it comes to differ between authorities and roles, this prefix is used. + * Roles do not have this prefix but authorities have this prefix. + */ + public static final String AUTHORITY_ROLE_PREFIX = "ROLE_"; + +} diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/RoleConstants.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/RoleConstants.java index 862fd74cf3..533eb333c6 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/RoleConstants.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/RoleConstants.java @@ -2,22 +2,21 @@ package com.mercedesbenz.sechub.sharedkernel; /** - * Never change the string content of identifiers! Will be used for persistence - * and also inside code! + * SecHub role constants without {@link AuthorityConstants#AUTHORITY_ROLE_PREFIX + * authority prefix}. Persistence of role data is NOT done with this values, but + * a boolean values inside AuthUser entity (The transformation is done inside + * AuthUserUpdateRolesService.) * * @author Albert Tregnaghi * */ public class RoleConstants { - /* - * Never change the string content of identifiers! Will be used for persistence - * and also inside code! - */ - public static final String ROLE_SUPERADMIN = "ROLE_SUPERADMIN"; - public static final String ROLE_USER = "ROLE_USER"; + public static final String ROLE_SUPERADMIN = "SUPERADMIN"; - public static final String ROLE_OWNER = "ROLE_OWNER"; + public static final String ROLE_USER = "USER"; + + public static final String ROLE_OWNER = "OWNER"; private RoleConstants() { } diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/UserContextService.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/UserContextService.java index ce176a2c55..db4c31b9ac 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/UserContextService.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/UserContextService.java @@ -50,6 +50,8 @@ private boolean hasRole(String role) { if (role == null) { return false; } + String authorityOfRole = AuthorityConstants.AUTHORITY_ROLE_PREFIX + role; + Authentication authentication = getAuthentication(); if (authentication == null) { return false; @@ -59,7 +61,7 @@ private boolean hasRole(String role) { if (auth == null) { continue; } - if (role.equals(auth.getAuthority())) { + if (authorityOfRole.equals(auth.getAuthority())) { return true; } } diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java deleted file mode 100644 index 1c71f6bdfe..0000000000 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: MIT -package com.mercedesbenz.sechub.sharedkernel.configuration; - -import static com.mercedesbenz.sechub.sharedkernel.RoleConstants.*; - -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.http.SessionCreationPolicy; - -import com.mercedesbenz.sechub.sharedkernel.APIConstants; - -/** - * A base class for web security having access to "/api/**" when being a user or - * super admin
- *
- * Defaults: - *
    - *
  • CSRF is disabled
  • - *
  • HTTP basic enabled
  • - *
  • api/anonymous is available also when not authenticated
  • - *
  • api/user is available when authenticated and role user
  • - *
  • api/project is available when authenticated and role user
  • - *
  • api/admin is available when authenticated and role superadmin
  • - *
- * - */ -public abstract class AbstractAllowSecHubAPISecurityConfiguration extends WebSecurityConfigurerAdapter { - // https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4 - // https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#core-services-password-encoding - - @Override - protected void configure(HttpSecurity http) throws Exception { - /* @formatter:off */ - http. - sessionManagement(). - sessionCreationPolicy(SessionCreationPolicy.STATELESS). - and(). - authorizeRequests(). - antMatchers(APIConstants.API_ADMINISTRATION+"**"). - hasAnyAuthority(ROLE_SUPERADMIN). - - antMatchers(APIConstants.API_USER+"**"). - hasAnyAuthority(ROLE_USER, ROLE_SUPERADMIN). - - antMatchers(APIConstants.API_PROJECT+"**"). - hasAnyAuthority(ROLE_USER, ROLE_SUPERADMIN). - - antMatchers(APIConstants.API_OWNER+"**"). - hasAnyAuthority(ROLE_OWNER, ROLE_SUPERADMIN). - - antMatchers(APIConstants.API_ANONYMOUS+"**"). - permitAll(). - antMatchers(APIConstants.ERROR_PAGE). - permitAll(). - antMatchers(APIConstants.ACTUATOR+"**"). - permitAll(). - /* to prevent configuration failures - I had this issue before - - * all other matchers do deny all. So if not correct - * configured nobody has access - please keep the denyAll parts - */ - antMatchers("/**"). - denyAll(). - - and(). - csrf(). - disable(). /* disable CSRF for api so we have no CSRF-TOKEN problems - POST would not work*/ - httpBasic()./* no login screen, just basic auth */ - and(). - headers(). - contentSecurityPolicy("default-src 'none'; style-src 'unsafe-inline'"); - - /* @formatter:on */ - } - -} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/configuration/AbstractSecHubAPISecurityConfiguration.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/configuration/AbstractSecHubAPISecurityConfiguration.java new file mode 100644 index 0000000000..ecbe1463a3 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/configuration/AbstractSecHubAPISecurityConfiguration.java @@ -0,0 +1,38 @@ +package com.mercedesbenz.sechub.sharedkernel.configuration; + +import static com.mercedesbenz.sechub.sharedkernel.RoleConstants.*; + +import org.springframework.context.annotation.Bean; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; + +import com.mercedesbenz.sechub.sharedkernel.APIConstants; + +public abstract class AbstractSecHubAPISecurityConfiguration { + + @Bean + public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + + /* @formatter:off */ + httpSecurity.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests((auth) -> auth. + requestMatchers(APIConstants.API_ADMINISTRATION + "**").hasAnyRole(ROLE_SUPERADMIN). + requestMatchers(APIConstants.API_USER + "**").hasAnyRole(ROLE_USER, ROLE_SUPERADMIN). + requestMatchers(APIConstants.API_PROJECT + "**").hasAnyRole(ROLE_USER, ROLE_SUPERADMIN). + requestMatchers(APIConstants.API_OWNER + "**").hasAnyRole(ROLE_OWNER, ROLE_SUPERADMIN). + + requestMatchers(APIConstants.API_ANONYMOUS + "**").permitAll(). + requestMatchers(APIConstants.ERROR_PAGE).permitAll(). + requestMatchers(APIConstants.ACTUATOR + "**").permitAll(). + requestMatchers("/**").denyAll()) + .csrf((csrf) -> csrf.disable()) // CSRF protection disabled. The CookieServerCsrfTokenRepository does + // not work since Spring Boot 3 + .httpBasic(Customizer.withDefaults()).headers((headers) -> headers + .contentSecurityPolicy((csp) -> csp.policyDirectives("default-src 'none'; style-src 'unsafe-inline'"))); + /* @formatter:on */ + + return httpSecurity.build(); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupport.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupport.java index d48d0e4415..4a57f81c39 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupport.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupport.java @@ -3,8 +3,8 @@ import java.util.Optional; -import javax.persistence.NoResultException; -import javax.persistence.Query; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; public class TypedQuerySupport { private Class clazz; diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/UriPersistenceConverter.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/UriPersistenceConverter.java index 904cbf7489..2250c12613 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/UriPersistenceConverter.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/jpa/UriPersistenceConverter.java @@ -3,11 +3,11 @@ import java.net.URI; -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; - import org.springframework.util.StringUtils; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + @Converter(autoApply = true) public class UriPersistenceConverter implements AttributeConverter { diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogService.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogService.java index 35d7ba58ff..166d301847 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogService.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogService.java @@ -6,9 +6,6 @@ import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - import org.apache.http.HttpHeaders; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,6 +21,9 @@ import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.UserContextService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + /** * Default security log service. * diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorService.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorService.java index 2ced0cfa21..91a742c994 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorService.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorService.java @@ -87,7 +87,8 @@ public void inspectSendSynchron(DomainMessage request, int inspectId) { } /* identify sender (this method = 1, caller = 2... */ IntegrationTestEventHistoryInspection inspection = history.ensureInspection(inspectId); - StackTraceElement traceElement = grabTracElementWithoutProxies(4); + + StackTraceElement traceElement = grabFirstNonProxiedDomainTraceElement(); inspection.setSynchronousSender(extractRealClassNameFromStacktrace(traceElement), request.getMessageId()); appendAdditionalDebugData(request, inspection); } @@ -122,7 +123,7 @@ public void inspectSendAsynchron(DomainMessage request, int inspectId) { /* identify sender (this method = 1, caller = 2... */ IntegrationTestEventHistoryInspection inspection = history.ensureInspection(inspectId); - StackTraceElement traceElement = grabTracElementWithoutProxies(4); + StackTraceElement traceElement = grabFirstNonProxiedDomainTraceElement(); inspection.setAsynchronousSender(extractRealClassNameFromStacktrace(traceElement), request.getMessageId()); appendAdditionalDebugData(request, inspection); } @@ -166,38 +167,38 @@ public void inspectReceiveAsynchronMessage(DomainMessage request, int inspectId, } /** - * Grabs trace element - will ignore spring proxy stuff automatically + * Grabs first trace element with domain package- will ignore spring proxy stuff + * automatically * - * @param pos position in stack trace, starts with 0, where 0 is get trace - * element, and 1 is this method! - * @return trace element for given position or null + * @return trace element or null */ - private StackTraceElement grabTracElementWithoutProxies(int pos) { + private StackTraceElement grabFirstNonProxiedDomainTraceElement() { StackTraceElement[] elements = Thread.currentThread().getStackTrace(); int elementIndex = 0; if (LOG.isTraceEnabled()) { - LOG.trace("Grab tracelements:{}", pos); for (StackTraceElement element : elements) { LOG.trace("{}: {}", elementIndex++, element); } } - - int currentPosWithoutProxyParts = 0; elementIndex = 0; for (StackTraceElement element : elements) { String className = element.getClassName(); - // Grab tracelements:4 - // 0:java.lang.Thread.getStackTrace(Thread.java:1559) - // 1:com.mercedesbenz.sechub.sharedkernel.messaging.IntegrationTestEventInspectorService.grabTracElementWithoutProxies(IntegrationTestEventInspectorService.java:173) - // 2:com.mercedesbenz.sechub.sharedkernel.messaging.IntegrationTestEventInspectorService.inspectSendAsynchron(IntegrationTestEventInspectorService.java:110) - // 3:com.mercedesbenz.sechub.sharedkernel.messaging.DomainMessageService.sendAsynchron(DomainMessageService.java:153) - // 4:com.mercedesbenz.sechub.sharedkernel.messaging.DomainMessageService$$FastClassBySpringCGLIB$$c7de0c21.invoke() - // 5:org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) - // 6:org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685) - // 7:com.mercedesbenz.sechub.sharedkernel.messaging.DomainMessageService$$EnhancerBySpringCGLIB$$83df6b4.sendAsynchron() - // 8:com.mercedesbenz.sechub.domain.schedule.config.SchedulerConfigService.setJobProcessingEnabled(SchedulerConfigService.java:70) - // 9:com.mercedesbenz.sechub.domain.schedule.config.SchedulerConfigService.enableJobProcessing(SchedulerConfigService.java:38) + /* @formatter:off */ + // Grab trace elements: new example (Spring Boot3): + // ----------------------------------------------- + // 0:java.base/java.lang.Thread.getStackTrace(Thread.java:1619), + // 1:com.mercedesbenz.sechub.sharedkernel.messaging.IntegrationTestEventInspectorService.grabTracElementWithoutProxies(IntegrationTestEventInspectorService.java:177), + // 2:com.mercedesbenz.sechub.sharedkernel.messaging.IntegrationTestEventInspectorService.inspectSendAsynchron(IntegrationTestEventInspectorService.java:125), + // 3:com.mercedesbenz.sechub.sharedkernel.messaging.DomainMessageService.sendAsynchron(DomainMessageService.java:160), java.base/ + // 4:jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method), java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77), java.base/ + // 5:jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), java.base/java.lang.reflect.Method.invoke(Method.java:568), + // 6:org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:351), + // 7:org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:713), com.mercedesbenz.sechub.sharedkernel.messaging.DomainMessageService$ + // 8:$SpringCGLIB$$0.sendAsynchron(), com.mercedesbenz.sechub.domain.administration.config.AdministrationConfigService.sendEvent(AdministrationConfigService.java:109), + // 9:com.mercedesbenz.sechub.domain.administration.config.AdministrationConfigService.updateAutoCleanupConfiguration(AdministrationConfigService.java:72), + /* @formatter:on */ + elementIndex++; /* check if proxied */ @@ -209,11 +210,10 @@ private StackTraceElement grabTracElementWithoutProxies(int pos) { LOG.trace("Skip proxy stuff {}:{}", elementIndex, className); continue; } - if (currentPosWithoutProxyParts == pos) { + if (className.indexOf("sechub.domain.") != -1) { LOG.trace("return: {}:{}", elementIndex, element); return element; } - currentPosWithoutProxyParts++; } throw new IllegalStateException("Trace element may not be null!"); } diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/monitoring/SystemMonitorService.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/monitoring/SystemMonitorService.java index 4f4c0452f7..c5308f041d 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/monitoring/SystemMonitorService.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/monitoring/SystemMonitorService.java @@ -5,7 +5,6 @@ import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; -import javax.annotation.PostConstruct; import javax.management.MBeanServerConnection; import org.slf4j.Logger; @@ -15,6 +14,8 @@ import com.mercedesbenz.sechub.sharedkernel.MustBeDocumented; +import jakarta.annotation.PostConstruct; + /** * A service where callers can check current CPU and memory state of the running * machine. Service will provide metrics, descriptions and has got an check diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/project/ProjectAccessLevelJPAConverter.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/project/ProjectAccessLevelJPAConverter.java index d637a25bfc..720ee78ef8 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/project/ProjectAccessLevelJPAConverter.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/project/ProjectAccessLevelJPAConverter.java @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.sharedkernel.project; -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; @Converter(autoApply = true) public class ProjectAccessLevelJPAConverter implements AttributeConverter { diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/storage/MultiStorageService.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/storage/MultiStorageService.java index ca82e37a16..cac84dc9e1 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/storage/MultiStorageService.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/storage/MultiStorageService.java @@ -30,14 +30,6 @@ public class MultiStorageService implements StorageService { private static final Logger LOG = LoggerFactory.getLogger(MultiStorageService.class); - /* - * TODO de-jcup, 2019-11-09: think about decoupling this completely: - * List + @Component in storage factories, maybe with init - * method (to avoid missing dependency injection in sechub-storage-aws-s3-test - * when s3mock starts...). Benefit would be: change between aws and minio s3 - * impl would be just a dependency switch and all done. Currently software - * changes inside this class are necessary to obtain this. - */ private JobStorageFactory jobStorageFactory; @Autowired diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/UseCaseDefinition.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/UseCaseDefinition.java index d4005fd3e4..db2183dfce 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/UseCaseDefinition.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/UseCaseDefinition.java @@ -6,10 +6,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.annotation.security.RolesAllowed; - import com.mercedesbenz.sechub.sharedkernel.Step; +import jakarta.annotation.security.RolesAllowed; + /** * Is used by Asciidoc generator to automatically generate documentation about * use cases.
diff --git a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/RoleConstantsTest.java b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/RoleConstantsTest.java index b860f7402d..7a049a0a16 100644 --- a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/RoleConstantsTest.java +++ b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/RoleConstantsTest.java @@ -9,18 +9,23 @@ public class RoleConstantsTest { @Test public void isSuperAdminRole_works() { - assertTrue(RoleConstants.isSuperAdminRole("ROLE_SUPERADMIN")); + assertTrue(RoleConstants.isSuperAdminRole("SUPERADMIN")); + assertTrue(RoleConstants.isSuperAdminRole(RoleConstants.ROLE_SUPERADMIN)); - assertFalse(RoleConstants.isSuperAdminRole("ROLE_USER")); + assertFalse(RoleConstants.isSuperAdminRole("USER")); + assertFalse(RoleConstants.isSuperAdminRole(RoleConstants.ROLE_USER)); + assertFalse(RoleConstants.isSuperAdminRole(RoleConstants.ROLE_OWNER)); assertFalse(RoleConstants.isSuperAdminRole("")); assertFalse(RoleConstants.isSuperAdminRole("X")); } @Test public void isUserRole_works() { - assertTrue(RoleConstants.isUserRole("ROLE_USER")); + assertTrue(RoleConstants.isUserRole("USER")); + assertTrue(RoleConstants.isUserRole(RoleConstants.ROLE_USER)); - assertFalse(RoleConstants.isUserRole("ROLE_SUPERADMIN")); + assertFalse(RoleConstants.isUserRole("SUPERADMIN")); + assertFalse(RoleConstants.isUserRole(RoleConstants.ROLE_SUPERADMIN)); assertFalse(RoleConstants.isUserRole("")); assertFalse(RoleConstants.isUserRole("X")); } diff --git a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupportTest.java b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupportTest.java index c3af7ceb19..f499bdd8f8 100644 --- a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupportTest.java +++ b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/jpa/TypedQuerySupportTest.java @@ -6,12 +6,12 @@ import java.util.Optional; -import javax.persistence.NoResultException; -import javax.persistence.Query; - import org.junit.Before; import org.junit.Test; +import jakarta.persistence.NoResultException; +import jakarta.persistence.Query; + public class TypedQuerySupportTest { private TypedQuerySupport supportToTest; diff --git a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogServiceTest.java b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogServiceTest.java index 50e76dc2b6..5ecc3931d1 100644 --- a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogServiceTest.java +++ b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/logging/DefaultSecurityLogServiceTest.java @@ -10,9 +10,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -24,6 +21,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.mercedesbenz.sechub.sharedkernel.UserContextService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + class DefaultSecurityLogServiceTest { private static final String OBFUSCATED = "obfuscated"; diff --git a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorServiceTest.java b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorServiceTest.java index 06eb78b785..c7d552609b 100644 --- a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorServiceTest.java +++ b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/messaging/IntegrationTestEventInspectorServiceTest.java @@ -12,6 +12,9 @@ import org.junit.Before; import org.junit.Test; +import com.mercedesbenz.sechub.sharedkernel.test.SimulatedDomainMessageService; +import com.mercedesbenz.sechub.sharedkernel.test.sechub.domain.testonly.SimulatedCaller; + import ch.qos.logback.classic.Level; public class IntegrationTestEventInspectorServiceTest { @@ -27,8 +30,8 @@ public class IntegrationTestEventInspectorServiceTest { public void before() { serviceToTest = new IntegrationTestEventInspectorService(); - simulatedDomainMessageService = new SimulatedDomainMessageService(); - simulatedCaller = new SimulatedCaller(); + simulatedDomainMessageService = new SimulatedDomainMessageService(serviceToTest); + simulatedCaller = new SimulatedCaller(simulatedDomainMessageService); request = mock(DomainMessage.class); when(request.getMessageId()).thenReturn(MessageID.PROJECT_CREATED); @@ -74,7 +77,7 @@ public void reset_done_returns_history_without_usecasename_and_no_entries() { public void async_when_initialized_with_usecase_UC_aDMIN_CREATE_PROJECT_returns_history_without_usecasename() { /* execute */ serviceToTest.start(); - simulatedCaller.simulateCallerSendAsync(123); + simulatedCaller.simulateCallerSendAsync(123, request); serviceToTest.inspectReceiveAsynchronMessage(request, 123, asynchronousMessagerHandler); /* test */ @@ -106,7 +109,7 @@ public void async_when_initialized_with_usecase_UC_aDMIN_CREATE_PROJECT_returns_ public void sync_when_started() { /* execute */ serviceToTest.start(); - simulatedCaller.simulateCallereSendSync(123); + simulatedCaller.simulateCallereSendSync(123, request); serviceToTest.inspectReceiveSynchronMessage(request, 123, synchronousMessagerHandler); /* test */ @@ -136,32 +139,4 @@ public void sync_when_started() { } - /** - * Simulation to check if stacktrace caller identification works - only - * necessary for sender - * - * @author Albert Tregnaghi - * - */ - private class SimulatedCaller { - - public void simulateCallerSendAsync(int inspectId) { - simulatedDomainMessageService.simulateServiceSendAsync(inspectId); - } - - public void simulateCallereSendSync(int inspectId) { - simulatedDomainMessageService.simulateServiceSendSync(inspectId); - } - } - - private class SimulatedDomainMessageService { - public void simulateServiceSendAsync(int inspectId) { - serviceToTest.inspectSendAsynchron(request, inspectId); - } - - public void simulateServiceSendSync(int inspectId) { - serviceToTest.inspectSendSynchron(request, inspectId); - } - } - } diff --git a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/test/SimulatedDomainMessageService.java b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/test/SimulatedDomainMessageService.java new file mode 100644 index 0000000000..02585375db --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/test/SimulatedDomainMessageService.java @@ -0,0 +1,21 @@ +package com.mercedesbenz.sechub.sharedkernel.test; + +import com.mercedesbenz.sechub.sharedkernel.messaging.DomainMessage; +import com.mercedesbenz.sechub.sharedkernel.messaging.EventInspector; + +public class SimulatedDomainMessageService { + + private EventInspector inspectorService; + + public SimulatedDomainMessageService(EventInspector inspectorService) { + this.inspectorService = inspectorService; + } + + public void simulateServiceSendAsync(int inspectId, DomainMessage domainMessage) { + inspectorService.inspectSendAsynchron(domainMessage, inspectId); + } + + public void simulateServiceSendSync(int inspectId, DomainMessage domainMessage) { + inspectorService.inspectSendSynchron(domainMessage, inspectId); + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/test/sechub/domain/testonly/SimulatedCaller.java b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/test/sechub/domain/testonly/SimulatedCaller.java new file mode 100644 index 0000000000..9aab1fc23b --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/mercedesbenz/sechub/sharedkernel/test/sechub/domain/testonly/SimulatedCaller.java @@ -0,0 +1,28 @@ +package com.mercedesbenz.sechub.sharedkernel.test.sechub.domain.testonly; + +import com.mercedesbenz.sechub.sharedkernel.messaging.DomainMessage; +import com.mercedesbenz.sechub.sharedkernel.test.SimulatedDomainMessageService; + +/** + * Simulation to check if stacktrace caller identification works - only + * necessary for sender + * + * @author Albert Tregnaghi + * + */ +public class SimulatedCaller { + + private SimulatedDomainMessageService simulatedDomainMessageService; + + public SimulatedCaller(SimulatedDomainMessageService simulatedDomainMessageService) { + this.simulatedDomainMessageService = simulatedDomainMessageService; + } + + public void simulateCallerSendAsync(int inspectId, DomainMessage domainMessage) { + simulatedDomainMessageService.simulateServiceSendAsync(inspectId, domainMessage); + } + + public void simulateCallereSendSync(int inspectId, DomainMessage domainMessage) { + simulatedDomainMessageService.simulateServiceSendSync(inspectId, domainMessage); + } +} diff --git a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatistic.java b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatistic.java index cc7ede2082..3a449f61ef 100644 --- a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatistic.java +++ b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatistic.java @@ -1,24 +1,24 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.statistic.job; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.*; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.mercedesbenz.sechub.commons.model.TrafficLight; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents statistic data for job runs. See * /sechub-doc/src/docs/asciidoc/diagrams/diagram_em_statistic.puml for details diff --git a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatisticData.java b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatisticData.java index b6fcb10c8b..0e3e73b254 100644 --- a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatisticData.java +++ b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobRunStatisticData.java @@ -1,21 +1,13 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.statistic.job; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.*; import java.math.BigInteger; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.GenericGenerator; @@ -23,6 +15,14 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * /** Represents statistic data for a job - contains only parts which will not * change on job runs. See diff --git a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatistic.java b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatistic.java index 5dbd5a9154..47df6672e5 100644 --- a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatistic.java +++ b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatistic.java @@ -5,16 +5,16 @@ import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * Represents statistic data for a job - contains only parts which will not * change on job runs. See diff --git a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatisticData.java b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatisticData.java index f2b6ab37ac..969c07a5a5 100644 --- a/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatisticData.java +++ b/sechub-statistic/src/main/java/com/mercedesbenz/sechub/domain/statistic/job/JobStatisticData.java @@ -1,21 +1,13 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.domain.statistic.job; -import static javax.persistence.EnumType.*; +import static jakarta.persistence.EnumType.*; import java.math.BigInteger; import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Version; - import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.GenericGenerator; @@ -23,6 +15,14 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; + /** * /** Represents statistic data for a job - available outside execution phase. * See /sechub-doc/src/docs/asciidoc/diagrams/diagram_em_statistic.puml for diff --git a/sechub-storage-core/build.gradle b/sechub-storage-core/build.gradle index 7110c3bfaf..2c61cc83a0 100644 --- a/sechub-storage-core/build.gradle +++ b/sechub-storage-core/build.gradle @@ -7,10 +7,7 @@ * ============================================================================ */ dependencies { - - testImplementation library.junit4 testImplementation spring_boot_dependency.mockito_core - testImplementation library.mockito_inline testImplementation project(':sechub-testframework') } diff --git a/sechub-storage-s3-aws-test/build.gradle b/sechub-storage-s3-aws-test/build.gradle index b4745dbf6d..9a81f7e5eb 100644 --- a/sechub-storage-s3-aws-test/build.gradle +++ b/sechub-storage-s3-aws-test/build.gradle @@ -11,12 +11,9 @@ dependencies { implementation project(':sechub-storage-core') implementation project(':sechub-storage-s3-aws') - // https://mvnrepository.com/artifact/com.adobe.testing/s3mock - testImplementation library.junit4 testImplementation library.s3mock - testImplementation library.s3mock_junit4 + testImplementation library.s3mock_junit5 testImplementation spring_boot_dependency.mockito_core - testImplementation library.mockito_inline testImplementation project(':sechub-testframework') } diff --git a/sechub-storage-s3-aws-test/src/test/java/com/mercedesbenz/sechub/storage/s3/AwsS3JobStorageS3MockTest.java b/sechub-storage-s3-aws-test/src/test/java/com/mercedesbenz/sechub/storage/s3/AwsS3JobStorageS3MockTest.java index ecc908d63d..a18f899de3 100644 --- a/sechub-storage-s3-aws-test/src/test/java/com/mercedesbenz/sechub/storage/s3/AwsS3JobStorageS3MockTest.java +++ b/sechub-storage-s3-aws-test/src/test/java/com/mercedesbenz/sechub/storage/s3/AwsS3JobStorageS3MockTest.java @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.storage.s3; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -25,36 +25,24 @@ import java.util.UUID; import org.apache.commons.io.IOUtils; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mockito; -import com.adobe.testing.s3mock.junit4.S3MockRule; +import com.adobe.testing.s3mock.junit5.S3MockExtension; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.Bucket; -import com.mercedesbenz.sechub.test.TestPortProvider; import com.mercedesbenz.sechub.test.TestUtil; +@ExtendWith(S3MockExtension.class) public class AwsS3JobStorageS3MockTest { private static final String NEVER_CREATED_BUCKET_ID = "bucket4711"; private static final String TEST_DATA = "TEST-DATA"; - @ClassRule - public static final S3MockRule S3_MOCK_RULE = S3MockRule.builder().withHttpPort(TestPortProvider.DEFAULT_INSTANCE.getS3MockServerHttpPort()) - .withHttpsPort(TestPortProvider.DEFAULT_INSTANCE.getS3MockServerHttpsPort()).build(); - - private static AmazonS3 amazonTestClient; - - @BeforeClass - public static void beforeClass() throws Exception { - amazonTestClient = S3_MOCK_RULE.createS3Client(); - } - @Test - public void a_new_storage_does_not_create_a_new_bucket() throws Exception { + public void a_new_storage_does_not_create_a_new_bucket(final AmazonS3 amazonTestClient) throws Exception { /* execute */ new AwsS3JobStorage(amazonTestClient, NEVER_CREATED_BUCKET_ID, "jobstorage/projectName", UUID.randomUUID()); @@ -71,7 +59,7 @@ public void a_new_storage_does_not_create_a_new_bucket() throws Exception { } @Test - public void after_store_the_inputstream_is_closed() throws Exception { + public void after_store_the_inputstream_is_closed(final AmazonS3 amazonTestClient) throws Exception { /* prepare */ AwsS3JobStorage storage = new AwsS3JobStorage(amazonTestClient, "bucket2", "jobstorage/projectName", UUID.randomUUID()); @@ -91,7 +79,7 @@ public void after_store_the_inputstream_is_closed() throws Exception { } @Test - public void store_stores_textfile_correct_and_can_be_fetched() throws Exception { + public void store_stores_textfile_correct_and_can_be_fetched(final AmazonS3 amazonTestClient) throws Exception { /* prepare */ UUID jobjUUID = UUID.randomUUID(); @@ -114,7 +102,7 @@ public void store_stores_textfile_correct_and_can_be_fetched() throws Exception /* test */ String objectName = "jobstorage/projectName/" + jobjUUID + "/testA"; - assertTrue("Object must exist after storage", amazonTestClient.doesObjectExist("bucket2", objectName)); // test location is as expected + assertTrue(amazonTestClient.doesObjectExist("bucket2", objectName), "Object must exist after storage"); // test location is as expected AwsS3JobStorage storage2 = new AwsS3JobStorage(amazonTestClient, "bucket2", "jobstorage/projectName", jobjUUID); InputStream loadedStream = storage2.fetch("testA"); @@ -128,13 +116,13 @@ public void store_stores_textfile_correct_and_can_be_fetched() throws Exception } @Test - public void stored_object_is_deleted_by_deleteall() throws Exception { + public void stored_object_is_deleted_by_deleteall(final AmazonS3 amazonTestClient) throws Exception { /* prepare */ UUID jobUUID = UUID.randomUUID(); - AwsS3JobStorage storage = storeTestData(jobUUID); + AwsS3JobStorage storage = storeTestData(amazonTestClient, jobUUID); String objectName = "jobstorage/projectName/" + jobUUID + "/testC"; - assertTrue("Precondition not fullfilled, jobstorage not found", amazonTestClient.doesObjectExist("bucket2", objectName)); + assertTrue(amazonTestClient.doesObjectExist("bucket2", objectName), "Precondition not fullfilled, jobstorage not found"); /* execute */ storage.deleteAll(); @@ -145,19 +133,20 @@ public void stored_object_is_deleted_by_deleteall() throws Exception { } @Test - public void two_jobstorages_with_one_stored_object_one_storage_is_deleted_by_deleteall_other_still_exists() throws Exception { + public void two_jobstorages_with_one_stored_object_one_storage_is_deleted_by_deleteall_other_still_exists(final AmazonS3 amazonTestClient) + throws Exception { /* prepare */ UUID jobUUID = UUID.randomUUID(); UUID jobUUID2 = UUID.randomUUID(); - AwsS3JobStorage storage = storeTestData(jobUUID); - storeTestData(jobUUID2); + AwsS3JobStorage storage = storeTestData(amazonTestClient, jobUUID); + storeTestData(amazonTestClient, jobUUID2); String objectName = "jobstorage/projectName/" + jobUUID + "/testC"; String objectName2 = "jobstorage/projectName/" + jobUUID2 + "/testC"; - assertTrue("storage object1 not found", amazonTestClient.doesObjectExist("bucket2", objectName)); - assertTrue("storage object1 not found", amazonTestClient.doesObjectExist("bucket2", objectName2)); + assertTrue(amazonTestClient.doesObjectExist("bucket2", objectName), "storage object1 not found"); + assertTrue(amazonTestClient.doesObjectExist("bucket2", objectName2), "storage object1 not found"); /* execute */ storage.deleteAll(); @@ -169,7 +158,7 @@ public void two_jobstorages_with_one_stored_object_one_storage_is_deleted_by_del } @Test - public void two_jobstorages_inside_different_jobs_are_fetachable() throws Exception { + public void two_jobstorages_inside_different_jobs_are_fetachable(final AmazonS3 amazonTestClient) throws Exception { /* prepare */ UUID jobUUID = UUID.randomUUID(); UUID jobUUID2 = UUID.randomUUID(); @@ -190,18 +179,18 @@ public void two_jobstorages_inside_different_jobs_are_fetachable() throws Except } @Test - public void job_storage_storing_alpha_and_beta__listNames__call_returns_alpha_and_beta() throws Exception { + public void job_storage_storing_alpha_and_beta__listNames__call_returns_alpha_and_beta(final AmazonS3 amazonTestClient) throws Exception { /* prepare */ UUID jobUUID = UUID.randomUUID(); - AwsS3JobStorage storage = storeTestData(jobUUID, "bucket2", "test/data/a1", "alpha.txt"); + AwsS3JobStorage storage = storeTestData(amazonTestClient, jobUUID, "bucket2", "test/data/a1", "alpha.txt"); storeCreatedTestDataFile("beta.txt", storage); String objectName1 = "test/data/a1/" + jobUUID + "/alpha.txt"; String objectName2 = "test/data/a1/" + jobUUID + "/beta.txt"; - assertTrue("storage object1 not found", amazonTestClient.doesObjectExist("bucket2", objectName1)); - assertTrue("storage object2 not found", amazonTestClient.doesObjectExist("bucket2", objectName2)); + assertTrue(amazonTestClient.doesObjectExist("bucket2", objectName1), "storage object1 not found"); + assertTrue(amazonTestClient.doesObjectExist("bucket2", objectName2), "storage object2 not found"); /* execute */ Set result = storage.listNames(); @@ -214,12 +203,13 @@ public void job_storage_storing_alpha_and_beta__listNames__call_returns_alpha_an } @Test - public void storage1_storeds_alpha_storage2_stores_beta__listNames__for_storage1_returns_only_alpha_not_beta_and_versa() throws Exception { + public void storage1_storeds_alpha_storage2_stores_beta__listNames__for_storage1_returns_only_alpha_not_beta_and_versa(final AmazonS3 amazonTestClient) + throws Exception { /* prepare */ UUID jobUUID = UUID.randomUUID(); - AwsS3JobStorage storage = storeTestData(jobUUID, "bucket2", "test/data/b1", "alpha.txt"); - AwsS3JobStorage storage2 = storeTestData(jobUUID, "bucket2", "test/data/b2", "beta.txt"); + AwsS3JobStorage storage = storeTestData(amazonTestClient, jobUUID, "bucket2", "test/data/b1", "alpha.txt"); + AwsS3JobStorage storage2 = storeTestData(amazonTestClient, jobUUID, "bucket2", "test/data/b2", "beta.txt"); /* execute */ Set result = storage.listNames(); @@ -237,7 +227,8 @@ public void storage1_storeds_alpha_storage2_stores_beta__listNames__for_storage1 } @Test - public void storage1_storeds_job1_storage2_for_job2__listNames__for_storage1_returns_only_onefile__and_versa() throws Exception { + public void storage1_storeds_job1_storage2_for_job2__listNames__for_storage1_returns_only_onefile__and_versa(final AmazonS3 amazonTestClient) + throws Exception { /* prepare */ AwsS3JobStorage storage1 = new AwsS3JobStorage(amazonTestClient, "bucket2", "jobstorage/projectName", UUID.randomUUID()); AwsS3JobStorage storage2 = new AwsS3JobStorage(amazonTestClient, "bucket2", "jobstorage/projectName", UUID.randomUUID()); @@ -260,7 +251,7 @@ public void storage1_storeds_job1_storage2_for_job2__listNames__for_storage1_ret } @Test - public void storage_but_nothing_uploaded_returns_empty_list() throws Exception { + public void storage_but_nothing_uploaded_returns_empty_list(final AmazonS3 amazonTestClient) throws Exception { /* prepare */ UUID jobUUID = UUID.randomUUID(); @@ -275,12 +266,12 @@ public void storage_but_nothing_uploaded_returns_empty_list() throws Exception { } @Test - public void job_storage_storing_alpha__alpha_is_listed_and_can_be_fetched() throws Exception { + public void job_storage_storing_alpha__alpha_is_listed_and_can_be_fetched(final AmazonS3 amazonTestClient) throws Exception { /* prepare */ UUID jobUUID = UUID.randomUUID(); String name = "alpha.txt"; - AwsS3JobStorage storage = storeTestData(jobUUID, "bucket2", "test/data/d1", name); + AwsS3JobStorage storage = storeTestData(amazonTestClient, jobUUID, "bucket2", "test/data/d1", name); /* check precondition - listed as name */ Set result = storage.listNames(); @@ -297,11 +288,12 @@ public void job_storage_storing_alpha__alpha_is_listed_and_can_be_fetched() thro } - private AwsS3JobStorage storeTestData(UUID jobUUID) throws IOException, FileNotFoundException { - return storeTestData(jobUUID, "bucket2", "jobstorage/projectName", "testC"); + private AwsS3JobStorage storeTestData(final AmazonS3 amazonTestClient, UUID jobUUID) throws IOException, FileNotFoundException { + return storeTestData(amazonTestClient, jobUUID, "bucket2", "jobstorage/projectName", "testC"); } - private AwsS3JobStorage storeTestData(UUID jobUUID, String bucket, String storagePath, String filename) throws IOException, FileNotFoundException { + private AwsS3JobStorage storeTestData(final AmazonS3 amazonTestClient, UUID jobUUID, String bucket, String storagePath, String filename) + throws IOException, FileNotFoundException { AwsS3JobStorage storage = new AwsS3JobStorage(amazonTestClient, bucket, storagePath, jobUUID); return storeCreatedTestDataFile(filename, storage); diff --git a/sechub-storage-sharedvolume-spring/build.gradle b/sechub-storage-sharedvolume-spring/build.gradle index ffb88e9ed8..5ede857ac2 100644 --- a/sechub-storage-sharedvolume-spring/build.gradle +++ b/sechub-storage-sharedvolume-spring/build.gradle @@ -10,6 +10,5 @@ dependencies { implementation spring_boot_dependency.slf4j_api implementation project(':sechub-storage-core') - testImplementation library.mockito_inline testImplementation project(':sechub-testframework') } diff --git a/sechub-storage-sharedvolume-spring/src/main/java/com/mercedesbenz/sechub/storage/sharevolume/spring/AbstractSharedVolumePropertiesSetup.java b/sechub-storage-sharedvolume-spring/src/main/java/com/mercedesbenz/sechub/storage/sharevolume/spring/AbstractSharedVolumePropertiesSetup.java index 5272733ab6..e193c3556b 100644 --- a/sechub-storage-sharedvolume-spring/src/main/java/com/mercedesbenz/sechub/storage/sharevolume/spring/AbstractSharedVolumePropertiesSetup.java +++ b/sechub-storage-sharedvolume-spring/src/main/java/com/mercedesbenz/sechub/storage/sharevolume/spring/AbstractSharedVolumePropertiesSetup.java @@ -57,7 +57,7 @@ private String ensuredUploadDirectory() { /* at this point there is no upload directory defined - so start a fallback */ try { LOG.info( - "Temp upload directy NOT set, so creating a new temp directory. This should be used only on testing or when you just use ONE server instance. Using multiple server instances you need an NFS."); + "Temp upload directory NOT set, so creating a new temp directory. This should be used only on testing or when you just use ONE server instance. Using multiple server instances you need an NFS."); Path rootPath = Files.createTempDirectory("sechub-fallback-sharedvolume"); Path uploadPath = rootPath.resolve("upload"); diff --git a/sechub-test/src/test/java/com/mercedesbenz/sechub/test/PersistenceImplementationHealthTest.java b/sechub-test/src/test/java/com/mercedesbenz/sechub/test/PersistenceImplementationHealthTest.java index 16142a722c..a9f6104d72 100644 --- a/sechub-test/src/test/java/com/mercedesbenz/sechub/test/PersistenceImplementationHealthTest.java +++ b/sechub-test/src/test/java/com/mercedesbenz/sechub/test/PersistenceImplementationHealthTest.java @@ -9,15 +9,15 @@ import java.util.List; import java.util.Set; -import javax.persistence.Entity; -import javax.persistence.Version; - import org.junit.BeforeClass; import org.junit.Test; import com.mercedesbenz.sechub.docgen.reflections.Reflections; import com.mercedesbenz.sechub.docgen.util.ReflectionsFactory; +import jakarta.persistence.Entity; +import jakarta.persistence.Version; + public class PersistenceImplementationHealthTest { private static Reflections reflections; private static Set> entityClasses; diff --git a/sechub-test/src/test/java/com/mercedesbenz/sechub/test/RoutesTest.java b/sechub-test/src/test/java/com/mercedesbenz/sechub/test/RoutesTest.java index 78fef63daa..2818f24855 100644 --- a/sechub-test/src/test/java/com/mercedesbenz/sechub/test/RoutesTest.java +++ b/sechub-test/src/test/java/com/mercedesbenz/sechub/test/RoutesTest.java @@ -16,8 +16,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.security.RolesAllowed; - import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtensionContext; @@ -52,6 +50,8 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseDefinition; import com.mercedesbenz.sechub.sharedkernel.usecases.UseCaseIdentifier; +import jakarta.annotation.security.RolesAllowed; + @SuppressWarnings("rawtypes") public class RoutesTest { diff --git a/sechub-test/src/test/java/com/mercedesbenz/sechub/test/report/ThymeLeafHTMLReportingTest.java b/sechub-test/src/test/java/com/mercedesbenz/sechub/test/report/ThymeLeafHTMLReportingTest.java index 58d57fe6a6..feac990d6c 100644 --- a/sechub-test/src/test/java/com/mercedesbenz/sechub/test/report/ThymeLeafHTMLReportingTest.java +++ b/sechub-test/src/test/java/com/mercedesbenz/sechub/test/report/ThymeLeafHTMLReportingTest.java @@ -20,7 +20,7 @@ import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import org.thymeleaf.context.IContext; -import org.thymeleaf.spring5.dialect.SpringStandardDialect; +import org.thymeleaf.spring6.dialect.SpringStandardDialect; import org.thymeleaf.templateresolver.FileTemplateResolver; import com.mercedesbenz.sechub.commons.model.JSONConverter; diff --git a/sechub-testframework/build.gradle b/sechub-testframework/build.gradle index ee681920b8..f5e4dd22a9 100644 --- a/sechub-testframework/build.gradle +++ b/sechub-testframework/build.gradle @@ -10,7 +10,6 @@ dependencies { implementation library.junit4 implementation spring_boot_dependency.junit_jupiter implementation spring_boot_dependency.mockito_core - implementation library.mockito_inline implementation spring_boot_dependency.hamcrest implementation spring_boot_dependency.slf4j_api diff --git a/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/sechubaccess/SecHubAccessService.java b/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/sechubaccess/SecHubAccessService.java index 50b9935424..26a799f4dd 100644 --- a/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/sechubaccess/SecHubAccessService.java +++ b/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/sechubaccess/SecHubAccessService.java @@ -3,8 +3,6 @@ import java.net.URI; -import javax.annotation.PostConstruct; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -15,6 +13,8 @@ import com.mercedesbenz.sechub.api.SecHubClient; import com.mercedesbenz.sechub.api.SecHubClientException; +import jakarta.annotation.PostConstruct; + /** * Main class for communication with SecHub server. The {@link SecHubClient} is * not provided directly but via {@link #createExecutorForResult(Class)} and diff --git a/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/security/SecurityConfiguration.java b/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/security/SecurityConfiguration.java index dd07f37538..fc7d814296 100644 --- a/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/security/SecurityConfiguration.java +++ b/sechub-webui/src/main/java/com/mercedesbenz/sechub/webui/security/SecurityConfiguration.java @@ -9,7 +9,6 @@ import org.springframework.security.config.web.server.ServerHttpSecurity; import org.springframework.security.core.userdetails.MapReactiveUserDetailsService; import org.springframework.security.web.server.SecurityWebFilterChain; -import org.springframework.security.web.server.csrf.CookieServerCsrfTokenRepository; import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers; import com.mercedesbenz.sechub.webui.page.user.UserDetailInformationService; @@ -21,28 +20,30 @@ public class SecurityConfiguration { UserDetailInformationService userDetailInformationService; @Bean - public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity httpSecurity) throws Exception { + public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity httpSecurity) { /* @formatter:off */ - httpSecurity. - authorizeExchange(). - pathMatchers("/css/**", "/js/**", "/images/**").permitAll(). - pathMatchers("/login", "/logout").permitAll(). - anyExchange().authenticated(). - and(). - formLogin().loginPage("/login"). - and(). - logout(). - requiresLogout(ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, "/logout")). - and(). - csrf(csrf -> csrf.csrfTokenRepository(new CookieServerCsrfTokenRepository())); - /* @formatter:on */ - + httpSecurity. + authorizeExchange(exchanges -> exchanges. + pathMatchers("/css/**", "/js/**", "/images/**").permitAll(). + pathMatchers("/login").permitAll(). + anyExchange().authenticated() + ). + formLogin(formLogin -> formLogin. + loginPage("/login") + ). + logout(logout -> logout. + logoutUrl("/logout"). + requiresLogout(ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, "/logout")) + ). + csrf((csrf) -> csrf.disable() // CSRF protection disabled. The CookieServerCsrfTokenRepository does not work, since Spring Boot 3 + ); + /* @formatter:on */ return httpSecurity.build(); } @Bean public MapReactiveUserDetailsService userDetailsService() { - return new MapReactiveUserDetailsService(userDetailInformationService.getUser()); + return new MapReactiveUserDetailsService(userDetailInformationService.getUser(), userDetailInformationService.getUser()); } } diff --git a/sechub-webui/src/main/resources/templates/login.html b/sechub-webui/src/main/resources/templates/login.html index 6ea15dba89..118cd0ccdc 100644 --- a/sechub-webui/src/main/resources/templates/login.html +++ b/sechub-webui/src/main/resources/templates/login.html @@ -13,10 +13,12 @@

Please Log In

You have been logged out.
- +
- +
diff --git a/sechub-wrapper-checkmarx/src/test/java/com/mercedesbenz/sechub/wrapper/checkmarx/CheckmarxWrapperScanServiceSpringBootTest.java b/sechub-wrapper-checkmarx/src/test/java/com/mercedesbenz/sechub/wrapper/checkmarx/CheckmarxWrapperScanServiceSpringBootTest.java index ff8d342c82..bbacd1174f 100644 --- a/sechub-wrapper-checkmarx/src/test/java/com/mercedesbenz/sechub/wrapper/checkmarx/CheckmarxWrapperScanServiceSpringBootTest.java +++ b/sechub-wrapper-checkmarx/src/test/java/com/mercedesbenz/sechub/wrapper/checkmarx/CheckmarxWrapperScanServiceSpringBootTest.java @@ -1,7 +1,9 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.wrapper.checkmarx; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.io.IOException; @@ -9,12 +11,10 @@ import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; import com.mercedesbenz.sechub.adapter.AdapterExecutionResult; import com.mercedesbenz.sechub.wrapper.checkmarx.cli.CheckmarxWrapperEnvironment; @@ -25,7 +25,6 @@ @SpringBootTest(classes = { CheckmarxWrapperScanContextFactory.class, CheckmarxWrapperScanService.class, CheckmarxWrapperPojoFactory.class, CheckmarxWrapperEnvironment.class, CheckmarxWrapperPDSUserMessageSupportFactory.class }) -@ExtendWith(SpringExtension.class) @TestPropertySource(locations = "classpath:application-test.properties") class CheckmarxWrapperScanServiceSpringBootTest {