From 288bbb79ecb79286ceac57d4b46fe093ae6f977a Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 7 Nov 2024 12:20:28 +0100 Subject: [PATCH] OZG-6949 Refactoring and formatting --- .gitignore | 1 + .idea/.gitignore | 9 -- .idea/codeStyles/Project.xml | 75 --------- .idea/codeStyles/codeStyleConfig.xml | 5 - .idea/compiler.xml | 39 ----- .idea/copyright/Eupl1_2.xml | 6 - .idea/copyright/profiles_settings.xml | 7 - .idea/encodings.xml | 7 - .idea/gradle.xml | 4 - .idea/jarRepositories.xml | 85 ---------- .idea/misc.xml | 15 -- .idea/modules.xml | 16 -- .idea/sonarlint.xml | 8 - .idea/uiDesigner.xml | 124 -------------- .idea/vcs.xml | 6 - .../attachments/FileController.java | 2 + .../attachments/FileIdentificationData.java | 4 +- .../attachments/FileProperties.java | 13 +- .../attachments/FileRemoteService.java | 2 + .../attachments/FileRestClient.java | 2 + .../antragsraum/attachments/FileService.java | 2 + .../attachments/FileValidator.java | 2 + .../antragsraum/attachments/OzgFile.java | 4 +- .../attachments/OzgUploadFile.java | 1 + .../attachments/VirusScannerClient.java | 8 + .../ozgcloud/antragsraum/command/Command.java | 4 +- .../command/CommandController.java | 2 + .../antragsraum/command/CommandMapper.java | 42 ++--- .../antragsraum/command/CommandReference.java | 4 +- .../command/CommandRemoteService.java | 5 +- .../command/CommandRestClient.java | 2 + .../antragsraum/command/CommandService.java | 2 + .../common/AddressNotFoundAdvice.java | 45 ------ .../common/AddressNotFoundException.java | 14 +- .../common/AttachmentNotFoundAdvice.java | 45 ------ .../common/ExceptionController.java | 77 +++++++++ .../common/GeneralExceptionAdvice.java | 45 ------ .../antragsraum/common/InvalidFileAdvice.java | 44 ----- .../common/InvalidFileTypeException.java | 14 +- .../common/NotAccessibleException.java | 2 + .../antragsraum/common/NotFoundException.java | 14 +- .../antragsraum/common/RestClientUtils.java | 2 + .../antragsraum/common/SendTimeoutAdvice.java | 45 ------ .../common/TechnicalException.java | 14 +- .../antragsraum/common/VirusFoundAdvice.java | 44 ----- .../common/VirusFoundException.java | 14 +- .../common/VirusScanException.java | 6 +- .../logging/RepositoryAspectPointcut.java | 1 + .../logging/RepositoryLoggingAspect.java | 1 + .../security/InMemoryUserDetailService.java | 2 + ...AntragraumproxyGrpcCommandTestFactory.java | 2 + .../command/CommandControllerITCase.java | 6 +- .../command/CommandControllerTest.java | 6 +- .../CommandControllerTestConfiguration.java | 2 + .../command/CommandMapperTest.java | 21 ++- .../command/CommandReferenceTestFactory.java | 2 + .../command/CommandRemoteServiceITCase.java | 4 + .../command/CommandRemoteServiceTest.java | 13 +- ...CommandRemoteServiceTestConfiguration.java | 5 +- .../command/CommandRestClientTest.java | 2 + .../command/CommandServiceTest.java | 6 +- .../command/CommandTestFactory.java | 17 +- .../command/GrpcCommandTestFactory.java} | 17 +- .../common/AddressNotFoundExceptionTest.java | 2 + .../common/ExceptionControllerTest.java | 151 ++++++++++++++++++ ...java => InvalidFileTypeExceptionTest.java} | 24 +-- .../common/NotAccessibleExceptionTest.java | 2 + .../common/NotFoundExceptionTest.java | 22 +-- .../common/RestClientUtilsTest.java | 9 +- .../common/TechnicalExceptionTest.java | 1 + ...Test.java => VirusFoundExceptionTest.java} | 23 +-- .../common/VirusScanExceptionTest.java | 6 +- 72 files changed, 470 insertions(+), 810 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/copyright/Eupl1_2.xml delete mode 100644 .idea/copyright/profiles_settings.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/sonarlint.xml delete mode 100644 .idea/uiDesigner.xml delete mode 100644 .idea/vcs.xml delete mode 100644 server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundAdvice.java delete mode 100644 server/src/main/java/de/ozgcloud/antragsraum/common/AttachmentNotFoundAdvice.java create mode 100644 server/src/main/java/de/ozgcloud/antragsraum/common/ExceptionController.java delete mode 100755 server/src/main/java/de/ozgcloud/antragsraum/common/GeneralExceptionAdvice.java delete mode 100755 server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileAdvice.java delete mode 100755 server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutAdvice.java delete mode 100755 server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundAdvice.java mode change 100755 => 100644 server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java rename server/src/{main/java/de/ozgcloud/antragsraum/common/SendTimeoutException.java => test/java/de/ozgcloud/antragsraum/command/GrpcCommandTestFactory.java} (70%) mode change 100755 => 100644 create mode 100644 server/src/test/java/de/ozgcloud/antragsraum/common/ExceptionControllerTest.java rename server/src/test/java/de/ozgcloud/antragsraum/common/{SendTimeoutExceptionTest.java => InvalidFileTypeExceptionTest.java} (58%) mode change 100755 => 100644 rename server/src/test/java/de/ozgcloud/antragsraum/common/{SecurityExceptionAdviceTest.java => VirusFoundExceptionTest.java} (64%) diff --git a/.gitignore b/.gitignore index 14fa51a7..09127ca3 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ bin/ .sts4-cache ### IntelliJ IDEA ### +.idea *.iws *.iml *.ipr diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b4208d1f..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -/sonarlint/ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index c7b7b708..00000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,75 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <code_scheme name="Project" version="173"> - <JavaCodeStyleSettings> - <option name="GENERATE_FINAL_PARAMETERS" value="true" /> - <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" /> - <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="1" /> - <option name="IMPORT_LAYOUT_TABLE"> - <value> - <package name="" withSubpackages="true" static="true" /> - <emptyLine /> - <package name="java" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="jakarta" withSubpackages="true" static="false" /> - <package name="javax" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="org" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="com" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="" withSubpackages="true" static="false" /> - </value> - </option> - <option name="ALIGN_MULTILINE_RECORDS" value="false" /> - <option name="ALIGN_TYPES_IN_MULTI_CATCH" value="false" /> - <option name="JD_P_AT_EMPTY_LINES" value="false" /> - <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" /> - </JavaCodeStyleSettings> - <JetCodeStyleSettings> - <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> - </JetCodeStyleSettings> - <codeStyleSettings language="JAVA"> - <option name="RIGHT_MARGIN" value="150" /> - <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> - <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" /> - <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> - <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> - <option name="KEEP_BLANK_LINES_BETWEEN_PACKAGE_DECLARATION_AND_HEADER" value="1" /> - <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" /> - <option name="INDENT_CASE_FROM_SWITCH" value="false" /> - <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> - <option name="ALIGN_MULTILINE_RESOURCES" value="false" /> - <option name="ALIGN_MULTILINE_FOR" value="false" /> - <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" /> - <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" /> - <option name="CALL_PARAMETERS_WRAP" value="1" /> - <option name="METHOD_PARAMETERS_WRAP" value="1" /> - <option name="RESOURCE_LIST_WRAP" value="5" /> - <option name="EXTENDS_LIST_WRAP" value="1" /> - <option name="THROWS_LIST_WRAP" value="1" /> - <option name="EXTENDS_KEYWORD_WRAP" value="1" /> - <option name="THROWS_KEYWORD_WRAP" value="1" /> - <option name="METHOD_CALL_CHAIN_WRAP" value="1" /> - <option name="BINARY_OPERATION_WRAP" value="1" /> - <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" /> - <option name="TERNARY_OPERATION_WRAP" value="5" /> - <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" /> - <option name="ARRAY_INITIALIZER_WRAP" value="1" /> - <option name="WRAP_COMMENTS" value="true" /> - <option name="ASSERT_STATEMENT_COLON_ON_NEXT_LINE" value="true" /> - <option name="ENUM_CONSTANTS_WRAP" value="1" /> - <indentOptions> - <option name="CONTINUATION_INDENT_SIZE" value="2" /> - <option name="USE_TAB_CHARACTER" value="true" /> - </indentOptions> - </codeStyleSettings> - <codeStyleSettings language="XML"> - <indentOptions> - <option name="USE_TAB_CHARACTER" value="true" /> - </indentOptions> - </codeStyleSettings> - <codeStyleSettings language="kotlin"> - <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> - </codeStyleSettings> - </code_scheme> -</component> \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c..00000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <state> - <option name="USE_PER_PROJECT_SETTINGS" value="true" /> - </state> -</component> \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index a0654ae0..00000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CompilerConfiguration"> - <annotationProcessing> - <profile default="true" name="Default" enabled="true" /> - <profile name="Gradle Imported" enabled="true"> - <outputRelativeToContentRoot value="true" /> - <processorPath useClasspath="false"> - <entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.30/f195ee86e6c896ea47a1d39defbe20eb59cd149d/lombok-1.18.30.jar" /> - </processorPath> - </profile> - <profile name="Maven default annotation processors profile" enabled="true"> - <sourceOutputDir name="target/generated-sources/annotations" /> - <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> - <outputRelativeToContentRoot value="true" /> - </profile> - <profile name="Annotation profile for OZG-Cloud Antragsraum" enabled="true"> - <sourceOutputDir name="target/generated-sources/annotations" /> - <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> - <outputRelativeToContentRoot value="true" /> - <processorPath useClasspath="false"> - <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct-processor/1.6.0/mapstruct-processor-1.6.0.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.6.0/mapstruct-1.6.0.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct-processor/1.6.0/mapstruct-processor-1.6.0.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.6.0/mapstruct-1.6.0.jar" /> - </processorPath> - <module name="antragsraum-server" /> - </profile> - </annotationProcessing> - <bytecodeTargetLevel target="21" /> - </component> - <component name="JavacSettings"> - <option name="ADDITIONAL_OPTIONS_OVERRIDE"> - <module name="antragsraum-server" options="-parameters -Amapstruct.defaultComponentModel=spring -Amapstruct.unmappedTargetPolicy=WARN" /> - </option> - </component> -</project> \ No newline at end of file diff --git a/.idea/copyright/Eupl1_2.xml b/.idea/copyright/Eupl1_2.xml deleted file mode 100644 index 8b51bb23..00000000 --- a/.idea/copyright/Eupl1_2.xml +++ /dev/null @@ -1,6 +0,0 @@ -<component name="CopyrightManager"> - <copyright> - <option name="notice" value="Copyright (c) &#36;originalComment.match("Copyright \(c\) (\d+)", 1, "-", "&#36;today.year")&#36;today.year. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. Lizenziert unter der EUPL, Version 1.2 oder - sobald diese von der Europäischen Kommission genehmigt wurden - Folgeversionen der EUPL ("Lizenz"); Sie dürfen dieses Werk ausschließlich gemäß dieser Lizenz nutzen. Eine Kopie der Lizenz finden Sie hier: https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 Sofern nicht durch anwendbare Rechtsvorschriften gefordert oder in schriftlicher Form vereinbart, wird die unter der Lizenz verbreitete Software "so wie sie ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - ausdrücklich oder stillschweigend - verbreitet. Die sprachspezifischen Genehmigungen und Beschränkungen unter der Lizenz sind dem Lizenztext zu entnehmen. " /> - <option name="myName" value="Eupl1.2" /> - </copyright> -</component> \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index 4c899691..00000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ -<component name="CopyrightManager"> - <settings> - <module2copyright> - <element module="Project Files" copyright="Eupl1.2" /> - </module2copyright> - </settings> -</component> \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 0dabbbf7..00000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> - <file url="file://$PROJECT_DIR$/server/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/server/target/generated-sources/openapi" charset="UTF-8" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 3e3960b7..00000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="GradleMigrationSettings" migrationVersion="1" /> -</project> \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index 2f42e537..00000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,85 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="RemoteRepositoriesConfiguration"> - <remote-repository> - <option name="id" value="shibboleth" /> - <option name="name" value="Shibboleth Maven Repo" /> - <option name="url" value="https://build.shibboleth.net/nexus/content/repositories/releases" /> - </remote-repository> - <remote-repository> - <option name="id" value="central" /> - <option name="name" value="Central Repository" /> - <option name="url" value="https://repo.maven.apache.org/maven2" /> - </remote-repository> - <remote-repository> - <option name="id" value="shibboleth-releases" /> - <option name="name" value="Shibboleth Releases Repository" /> - <option name="url" value="https://build.shibboleth.net/maven/releases/" /> - </remote-repository> - <remote-repository> - <option name="id" value="central" /> - <option name="name" value="Maven Central" /> - <option name="url" value="https://repo1.maven.org/maven2/" /> - </remote-repository> - <remote-repository> - <option name="id" value="central" /> - <option name="name" value="Maven Central repository" /> - <option name="url" value="https://repo1.maven.org/maven2" /> - </remote-repository> - <remote-repository> - <option name="id" value="nexus" /> - <option name="name" value="Ozg nexus" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-ozg-releases" /> - </remote-repository> - <remote-repository> - <option name="id" value="maven" /> - <option name="name" value="maven" /> - <option name="url" value="https://artifacts.mgm-tp.com/artifactory/maven-repos" /> - </remote-repository> - <remote-repository> - <option name="id" value="maven2" /> - <option name="name" value="maven2" /> - <option name="url" value="https://build.shibboleth.net/nexus/content/repositories/releases/" /> - </remote-repository> - <remote-repository> - <option name="id" value="MavenRepo" /> - <option name="name" value="MavenRepo" /> - <option name="url" value="https://repo.maven.apache.org/maven2/" /> - </remote-repository> - <remote-repository> - <option name="id" value="project-repository" /> - <option name="name" value="project-repository" /> - <option name="url" value="file://$PROJECT_DIR$/server/tmpRepo" /> - </remote-repository> - <remote-repository> - <option name="id" value="jboss.community" /> - <option name="name" value="JBoss Community repository" /> - <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> - </remote-repository> - <remote-repository> - <option name="id" value="ozg-snapshots-nexus" /> - <option name="name" value="ozg-snapshots" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-snapshots/" /> - </remote-repository> - <remote-repository> - <option name="id" value="local-repo" /> - <option name="name" value="local-repo" /> - <option name="url" value="file://$PROJECT_DIR$/server/lib" /> - </remote-repository> - <remote-repository> - <option name="id" value="ozg-nexus" /> - <option name="name" value="ozg-releases" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-releases/" /> - </remote-repository> - <remote-repository> - <option name="id" value="shibboleth-thirdparty" /> - <option name="name" value="Shibboleth Thirdparty Repository" /> - <option name="url" value="https://build.shibboleth.net/maven/thirdparty/" /> - </remote-repository> - <remote-repository> - <option name="id" value="nexus" /> - <option name="name" value="Ozg nexus" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-releases" /> - </remote-repository> - </component> -</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 290d6c7b..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ExternalStorageConfigurationManager" enabled="true" /> - <component name="FrameworkDetectionExcludesConfiguration"> - <file type="web" url="file://$PROJECT_DIR$" /> - </component> - <component name="MavenProjectsManager"> - <option name="originalFiles"> - <list> - <option value="$PROJECT_DIR$/pom.xml" /> - </list> - </option> - </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK" /> -</project> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index b8776654..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.integrationTest.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.integrationTest.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.main.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.main.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.integrationTest.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.integrationTest.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.main.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.main.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.test.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.test.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/keycloak/ozg-antragsraum.ozg-keycloak.iml" filepath="$PROJECT_DIR$/.idea/modules/keycloak/ozg-antragsraum.ozg-keycloak.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.test.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.test.iml" /> - </modules> - </component> -</project> \ No newline at end of file diff --git a/.idea/sonarlint.xml b/.idea/sonarlint.xml deleted file mode 100644 index 0e83d2e6..00000000 --- a/.idea/sonarlint.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="SonarLintProjectSettings"> - <option name="bindingEnabled" value="true" /> - <option name="projectKey" value="de.ozgcloud:antragsraum" /> - <option name="serverId" value="ozg-cloud" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946d..00000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="Palette2"> - <group name="Swing"> - <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> - </item> - <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> - </item> - <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> - </item> - <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> - <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> - </item> - <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> - <initial-values> - <property name="text" value="Button" /> - </initial-values> - </item> - <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> - <initial-values> - <property name="text" value="RadioButton" /> - </initial-values> - </item> - <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> - <initial-values> - <property name="text" value="CheckBox" /> - </initial-values> - </item> - <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> - <initial-values> - <property name="text" value="Label" /> - </initial-values> - </item> - <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> - <preferred-size width="150" height="-1" /> - </default-constraints> - </item> - <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> - <preferred-size width="150" height="-1" /> - </default-constraints> - </item> - <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> - <preferred-size width="150" height="-1" /> - </default-constraints> - </item> - <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> - </item> - <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> - <preferred-size width="200" height="200" /> - </default-constraints> - </item> - <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> - <preferred-size width="200" height="200" /> - </default-constraints> - </item> - <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> - </item> - <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> - </item> - <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> - </item> - <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> - </item> - <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> - <preferred-size width="-1" height="20" /> - </default-constraints> - </item> - <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> - </item> - <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> - </item> - </group> - </component> -</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddf..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="" vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java index 850d16c4..bbe62e43 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java @@ -55,6 +55,7 @@ import lombok.extern.log4j.Log4j2; @RequiredArgsConstructor @SecurityRequirement(name = "security_auth") public class FileController { + static final String PATH = "/api/file/"; // NOSONAR static final String PATH_PATTERN = PATH + "%s/%s"; @@ -127,4 +128,5 @@ public class FileController { throw new InvalidFileTypeException(file.getName()); } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java index f7a44c19..30522a26 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java @@ -28,5 +28,7 @@ import lombok.Builder; public record FileIdentificationData( String fileId, String nachrichtId, - String nachrichtEventId) { + String nachrichtEventId +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java index 1f2a2411..56164c46 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java @@ -20,19 +20,22 @@ package de.ozgcloud.antragsraum.attachments; -import lombok.Getter; -import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.util.unit.DataSize; +import lombok.Getter; +import lombok.Setter; + @Getter @Setter @Configuration @ConfigurationProperties(FileProperties.PREFIX) class FileProperties { - static final String PREFIX = "ozgcloud.upload"; - private DataSize maxFileSize; - private String[] blockedContentTypes; + static final String PREFIX = "ozgcloud.upload"; + + private DataSize maxFileSize; + private String[] blockedContentTypes; + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java index 387b57e6..ecdcdf41 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java @@ -34,6 +34,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class FileRemoteService { + private final @NonNull FileRestClient restClient; private final @NonNull OzgFileMapper ozgFileMapper; @@ -58,4 +59,5 @@ class FileRemoteService { void downloadFileContent(FileIdentificationData fileIdentificationData, String address, OutputStream out) { restClient.downloadFileContent(fileIdentificationData, address, out); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java index 9f9eb985..78d53042 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java @@ -52,6 +52,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class FileRestClient { + static final String FIND_FILE_METADATA_API = "/api/v1/file/metadata"; static final String GET_FILE_CONTENT_API = "/api/v1/file/content"; static final String UPLOAD_FILE_API = "/api/v1/file"; @@ -145,4 +146,5 @@ class FileRestClient { throw new TechnicalException(e); } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java index f1c616ac..300d239e 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java @@ -36,6 +36,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor public class FileService { + private final @NonNull FileRemoteService fileRemoteService; private final @NonNull VirusScannerClient scanner; private final @NonNull NachrichtEventService nachrichtEventService; @@ -75,4 +76,5 @@ public class FileService { boolean isClean(MultipartFile file) { return scanner.scan(file).isEmpty(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java index e99a8f75..5b829070 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java @@ -31,6 +31,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Component class FileValidator { + private final FileProperties fileProperties; boolean isValid(MultipartFile file) { @@ -48,4 +49,5 @@ class FileValidator { return !Arrays.asList(fileProperties.getBlockedContentTypes()).contains(contentType); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java index 8d8a5c65..20faaa5f 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java @@ -50,5 +50,7 @@ public record OzgFile( type = "string", example = "text/plain" ) - String contentType) { + String contentType +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java index 690a2372..6809d04b 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java @@ -28,4 +28,5 @@ import lombok.Builder; @Validated @Builder record OzgUploadFile(String vorgangId, MultipartFile file) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java index 4085c550..531c3df8 100755 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java @@ -46,6 +46,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class VirusScannerClient { + private static final String FILE_REQUEST_KEY = "FILES"; @Value("${clamav.scanUrl}") @@ -88,22 +89,29 @@ class VirusScannerClient { @Getter @Setter static class VirusScanResponse { + private VirusScanData data; private boolean success; + } @Getter @Setter static class VirusScanData { + private VirusScanResult[] result; + } @Getter @Setter static class VirusScanResult { + private String name; @JsonProperty("is_infected") private boolean infected; private String[] viruses; + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java b/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java index aa534539..c60eb0c7 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java @@ -46,5 +46,7 @@ record Command( @Min(0) long createdAt, @Schema(description = "The date on which the command was completed.") - Long finishedAt) { + Long finishedAt +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java index f9d2e37c..d72e5ae4 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java @@ -37,6 +37,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @SecurityRequirement(name = "security_auth") class CommandController { + static final String PATH = "/api"; // NOSONAR private final @NonNull CommandService service; @@ -48,4 +49,5 @@ class CommandController { @Parameter(description = "The id of the NachrichtEvent the command belongs to", example = "60af924b4f1a2560298b4567") @PathVariable String nachrichtEventId) { return service.getCommand(commandId, nachrichtEventId); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java index f66378a0..b573e3c4 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java @@ -23,32 +23,32 @@ package de.ozgcloud.antragsraum.command; import java.time.ZonedDateTime; -import java.util.Objects; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class CommandMapper { - public static final int IN_MILLISECONDS = 1000; +@Mapper +interface CommandMapper { + + int IN_MILLISECONDS = 1000; - static Command fromRestCommand(final AntragraumproxyGrpcCommand command, String nachrichtEventId) { - var createdAt = ZonedDateTime.now().toEpochSecond() + IN_MILLISECONDS; - if (Objects.nonNull(command.getCreatedAt())) { - createdAt = ZonedDateTime.parse(command.getCreatedAt()).toEpochSecond() * IN_MILLISECONDS; - } + @Mapping(target = "createdAt", expression = "java(convertCreatedAt(command.getCreatedAt()))") + @Mapping(target = "finishedAt", expression = "java(convertFinishedAt(command.getFinishedAt()))") + @Mapping(target = "nachrichtEventId", source = "nachrichtEventId") + Command fromRestCommand(AntragraumproxyGrpcCommand command, String nachrichtEventId); - var finishedAt = Objects.isNull(command.getFinishedAt()) || command.getFinishedAt().isEmpty() + default Long convertCreatedAt(String createdAt) { + return createdAt != null + ? ZonedDateTime.parse(createdAt).toEpochSecond() * IN_MILLISECONDS + : ZonedDateTime.now().toEpochSecond() * IN_MILLISECONDS; + } + + default Long convertFinishedAt(String finishedAt) { + return (finishedAt == null || finishedAt.isEmpty()) ? null - : ZonedDateTime.parse(command.getFinishedAt()).toEpochSecond() * IN_MILLISECONDS; - - return Command.builder() - .id(command.getId()) - .nachrichtEventId(nachrichtEventId) - .status(command.getStatus()) - .createdAt(createdAt) - .finishedAt(finishedAt) - .build(); + : ZonedDateTime.parse(finishedAt).toEpochSecond() * IN_MILLISECONDS; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java index 00e112bc..7480d5df 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java @@ -38,5 +38,7 @@ public record CommandReference( type = "string", example = "60af924b4f1a2560298b4567" ) - String nachrichtEventId) { + String nachrichtEventId +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java index 51793b97..de5d0ad4 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java @@ -33,11 +33,14 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class CommandRemoteService { + private final @NonNull CommandRestClient restClient; + private final @NonNull CommandMapper commandMapper; Command getCommand(NachrichtEvent nachrichtEvent, String commandId) { var response = restClient.getCommand(commandId, nachrichtEvent.address()); - return CommandMapper.fromRestCommand(response, nachrichtEvent.id()); + return commandMapper.fromRestCommand(response, nachrichtEvent.id()); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java index 8bb9b294..4f217db9 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java @@ -34,6 +34,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class CommandRestClient { + static final String COMMAND_URI = "/api/v1/command/{commandId}"; private final RestClient restClient; @@ -48,4 +49,5 @@ class CommandRestClient { .header(X_GRPC_ADDRESS, RestClientUtils.sanitizeAddress(address)) .retrieve().toEntity(AntragraumproxyGrpcCommand.class).getBody(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java index 999f22bd..f59b2dec 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java @@ -33,6 +33,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class CommandService { + private final @NonNull CommandRemoteService commandRemoteService; private final @NonNull NachrichtEventService nachrichtEventService; @@ -41,4 +42,5 @@ class CommandService { return commandRemoteService.getCommand(nachrichtEvent, commandId); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundAdvice.java deleted file mode 100644 index 600933f2..00000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class AddressNotFoundAdvice extends ResponseEntityExceptionHandler { - @ResponseBody - @ExceptionHandler(AddressNotFoundException.class) - @ResponseStatus(HttpStatus.NOT_FOUND) - String addressNotFoundHandler(AddressNotFoundException ex) { - LOG.error("Error getting address of target OZG-Cloud instance. Message: " + ex.getMessage(), ex); - return "Target address not found"; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java index 0d596dbc..20fb9f3e 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class AddressNotFoundException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "No NachrichtEvent for id '%s' found"; - public AddressNotFoundException(String replyToId) { - super(String.format(MESSAGE_TEMPLATE, replyToId)); - } + private static final String MESSAGE_TEMPLATE = "No NachrichtEvent for id '%s' found"; + + public AddressNotFoundException(String replyToId) { + super(String.format(MESSAGE_TEMPLATE, replyToId)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/AttachmentNotFoundAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/AttachmentNotFoundAdvice.java deleted file mode 100644 index a3064ebf..00000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/AttachmentNotFoundAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class AttachmentNotFoundAdvice extends ResponseEntityExceptionHandler { - @ResponseBody - @ExceptionHandler(NotFoundException.class) - @ResponseStatus(HttpStatus.NOT_FOUND) - String handleNotFound(NotFoundException ex) { - LOG.error("Error loading attachment.", ex); - return "Attachment not found"; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/ExceptionController.java b/server/src/main/java/de/ozgcloud/antragsraum/common/ExceptionController.java new file mode 100644 index 00000000..d1a6505a --- /dev/null +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/ExceptionController.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.antragsraum.common; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import lombok.extern.log4j.Log4j2; + +@Log4j2 +@ControllerAdvice +public class ExceptionController extends ResponseEntityExceptionHandler { + + @ResponseBody + @ExceptionHandler(AddressNotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + String handleAddressNotFoundException(AddressNotFoundException ex) { + LOG.error("Error getting address of target OZG-Cloud instance. Message: {}", ex.getMessage(), ex); + return "Target address not found"; + } + + @ResponseBody + @ExceptionHandler(NotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + String handleNotFoundException(NotFoundException ex) { + LOG.error("Error loading attachment.", ex); + return "Attachment not found"; + } + + @ExceptionHandler(value = { RuntimeException.class, TechnicalException.class }) + @ResponseBody + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + String handleGeneralException(RuntimeException ex) { + LOG.error("General error.", ex); + return "General error processing your request."; + } + + @ExceptionHandler(value = { InvalidFileTypeException.class }) + ResponseEntity<Object> handleInvalidFileTypeException(RuntimeException ex, WebRequest request) { + LOG.error("Uploaded file is not valid.", ex); + return handleExceptionInternal(ex, "File not acceptable", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); + } + + @ExceptionHandler(value = { VirusFoundException.class }) + ResponseEntity<Object> handleVirusFoundException(RuntimeException ex, WebRequest request) { + LOG.error("Virus found in uploaded file.", ex); + return handleExceptionInternal(ex, "Virus found", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); + } + +} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/GeneralExceptionAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/GeneralExceptionAdvice.java deleted file mode 100755 index 57e73744..00000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/GeneralExceptionAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 9) -public class GeneralExceptionAdvice extends ResponseEntityExceptionHandler { - @ExceptionHandler(value = {RuntimeException.class, TechnicalException.class}) - @ResponseBody - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - String handleException(RuntimeException ex) { - LOG.error("General error.", ex); - return "General error processing your request."; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileAdvice.java deleted file mode 100755 index e24bea7c..00000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileAdvice.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import lombok.extern.log4j.Log4j2; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class InvalidFileAdvice extends ResponseEntityExceptionHandler { - @ExceptionHandler(value = { InvalidFileTypeException.class }) - protected ResponseEntity<Object> handleInvalidFile(RuntimeException ex, WebRequest request) { - LOG.error("Uploaded file is not valid.", ex); - return handleExceptionInternal(ex, "File not acceptable", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java index ef2d2293..bfab6ca9 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java @@ -1,5 +1,7 @@ /* - * Copyright (c) 2023-2024. + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - * Folgeversionen der EUPL ("Lizenz"); @@ -21,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class InvalidFileTypeException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "File '%s' has an unsupported file type"; - public InvalidFileTypeException(String fileName) { - super(String.format(MESSAGE_TEMPLATE, fileName)); - } + private static final String MESSAGE_TEMPLATE = "File '%s' has an unsupported file type"; + + public InvalidFileTypeException(String fileName) { + super(String.format(MESSAGE_TEMPLATE, fileName)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java index 88398b40..2d974e5a 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class NotAccessibleException extends RuntimeException { + private static final String MESSAGE_TEMPLATE = "Current user does not have the required trust level for the Rueckfrage with id '%s'."; public NotAccessibleException(String rueckfrageId) { super(String.format(MESSAGE_TEMPLATE, rueckfrageId)); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java index 543be5a1..a0cbaf2a 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class NotFoundException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "Object '%s' with id '%s' not found."; - public NotFoundException(Class<?> resource, String id) { - super(String.format(MESSAGE_TEMPLATE, resource.getSimpleName(), id)); - } + private static final String MESSAGE_TEMPLATE = "Object '%s' with id '%s' not found."; + + public NotFoundException(Class<?> resource, String id) { + super(String.format(MESSAGE_TEMPLATE, resource.getSimpleName(), id)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java b/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java index c0930e84..b94e1cf8 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java @@ -27,9 +27,11 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class RestClientUtils { + public static String sanitizeAddress(String address) { address = address.replaceAll(":\\d{4}$", ""); address = address.replaceAll("^static://", ""); return address; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutAdvice.java deleted file mode 100755 index 39ee5a62..00000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class SendTimeoutAdvice extends ResponseEntityExceptionHandler { - @ResponseBody - @ExceptionHandler(SendTimeoutException.class) - @ResponseStatus(HttpStatus.GATEWAY_TIMEOUT) - String sendTimeoutHandler(SendTimeoutException ex) { - LOG.error("Timeout while sending answer. Message: " + ex.getMessage(), ex); - return "Timeout while sending answer"; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java index f3fd6b19..ecb333f0 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class TechnicalException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "TechnicalException happened! Message: "; - public TechnicalException(Throwable ex) { - super(MESSAGE_TEMPLATE + ex.getMessage(), ex); - } + private static final String MESSAGE_TEMPLATE = "TechnicalException happened! Message: "; + + public TechnicalException(Throwable ex) { + super(MESSAGE_TEMPLATE + ex.getMessage(), ex); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundAdvice.java deleted file mode 100755 index 6dc0b12e..00000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundAdvice.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class VirusFoundAdvice extends ResponseEntityExceptionHandler { - @ExceptionHandler(value = {VirusFoundException.class}) - protected ResponseEntity<Object> handleVirusFound(RuntimeException ex, WebRequest request) { - LOG.error("Virus found in uploaded file.", ex); - return handleExceptionInternal(ex, "Virus found", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java old mode 100755 new mode 100644 index 6ca6e78d..d5e3887f --- a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class VirusFoundException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "File with nachrichtId '%s' contains virus."; - public VirusFoundException(String id) { - super(String.format(MESSAGE_TEMPLATE, id)); - } + private static final String MESSAGE_TEMPLATE = "File with nachrichtId '%s' contains virus."; + + public VirusFoundException(String id) { + super(String.format(MESSAGE_TEMPLATE, id)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java index f130b513..14a0a555 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class VirusScanException extends RuntimeException { + private static final String MESSAGE_TEMPLATE = "Virus scan for file with name '%s' failed."; public VirusScanException(String fileName) { super(String.format(MESSAGE_TEMPLATE, fileName)); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java index 47f0bcdd..e0ffdb85 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java @@ -31,4 +31,5 @@ public class RepositoryAspectPointcut { void anyPublicRepositoryMethod() { // aspect pointcut - no implementation needed } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java index efb41906..4a2566af 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java @@ -36,4 +36,5 @@ public class RepositoryLoggingAspect extends RepositoryAspectPointcut { public void onRepositoryMethod(JoinPoint joinPoint) { AspectLoggingUtils.log(joinPoint); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java b/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java index 3cf3fb6d..c89d01e0 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java @@ -49,6 +49,7 @@ import lombok.extern.log4j.Log4j2; @NoArgsConstructor @Log4j2 public class InMemoryUserDetailService implements UserDetailsService { + @Value("${ozgcloud.code.expire.seconds:10}") private long codeExpireSeconds; @Value("${ozgcloud.jwt.expiration.minutes}") @@ -138,4 +139,5 @@ public class InMemoryUserDetailService implements UserDetailsService { public void logout(User user) { usersMap.remove(user.getId()); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java index 0221cc6c..e0262ceb 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java @@ -30,6 +30,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class AntragraumproxyGrpcCommandTestFactory { + public static final String ID = CommandTestFactory.ID; static final String CREATED_BY = UUID.randomUUID().toString(); static final String STATUS = CommandTestFactory.STATUS; @@ -45,4 +46,5 @@ class AntragraumproxyGrpcCommandTestFactory { command.setStatus(STATUS); return command; } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java index c098e334..4e35daad 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java @@ -46,6 +46,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) @SpringJUnitConfig(classes = { CommandControllerTestConfiguration.class }) public class CommandControllerITCase { + @SpyBean private CommandController commandController; @@ -57,9 +58,10 @@ public class CommandControllerITCase { @Nested class TestGetCommand { + @BeforeEach void init() { - when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.createCommand()); + when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.create()); } @Test @@ -96,5 +98,7 @@ public class CommandControllerITCase { get(CommandController.PATH + "/command/" + CommandTestFactory.ID + "/" + NachrichtEventTestFactory.ID) .contentType(MediaType.APPLICATION_JSON).characterEncoding(Charset.defaultCharset())); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java index 4506a65d..ae25cb8b 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java @@ -37,6 +37,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @ExtendWith(MockitoExtension.class) class CommandControllerTest { + @Spy @InjectMocks private CommandController commandController; @@ -46,9 +47,10 @@ class CommandControllerTest { @Nested class TestGetCommand { + @BeforeEach void init() { - when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.createCommand()); + when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.create()); } @Test @@ -64,5 +66,7 @@ class CommandControllerTest { assertThat(result).isInstanceOf(Command.class); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java index a2d0064a..f3d94094 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java @@ -39,6 +39,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; classes = { CommandRestClientTestConfiguration.class, CommandRemoteServiceTestConfiguration.class })) @Configuration public class CommandControllerTestConfiguration { + @Bean CommandRestClient commandRestClient() { CommandRestClient restClient = mock(CommandRestClient.class); @@ -48,4 +49,5 @@ public class CommandControllerTestConfiguration { return restClient; } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java index ee9fb45a..7b99cc59 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java @@ -25,47 +25,54 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; class CommandMapperTest { + + private final CommandMapper mapper = Mappers.getMapper(CommandMapper.class); + @Nested - class TestFromGrpcCommand { - private final AntragraumproxyGrpcCommand restCommand = CommandTestFactory.createRestCommand(); + class TestFromRestCommand { + + private final AntragraumproxyGrpcCommand restCommand = GrpcCommandTestFactory.create(); @Test void shouldMapCommandId() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.id()).isEqualTo(CommandTestFactory.ID); } @Test void shouldMapNachrichtEventId() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.nachrichtEventId()).isEqualTo(CommandTestFactory.NACHRICHT_EVENT_ID); } @Test void shouldMapStatus() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.status()).isEqualTo(CommandTestFactory.STATUS); } @Test void shouldMapCreatedAt() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.createdAt()).isEqualTo(CommandTestFactory.CREATED_AT_DATE); } @Test void shouldMapFinishedAt() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.finishedAt()).isEqualTo(CommandTestFactory.FINISHED_AT_DATE); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java index 1dfbd06d..76e0b6a4 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java @@ -24,6 +24,7 @@ package de.ozgcloud.antragsraum.command; import java.util.UUID; public class CommandReferenceTestFactory { + public static final String ID = UUID.randomUUID().toString(); public static final String NACHRICHT_EVENT_ID = UUID.randomUUID().toString(); @@ -36,4 +37,5 @@ public class CommandReferenceTestFactory { .id(ID) .nachrichtEventId(NACHRICHT_EVENT_ID); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java index 18081391..5a3318bf 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java @@ -41,6 +41,7 @@ import lombok.extern.log4j.Log4j2; @DirtiesContext @Log4j2 class CommandRemoteServiceITCase { + private static final String ADDRESS = "http://localhost:8080"; @SpyBean @@ -48,6 +49,7 @@ class CommandRemoteServiceITCase { @Nested class TestGetCommand { + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEventBuilder().address(ADDRESS).build(); @BeforeEach @@ -98,5 +100,7 @@ class CommandRemoteServiceITCase { assertThat(command.finishedAt()).isEqualTo(CommandTestFactory.FINISHED_AT_DATE); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java index 0e015886..1cba2470 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java @@ -36,9 +36,11 @@ import org.mockito.junit.jupiter.MockitoExtension; import de.ozgcloud.antragsraum.common.AddressNotFoundException; import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; +import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; @ExtendWith(MockitoExtension.class) public class CommandRemoteServiceTest { + @Spy @InjectMocks private CommandRemoteService commandRemoteService; @@ -46,11 +48,16 @@ public class CommandRemoteServiceTest { @Mock private CommandRestClient commandRestClient; + @Mock + private CommandMapper commandMapper; + @Nested class TestGetCommand { + @BeforeEach void init() { - when(commandRestClient.getCommand(anyString(), anyString())).thenReturn(CommandTestFactory.createRestCommand()); + when(commandRestClient.getCommand(anyString(), anyString())).thenReturn(GrpcCommandTestFactory.create()); + when(commandMapper.fromRestCommand(any(AntragraumproxyGrpcCommand.class), anyString())).thenReturn(CommandTestFactory.create()); } @Test @@ -59,10 +66,12 @@ public class CommandRemoteServiceTest { assertThat(command).isInstanceOf(Command.class); } + } @Nested class TestNoTargetAddressAvailable { + @BeforeEach void init() { doThrow(AddressNotFoundException.class).when(commandRestClient).getCommand(anyString(), anyString()); @@ -75,5 +84,7 @@ public class CommandRemoteServiceTest { assertThatExceptionOfType(AddressNotFoundException.class).isThrownBy( () -> commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java index 7287f61a..644d54ff 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java @@ -40,7 +40,8 @@ public class CommandRemoteServiceTestConfiguration { private NachrichtEventService nachrichtEventService; @Bean - CommandRemoteService commandRemoteService(@Autowired CommandRestClient commandRestClient) { - return new CommandRemoteService(commandRestClient); + CommandRemoteService commandRemoteService(@Autowired CommandRestClient commandRestClient, @Autowired CommandMapper commandMapper) { + return new CommandRemoteService(commandRestClient, commandMapper); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java index 0a99eff1..119ecda8 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java @@ -44,6 +44,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @SpringJUnitConfig(classes = { CommandRestClientTestConfiguration.class }) @RestClientTest(CommandRestClient.class) class CommandRestClientTest { + final static String ADDRESS = "http://localhost:8382"; private static final String COMMAND_ID = UUID.randomUUID().toString(); @@ -76,4 +77,5 @@ class CommandRestClientTest { assertThat(command.getId()).isEqualTo(AntragraumproxyGrpcCommandTestFactory.ID); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java index 9b92ed59..b4545f1f 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java @@ -39,6 +39,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @ExtendWith(MockitoExtension.class) class CommandServiceTest { + @Spy @InjectMocks private CommandService commandService; @@ -49,11 +50,12 @@ class CommandServiceTest { @Nested class TestGetCommand { + @BeforeEach void init() { final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); when(nachrichtEventService.getNachrichtEventById(NachrichtEventTestFactory.ID)).thenReturn(nachrichtEvent); - when(commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)).thenReturn(CommandTestFactory.createCommand()); + when(commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)).thenReturn(CommandTestFactory.create()); } @Test @@ -62,5 +64,7 @@ class CommandServiceTest { assertThat(result).isInstanceOf(Command.class); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java index d76c60e8..b732c1bb 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java @@ -24,9 +24,8 @@ package de.ozgcloud.antragsraum.command; import java.time.ZonedDateTime; import java.util.UUID; -import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; - public class CommandTestFactory { + public static final String ID = UUID.randomUUID().toString(); static final String NACHRICHT_EVENT_ID = UUID.randomUUID().toString(); static final String STATUS = "FINISHED"; @@ -35,11 +34,11 @@ public class CommandTestFactory { static final String FINISHED_AT = "2024-06-24T08:10:13.076Z"; static final long FINISHED_AT_DATE = ZonedDateTime.parse(FINISHED_AT).toEpochSecond() * 1000; - static Command createCommand() { - return createCommandBuilder().build(); + static Command create() { + return createBuilder().build(); } - static Command.CommandBuilder createCommandBuilder() { + static Command.CommandBuilder createBuilder() { return Command.builder() .id(ID) .nachrichtEventId(NACHRICHT_EVENT_ID) @@ -48,12 +47,4 @@ public class CommandTestFactory { .finishedAt(FINISHED_AT_DATE); } - public static AntragraumproxyGrpcCommand createRestCommand() { - var command = new AntragraumproxyGrpcCommand(); - command.setId(ID); - command.setStatus(STATUS); - command.setCreatedAt(CREATED_AT); - command.setFinishedAt(FINISHED_AT); - return command; - } } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutException.java b/server/src/test/java/de/ozgcloud/antragsraum/command/GrpcCommandTestFactory.java old mode 100755 new mode 100644 similarity index 70% rename from server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutException.java rename to server/src/test/java/de/ozgcloud/antragsraum/command/GrpcCommandTestFactory.java index 88db4a8b..94d697dc --- a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutException.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/GrpcCommandTestFactory.java @@ -19,13 +19,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +package de.ozgcloud.antragsraum.command; -package de.ozgcloud.antragsraum.common; +import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; -public class SendTimeoutException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "A timeout sending a nachricht happened. Command %s did not finish in time! Message: %s"; +public class GrpcCommandTestFactory { + + public static AntragraumproxyGrpcCommand create() { + return new AntragraumproxyGrpcCommand() + .id(CommandTestFactory.ID) + .status(CommandTestFactory.STATUS) + .createdAt(CommandTestFactory.CREATED_AT) + .finishedAt(CommandTestFactory.FINISHED_AT); + } - public SendTimeoutException(String commandId, Throwable ex) { - super(String.format(MESSAGE_TEMPLATE, commandId, ex.getMessage()), ex); - } } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java index 91ea19e6..b8c36737 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java @@ -29,6 +29,7 @@ import java.util.UUID; import org.junit.jupiter.api.Test; class AddressNotFoundExceptionTest { + @Test void shouldCreateException() { var id = UUID.randomUUID().toString(); @@ -36,4 +37,5 @@ class AddressNotFoundExceptionTest { assertThat(exception.getMessage()).isEqualTo("No NachrichtEvent for id '" + id + "' found"); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/ExceptionControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/ExceptionControllerTest.java new file mode 100644 index 00000000..ef54f0c3 --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/ExceptionControllerTest.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.antragsraum.common; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.web.context.request.WebRequest; + +@ExtendWith(MockitoExtension.class) +public class ExceptionControllerTest { + + @InjectMocks + private ExceptionController exceptionController; + + @Nested + class TestHandleAddressNotFoundException { + + @Mock + private AddressNotFoundException exception; + + @Test + void shouldReturnMessage() { + var message = exceptionController.handleAddressNotFoundException(exception); + + assertThat(message).isNotNull(); + } + + } + + @Nested + class TestHandleNotFoundException { + + @Mock + private NotFoundException exception; + + @Test + void shouldReturnMessage() { + var message = exceptionController.handleNotFoundException(exception); + + assertThat(message).isNotNull(); + } + + } + + @Nested + class TestHandleGeneralException { + + @Mock + private TechnicalException exception; + + @Test + void shouldReturnMessage() { + var message = exceptionController.handleGeneralException(exception); + + assertThat(message).isNotNull(); + } + + } + + @Nested + class TestHandleInvalidFileTypeException { + + @Mock + private InvalidFileTypeException exception; + + @Mock + private WebRequest webRequest; + + @Test + void shouldHaveResponse() { + var response = exceptionController.handleInvalidFileTypeException(exception, webRequest); + + assertThat(response).isNotNull(); + } + + @Test + void shouldHaveNotAcceptableError() { + var response = exceptionController.handleInvalidFileTypeException(exception, webRequest); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_ACCEPTABLE); + } + + @Test + void shouldHaveMessage() { + var response = exceptionController.handleInvalidFileTypeException(exception, webRequest); + + assertThat(response.getBody()).isEqualTo("File not acceptable"); + } + + } + + @Nested + class TestHandleVirusFoundException { + + @Mock + private VirusFoundException exception; + + @Mock + private WebRequest webRequest; + + @Test + void shouldHaveResponse() { + var response = exceptionController.handleVirusFoundException(exception, webRequest); + + assertThat(response).isNotNull(); + } + + @Test + void shouldHaveNotAcceptableError() { + var response = exceptionController.handleVirusFoundException(exception, webRequest); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_ACCEPTABLE); + } + + @Test + void shouldHaveMessage() { + var response = exceptionController.handleVirusFoundException(exception, webRequest); + + assertThat(response.getBody()).isEqualTo("Virus found"); + } + + } + +} diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/SendTimeoutExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/InvalidFileTypeExceptionTest.java old mode 100755 new mode 100644 similarity index 58% rename from server/src/test/java/de/ozgcloud/antragsraum/common/SendTimeoutExceptionTest.java rename to server/src/test/java/de/ozgcloud/antragsraum/common/InvalidFileTypeExceptionTest.java index 214bd648..22080cff --- a/server/src/test/java/de/ozgcloud/antragsraum/common/SendTimeoutExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/InvalidFileTypeExceptionTest.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -19,21 +19,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ + package de.ozgcloud.antragsraum.common; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; -import java.util.UUID; +import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +class InvalidFileTypeExceptionTest { -class SendTimeoutExceptionTest { + @Test + void shouldCreateException() { + var fileName = "TestFileName.txt"; + var exception = new InvalidFileTypeException(fileName); - @Test - void shouldCreateException() { - var id = UUID.randomUUID().toString(); - var exception = new SendTimeoutException(id, new RuntimeException("test")); + assertThat(exception.getMessage()).isEqualTo("File '" + fileName + "' has an unsupported file type"); + } - assertThat(exception.getMessage()).isEqualTo("A timeout sending a nachricht happened. Command " + id + " did not finish in time! Message: test"); - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java index 1c92b68d..4a12239c 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java @@ -28,6 +28,7 @@ import java.util.UUID; import org.junit.jupiter.api.Test; class NotAccessibleExceptionTest { + @Test void shouldCreateException() { var rueckfrageId = UUID.randomUUID().toString(); @@ -36,4 +37,5 @@ class NotAccessibleExceptionTest { assertThat(exception.getMessage()).isEqualTo( "Current user does not have the required trust level for the Rueckfrage with id '" + rueckfrageId + "'."); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java index d2837d49..e9d06570 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -21,18 +21,20 @@ */ package de.ozgcloud.antragsraum.common; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; import java.util.UUID; -import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; class NotFoundExceptionTest { - @Test - void shouldCreateException() { - var id = UUID.randomUUID().toString(); - var exception = new NotFoundException(String.class, id); - assertThat(exception.getMessage()).isEqualTo("Object 'String' with id '" + id + "' not found."); - } + @Test + void shouldCreateException() { + var id = UUID.randomUUID().toString(); + var exception = new NotFoundException(String.class, id); + + assertThat(exception.getMessage()).isEqualTo("Object 'String' with id '" + id + "' not found."); + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java index f5aace46..cf2495fb 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java @@ -26,24 +26,19 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Spy; - -import de.ozgcloud.antragsraum.nachricht.NachrichtenRestClient; class RestClientUtilsTest { - @Spy - @InjectMocks - private NachrichtenRestClient restClient; @Nested class TestGrpcAddressSanitizer { + @Test void shouldSanitizeAddress() { var address = RestClientUtils.sanitizeAddress("static://localhost:9090"); assertThat(address).isEqualTo("localhost"); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java index 44ed5387..83e4e79c 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java @@ -39,4 +39,5 @@ class TechnicalExceptionTest { assertThat(exception.getMessage()).isEqualTo("TechnicalException happened! Message: " + MESSAGE); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/SecurityExceptionAdviceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusFoundExceptionTest.java similarity index 64% rename from server/src/test/java/de/ozgcloud/antragsraum/common/SecurityExceptionAdviceTest.java rename to server/src/test/java/de/ozgcloud/antragsraum/common/VirusFoundExceptionTest.java index 36be2b73..820a0ee5 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/SecurityExceptionAdviceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusFoundExceptionTest.java @@ -1,5 +1,7 @@ /* - * Copyright (c) 2024. + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - * Folgeversionen der EUPL ("Lizenz"); @@ -17,23 +19,22 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ - package de.ozgcloud.antragsraum.common; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; import java.util.UUID; -import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; -class SecurityExceptionAdviceTest { - @Test - void shouldCreateException() { - var message = UUID.randomUUID().toString(); +class VirusFoundExceptionTest { - var exception = new SecurityException(message, new RuntimeException("test")); + @Test + void shouldCreateException() { + var id = UUID.randomUUID().toString(); + var exception = new VirusFoundException(id); - assertThat(exception.getMessage()).isEqualTo(message); - } + assertThat(exception.getMessage()).isEqualTo("File with nachrichtId '" + id + "' contains virus."); + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java index 340b6336..0d5515b0 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class VirusScanExceptionTest { + @Test void shouldCreateException() { var fileName = "TestFileName.pdf"; @@ -33,4 +34,5 @@ class VirusScanExceptionTest { assertThat(exception.getMessage()).isEqualTo("Virus scan for file with name '" + fileName + "' failed."); } + } \ No newline at end of file -- GitLab