diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2fccb5d3081d485b6b21649db2b976ea2e457a5f..a6d38e74b8452ca7c78195b3aa34bbd0b128cc83 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,8 +10,8 @@ workflow: - when: always variables: - MAVEN_OPTS: "-Xmx500m -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN" - MAVEN_CLI_OPTS: "--batch-mode -DinstallAtEnd=true -DdeployAtEnd=true -DskipDeployBigArtefact=true -s $CI_PROJECT_DIR/ci_settings.xml" + MAVEN_OPTS: "-Xmx500m -XX:+UseSerialGC -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN" + MAVEN_CLI_OPTS: "--batch-mode -DskipDeployBigArtefact=true -s $CI_PROJECT_DIR/ci_settings.xml" stages: - build @@ -30,6 +30,8 @@ maven-build: rules: - if: $OPERATION != null when: never + - if: $CI_COMMIT_TAG != null + when: never - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH variables: MAVEN_GOAL: "install" @@ -42,19 +44,25 @@ maven-build: image: registry.opencode.de/diplanung/ozgxplanung/mvn-build-image:latest script: - mvn package -Dxplan-tests.maven.deploy.skip=true -Pdocker,skipAll -pl $mvnProjects -am + - ci/readEnvPropsForKanikoBuilds.sh > build.env - find . -name docker-build.tar | xargs gzip - set -o pipefail; find . -name docker-build.tar.gz | grep . | xargs du -h rules: - if: $CI_PIPELINE_SOURCE == 'schedule' when: never + - if: $CI_COMMIT_TAG != null + when: on_success - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH when: never - when: on_success artifacts: expire_in: 1 hour + reports: + dotenv: build.env variables: UPSTREAM_REF: $CI_COMMIT_REF_NAME + maven-prepare-docker-contexts-apis-and-inspire-plu: extends: .maven-prepare-docker-contexts variables: @@ -96,23 +104,15 @@ maven-prepare-docker-contexts-others: include: ci/all-kaniko-builds.gitlab-ci.yml -maven-release: -# image: maven:3.8.6-jdk-11 +maven-deploy-release: image: registry.opencode.de/diplanung/ozgxplanung/mvn-build-image:latest - stage: deploy - only: - - main - when: manual - before_script: - - mkdir -p ~/.ssh/ - - cp $DEPLOY_PRIVATE_KEY ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa - - cp $KNOWN_HOSTS ~/.ssh/known_hosts - - apt-get update && apt-get install -y git - - git config --global user.email "noreply@gitlab.opencode.de" - - git config --global user.name "xplanung GitLab CI" - - git checkout -B "$CI_COMMIT_REF_NAME" + stage: build:jvm + rules: + - if: $OPERATION != null + when: never + - if: $CI_COMMIT_TAG != null script: - - mvn release:prepare release:perform $MAVEN_CLI_OPTS -DscmReleaseCommitComment="release @{releaseLabel}" -DtagNameFormat="v@{project.version}" + - mvn $MAVEN_CLI_OPTS deploy -PskipAll -Dxplan-tests.maven.deploy.skip=true gitlab-release: stage: deploy @@ -120,9 +120,9 @@ gitlab-release: rules: - if: $OPERATION != null when: never - - if: $CI_COMMIT_TAG + - if: $CI_COMMIT_TAG != null script: - - echo "Running the release job for $CI_COMMIT_TAG" + - echo "Running job gitlab-release for $CI_COMMIT_TAG" release: tag_name: $CI_COMMIT_TAG name: 'Release $CI_COMMIT_TAG' diff --git a/ci/all-kaniko-builds.gitlab-ci.yml b/ci/all-kaniko-builds.gitlab-ci.yml index 959dd308c367fae55177ae6214c287b2d037bcc4..0a6c703acb2182e446fdd659f5f614dc00970e15 100644 --- a/ci/all-kaniko-builds.gitlab-ci.yml +++ b/ci/all-kaniko-builds.gitlab-ci.yml @@ -5,15 +5,17 @@ name: gcr.io/kaniko-project/executor:v1.9.0-debug entrypoint: [""] script: - - /kaniko/executor --context=tar://${CI_PROJECT_DIR}/$tarGzFile --destination=$destination:$dockerTag + - /kaniko/executor --context=tar://${CI_PROJECT_DIR}/$tarGzFile --destination=$destination:$xplanboxVersion --build-arg="BUILD_DATE='$(date --utc +'%Y-%m-%d %H:%M:%SZ')'" --build-arg="DOCKER_IMAGE_NAME=$dockerImageName" --build-arg="GIT_REVISION=${CI_COMMIT_SHA}" --build-arg="XPLANBOX_IMAGE_NAME_PREFIX=${CI_REGISTRY_IMAGE}/xplanbox" - --build-arg="XPLANBOX_VERSION=${dockerTag}" + --build-arg="XPLANBOX_VERSION=${xplanboxVersion}" rules: - if: $CI_PIPELINE_SOURCE == 'schedule' when: never + - if: $CI_COMMIT_TAG != null + when: on_success - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH when: never - when: on_success @@ -30,6 +32,7 @@ kaniko:xplan-cli-docker: tarGzFile: xplan-cli/xplan-cli-docker/target/docker/xplanbox/xplan-cli/tmp/docker-build.tar.gz needs: - maven-prepare-docker-contexts-cli + - kaniko:xplan-docker-volume-init kaniko:xplan-db-updater: extends: .kaniko:build diff --git a/ci/readEnvPropsForKanikoBuilds.sh b/ci/readEnvPropsForKanikoBuilds.sh new file mode 100755 index 0000000000000000000000000000000000000000..cb003d077cb032e6367d889b898779c0b0882c47 --- /dev/null +++ b/ci/readEnvPropsForKanikoBuilds.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# to be run in a folder with pom.xml + +xplanboxVersion=$(mvn -N help:evaluate -Dexpression=project.version -q -DforceStdout) + +echo -n "xplanboxVersion=$([[ $xplanboxVersion == *SNAPSHOT ]] && echo 'latest' || echo $xplanboxVersion) +" \ No newline at end of file diff --git a/pom.xml b/pom.xml index ba76e2f214b9ecb17a0c33ddd7b76da79123a673..86b31e35f0f09698efe068aad0c696dadb4373e2 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,7 @@ <module>xplan-core</module> <module>xplan-documentation</module> <module>xplan-resources</module> + <module>xplan-security</module> <module>xplan-tests</module> <module>xplan-webapps</module> <module>xplan-webservices</module> @@ -1366,6 +1367,16 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + <version>${spring-boot.version}</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <version>${spring-boot.version}</version> + </dependency> <!-- Spring Security --> <dependency> <groupId>org.springframework.security</groupId> diff --git a/xplan-api/pom.xml b/xplan-api/pom.xml index c32f764c83e52e80f57122271a0e59518ec0198c..b900feb70a5039e2227ccac2aeaaecc677dfc9c4 100644 --- a/xplan-api/pom.xml +++ b/xplan-api/pom.xml @@ -43,14 +43,14 @@ <resource> <directory>src/main/webapp</directory> <includes> - <include>version.txt</include> + <include>**/version.txt</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/webapp</directory> <excludes> - <exclude>version.txt</exclude> + <exclude>**/version.txt</exclude> </excludes> <filtering>false</filtering> </resource> diff --git a/xplan-api/xplan-api-dokumente/.maven-dockerignore b/xplan-api/xplan-api-dokumente/.maven-dockerignore deleted file mode 100644 index c31d316e2fa767833ca4d802db7c259b5dd61b02..0000000000000000000000000000000000000000 --- a/xplan-api/xplan-api-dokumente/.maven-dockerignore +++ /dev/null @@ -1,18 +0,0 @@ -.classpath -.dockerignore -.project -.settings/** - -pom.xml -src/** -target/*.jar.original -target/classes/** -target/dependency-maven-plugin-markers/** -target/docker -target/generated-sources/** -target/generated-test-sources/** -target/m2e-wtp/** -target/maven-*/** -target/surefire-reports/** -target/test-classes/** -target/xplan-api-dokumente-*/*/** \ No newline at end of file diff --git a/xplan-api/xplan-api-dokumente/.maven-dockerinclude b/xplan-api/xplan-api-dokumente/.maven-dockerinclude new file mode 100644 index 0000000000000000000000000000000000000000..fb59421b161353180fcfc72c9e17db8c759869c1 --- /dev/null +++ b/xplan-api/xplan-api-dokumente/.maven-dockerinclude @@ -0,0 +1,2 @@ +run.sh +target/*-repackaged.war \ No newline at end of file diff --git a/xplan-api/xplan-api-dokumente/Dockerfile b/xplan-api/xplan-api-dokumente/Dockerfile index aa8aa56441931585e819af929aa29f408d782643..1a69e8c573e21d234655eae7ae143b955fd15277 100644 --- a/xplan-api/xplan-api-dokumente/Dockerfile +++ b/xplan-api/xplan-api-dokumente/Dockerfile @@ -7,7 +7,7 @@ FROM eclipse-temurin:11.0.21_9-jre-alpine ARG BUILD_DATE=? ARG DOCKER_IMAGE_NAME=? ARG GIT_REVISION=? -ARG JAR_FILE=target/*.jar +ARG WAR_FILE=target/*-repackaged.war ARG XPLANBOX_VERSION=latest # see https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys @@ -34,7 +34,7 @@ ENV JAVA_ADDITIONAL_ARG_JMX_EXPORTER='-javaagent:$JMX_EXPORTER_DIR/jmx_prometheu ENV JAVA_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-dokumenten-config/ -Duser.timezone=Europe/Berlin" ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree -COPY ${JAR_FILE} /xplanbox/app.jar +COPY ${WAR_FILE} /xplanbox/app.war COPY run.sh /xplanbox/ USER 1001 diff --git a/xplan-api/xplan-api-dokumente/pom.xml b/xplan-api/xplan-api-dokumente/pom.xml index 9077b397a8a9e1fe9792c8f090fad96ec24b296f..f548a13ffc5d862a6f7234a61c50c8c3489432c6 100755 --- a/xplan-api/xplan-api-dokumente/pom.xml +++ b/xplan-api/xplan-api-dokumente/pom.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>xplan-api-dokumente</artifactId> - <packaging>jar</packaging> + <packaging>war</packaging> <parent> <groupId>de.latlon.product.xplanbox</groupId> @@ -21,12 +22,15 @@ </dependency> </dependencies> </dependencyManagement> - + <build> - <plugins> + <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <classifier>repackaged</classifier> + </configuration> <executions> <execution> <goals> @@ -51,16 +55,16 @@ </executions> </plugin> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifest> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - </archive> - </configuration> - </plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + </archive> + </configuration> + </plugin> </plugins> </build> @@ -199,10 +203,10 @@ <artifactId>jersey-test-framework-core</artifactId> <scope>test</scope> <exclusions> - <exclusion> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </exclusion> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> </exclusions> </dependency> <dependency> @@ -210,10 +214,10 @@ <artifactId>jersey-test-framework-provider-inmemory</artifactId> <scope>test</scope> <exclusions> - <exclusion> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </exclusion> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> </exclusions> </dependency> <dependency> diff --git a/xplan-api/xplan-api-dokumente/run.sh b/xplan-api/xplan-api-dokumente/run.sh index d12d67ccd8497bb2b4bc582a7eb5b75e5160e792..9da77a35839ad040f46d7781afa3084db7bb46af 100755 --- a/xplan-api/xplan-api-dokumente/run.sh +++ b/xplan-api/xplan-api-dokumente/run.sh @@ -7,4 +7,4 @@ if [ -n "${ALL_ADDITIONAL_ARGS}" ]; then echo "xPlanBox JAVA_OPTS set: $JAVA_OPTS" fi -exec java $JAVA_OPTS -jar /xplanbox/app.jar +exec java $JAVA_OPTS -jar /xplanbox/app.war diff --git a/xplan-api/xplan-api-dokumente/src/main/webapp/version.txt b/xplan-api/xplan-api-dokumente/src/main/webapp/xdokumente/version.txt similarity index 100% rename from xplan-api/xplan-api-dokumente/src/main/webapp/version.txt rename to xplan-api/xplan-api-dokumente/src/main/webapp/xdokumente/version.txt diff --git a/xplan-api/xplan-api-manager/.maven-dockerignore b/xplan-api/xplan-api-manager/.maven-dockerignore deleted file mode 100644 index c31d316e2fa767833ca4d802db7c259b5dd61b02..0000000000000000000000000000000000000000 --- a/xplan-api/xplan-api-manager/.maven-dockerignore +++ /dev/null @@ -1,18 +0,0 @@ -.classpath -.dockerignore -.project -.settings/** - -pom.xml -src/** -target/*.jar.original -target/classes/** -target/dependency-maven-plugin-markers/** -target/docker -target/generated-sources/** -target/generated-test-sources/** -target/m2e-wtp/** -target/maven-*/** -target/surefire-reports/** -target/test-classes/** -target/xplan-api-dokumente-*/*/** \ No newline at end of file diff --git a/xplan-api/xplan-api-manager/.maven-dockerinclude b/xplan-api/xplan-api-manager/.maven-dockerinclude new file mode 100644 index 0000000000000000000000000000000000000000..fb59421b161353180fcfc72c9e17db8c759869c1 --- /dev/null +++ b/xplan-api/xplan-api-manager/.maven-dockerinclude @@ -0,0 +1,2 @@ +run.sh +target/*-repackaged.war \ No newline at end of file diff --git a/xplan-api/xplan-api-manager/Dockerfile b/xplan-api/xplan-api-manager/Dockerfile index 1c343ab7e67f4445008e7c8e04f16798759d14dc..28905fbf080351abd666b0997e5455f82c3ec1a3 100644 --- a/xplan-api/xplan-api-manager/Dockerfile +++ b/xplan-api/xplan-api-manager/Dockerfile @@ -5,7 +5,7 @@ FROM ${XPLANBOX_IMAGE_NAME_PREFIX}/xplan-docker-tomcat-gdal:$XPLANBOX_VERSION ARG BUILD_DATE=? ARG DOCKER_IMAGE_NAME=? ARG GIT_REVISION=? -ARG JAR_FILE=target/*.jar +ARG WAR_FILE=target/*-repackaged.war ARG XPLANBOX_VERSION=latest # see https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys @@ -24,7 +24,7 @@ ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree ENV JAVA_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-manager-config/ -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng" -COPY ${JAR_FILE} /xplanbox/app.jar +COPY ${WAR_FILE} /xplanbox/app.war COPY run.sh /xplanbox/ USER 1001 diff --git a/xplan-api/xplan-api-manager/pom.xml b/xplan-api/xplan-api-manager/pom.xml index 0f95df35f061cd17c663da5f5bf2f0b776f94f61..5c5f1c025eabed7edb8af7d58e165176142c66c4 100644 --- a/xplan-api/xplan-api-manager/pom.xml +++ b/xplan-api/xplan-api-manager/pom.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>xplan-api-manager</artifactId> - <packaging>jar</packaging> + <packaging>war</packaging> <parent> <groupId>de.latlon.product.xplanbox</groupId> @@ -21,13 +22,16 @@ </dependency> </dependencies> </dependencyManagement> - + <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> - <executions> + <configuration> + <classifier>repackaged</classifier> + </configuration> + <executions> <execution> <goals> <goal>repackage</goal> @@ -51,15 +55,15 @@ </executions> </plugin> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifest> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - </archive> - </configuration> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + </archive> + </configuration> </plugin> </plugins> </build> @@ -74,6 +78,11 @@ <groupId>de.latlon.product.xplanbox</groupId> <artifactId>xplan-api-commons</artifactId> </dependency> + <dependency> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplan-security</artifactId> + <version>${project.version}</version> + </dependency> <!-- deegree --> <dependency> <groupId>de.latlon</groupId> @@ -166,10 +175,10 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> - <exclusion> - <groupId>org.apache.tomcat.embed</groupId> - <artifactId>tomcat-embed-el</artifactId> - </exclusion> + <exclusion> + <groupId>org.apache.tomcat.embed</groupId> + <artifactId>tomcat-embed-el</artifactId> + </exclusion> </exclusions> </dependency> <!-- logging --> @@ -223,26 +232,26 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> <scope>test</scope> - <exclusions> - <exclusion> - <groupId>*</groupId> - <artifactId>*</artifactId> - </exclusion> - </exclusions> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.glassfish.jersey.test-framework</groupId> <artifactId>jersey-test-framework-core</artifactId> <scope>test</scope> <exclusions> - <exclusion> - <groupId>org.hamcrest</groupId> - <artifactId>hamcrest-core</artifactId> - </exclusion> - <exclusion> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </exclusion> + <exclusion> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-core</artifactId> + </exclusion> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> </exclusions> </dependency> <dependency> @@ -250,10 +259,10 @@ <artifactId>jersey-test-framework-provider-inmemory</artifactId> <scope>test</scope> <exclusions> - <exclusion> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </exclusion> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> </exclusions> </dependency> <dependency> diff --git a/xplan-api/xplan-api-manager/run.sh b/xplan-api/xplan-api-manager/run.sh index d12d67ccd8497bb2b4bc582a7eb5b75e5160e792..9da77a35839ad040f46d7781afa3084db7bb46af 100755 --- a/xplan-api/xplan-api-manager/run.sh +++ b/xplan-api/xplan-api-manager/run.sh @@ -7,4 +7,4 @@ if [ -n "${ALL_ADDITIONAL_ARGS}" ]; then echo "xPlanBox JAVA_OPTS set: $JAVA_OPTS" fi -exec java $JAVA_OPTS -jar /xplanbox/app.jar +exec java $JAVA_OPTS -jar /xplanbox/app.war diff --git a/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/SpringBootApp.java b/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/SpringBootApp.java index a520bda0cd2cc5b37a970f292f157838d924120c..d817847a574bb83d0418b1ce681abc6495837720 100644 --- a/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/SpringBootApp.java +++ b/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/SpringBootApp.java @@ -25,11 +25,13 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan(basePackages = { "de.latlon.xplanbox.api.manager.config" }) -@EnableAutoConfiguration(exclude = { QuartzAutoConfiguration.class, LiquibaseAutoConfiguration.class }) +@EnableAutoConfiguration( + exclude = { QuartzAutoConfiguration.class, LiquibaseAutoConfiguration.class, SecurityAutoConfiguration.class }) public class SpringBootApp { public static void main(String[] args) { diff --git a/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java b/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java index ff89e7d0a42b2bfa48b983c8a7b69666ca261d15..8f6cf17a75892d73e84782d601b24117e6d998a5 100644 --- a/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java +++ b/xplan-api/xplan-api-manager/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java @@ -81,6 +81,7 @@ import de.latlon.xplan.validator.semantic.xquery.XQuerySemanticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; +import de.latlon.xplanbox.security.config.SecurityContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; @@ -108,7 +109,7 @@ import static de.latlon.xplan.manager.workspace.WorkspaceUtils.DEFAULT_XPLANSYN_ */ @Configuration @ComponentScan(basePackages = { "de.latlon.xplanbox.api.manager.handler" }) -@Import({ JpaContext.class, RasterStorageContext.class, AmazonS3RasterStorageContext.class, +@Import({ SecurityContext.class, JpaContext.class, RasterStorageContext.class, AmazonS3RasterStorageContext.class, DocumentStorageContext.class, StorageCleanUpContext.class }) public class ApplicationContext { diff --git a/xplan-api/xplan-api-manager/src/main/webapp/version.txt b/xplan-api/xplan-api-manager/src/main/webapp/xmanager/version.txt similarity index 100% rename from xplan-api/xplan-api-manager/src/main/webapp/version.txt rename to xplan-api/xplan-api-manager/src/main/webapp/xmanager/version.txt diff --git a/xplan-api/xplan-api-validator/.maven-dockerignore b/xplan-api/xplan-api-validator/.maven-dockerignore deleted file mode 100644 index c10873ac5b13bb0a3559ff43e4c9e9c44dc63b3a..0000000000000000000000000000000000000000 --- a/xplan-api/xplan-api-validator/.maven-dockerignore +++ /dev/null @@ -1,19 +0,0 @@ -# 2023-02-07: excludes allow to reduce tar size from 217M to 98M -.classpath -.dockerignore -.project -.settings/** - -pom.xml -src/** -target/*.jar.original -target/classes/** -target/dependency-maven-plugin-markers/** -target/docker -target/generated-sources/** -target/generated-test-sources/** -target/m2e-wtp/** -target/maven-*/** -target/surefire-reports/** -target/test-classes/** -target/xplan-api-validator-*/*/** diff --git a/xplan-api/xplan-api-validator/.maven-dockerinclude b/xplan-api/xplan-api-validator/.maven-dockerinclude new file mode 100644 index 0000000000000000000000000000000000000000..fb59421b161353180fcfc72c9e17db8c759869c1 --- /dev/null +++ b/xplan-api/xplan-api-validator/.maven-dockerinclude @@ -0,0 +1,2 @@ +run.sh +target/*-repackaged.war \ No newline at end of file diff --git a/xplan-api/xplan-api-validator/Dockerfile b/xplan-api/xplan-api-validator/Dockerfile index c236f94bbda1070691df8d17b1c1d871da7d4ba9..8006e14dd477bd897df79dbbcf1bdf47b824d999 100644 --- a/xplan-api/xplan-api-validator/Dockerfile +++ b/xplan-api/xplan-api-validator/Dockerfile @@ -7,7 +7,7 @@ FROM eclipse-temurin:11.0.21_9-jre-alpine ARG BUILD_DATE=? ARG DOCKER_IMAGE_NAME=? ARG GIT_REVISION=? -ARG JAR_FILE=target/*.jar +ARG WAR_FILE=target/*-repackaged.war ARG XPLANBOX_VERSION=latest # see https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys @@ -34,7 +34,7 @@ ENV JAVA_ADDITIONAL_ARG_JMX_EXPORTER='-javaagent:$JMX_EXPORTER_DIR/jmx_prometheu ENV JAVA_ADDITIONAL_ARG_APP="-DXPLANBOX_CONFIG=/xplanbox/xplan-validator-config/ -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -Djts.overlay=ng -Duser.timezone=Europe/Berlin" ENV DEEGREE_WORKSPACE_ROOT=/xplanbox/deegree -COPY ${JAR_FILE} /xplanbox/app.jar +COPY ${WAR_FILE} /xplanbox/app.war COPY run.sh /xplanbox/ USER 1001 diff --git a/xplan-api/xplan-api-validator/pom.xml b/xplan-api/xplan-api-validator/pom.xml index 994a97cbff1d6eb5a4c48e451c8a530c7da13736..3a2dc2c74673d15d1baf118c4aaa8357cb7c1fee 100755 --- a/xplan-api/xplan-api-validator/pom.xml +++ b/xplan-api/xplan-api-validator/pom.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>xplan-api-validator</artifactId> - <packaging>jar</packaging> + <packaging>war</packaging> <parent> <groupId>de.latlon.product.xplanbox</groupId> @@ -43,7 +44,9 @@ <port>8080</port> <idleTimeout>60000</idleTimeout> </httpConnector> - <jvmArgs>--illegal-access=warn --add-opens java.base/java.lang=ALL-UNNAMED -Dorg.eclipse.jetty.webapp.LEVEL=DEBUG -Dcatalina.base=${project.basedir}/target</jvmArgs> + <jvmArgs>--illegal-access=warn --add-opens java.base/java.lang=ALL-UNNAMED + -Dorg.eclipse.jetty.webapp.LEVEL=DEBUG -Dcatalina.base=${project.basedir}/target + </jvmArgs> </configuration> <!-- <executions> @@ -71,13 +74,16 @@ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal> - </goals> - </execution> - </executions> + <configuration> + <classifier>repackaged</classifier> + </configuration> + <executions> + <execution> + <goals> + <goal>repackage</goal> + </goals> + </execution> + </executions> </plugin> <plugin><!-- redeclare here to run *after* spring-boot repackage --> <groupId>io.fabric8</groupId> @@ -95,16 +101,16 @@ </executions> </plugin> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifest> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - </archive> - </configuration> - </plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + </archive> + </configuration> + </plugin> </plugins> </build> <dependencies> @@ -127,6 +133,11 @@ <groupId>de.latlon.product.xplanbox</groupId> <artifactId>xplan-api-commons</artifactId> </dependency> + <dependency> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplan-security</artifactId> + <version>${project.version}</version> + </dependency> <!-- XPlanung --> <dependency> <groupId>de.xleitstelle.xplanung</groupId> @@ -221,7 +232,7 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> - + <!-- logging --> <dependency> <groupId>org.slf4j</groupId> diff --git a/xplan-api/xplan-api-validator/run.sh b/xplan-api/xplan-api-validator/run.sh index d12d67ccd8497bb2b4bc582a7eb5b75e5160e792..9da77a35839ad040f46d7781afa3084db7bb46af 100755 --- a/xplan-api/xplan-api-validator/run.sh +++ b/xplan-api/xplan-api-validator/run.sh @@ -7,4 +7,4 @@ if [ -n "${ALL_ADDITIONAL_ARGS}" ]; then echo "xPlanBox JAVA_OPTS set: $JAVA_OPTS" fi -exec java $JAVA_OPTS -jar /xplanbox/app.jar +exec java $JAVA_OPTS -jar /xplanbox/app.war diff --git a/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/SpringBootApp.java b/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/SpringBootApp.java index 675eed1e3aad21c42f2eb6f29d7622ef32cfe95a..efb3215d534a2022f4c31669c939c35c83c49131 100644 --- a/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/SpringBootApp.java +++ b/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/SpringBootApp.java @@ -21,11 +21,14 @@ package de.latlon.xplanbox.api.validator; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan(basePackages = { "de.latlon.xplanbox.api.validator.config" }) +@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class }) public class SpringBootApp { public static void main(String[] args) { diff --git a/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java b/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java index fc4c339c3ca6054578d24b54441598896322275d..cfb8b7a10b2a3f01ecc83ecaf834a3101e9a3d64 100644 --- a/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java +++ b/xplan-api/xplan-api-validator/src/main/java/de/latlon/xplanbox/api/validator/config/ApplicationContext.java @@ -20,22 +20,6 @@ */ package de.latlon.xplanbox.api.validator.config; -import static java.nio.file.Files.createTempDirectory; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.core.io.ResourceLoader; - import de.latlon.xplan.commons.configuration.PropertiesLoader; import de.latlon.xplan.commons.configuration.SystemPropertyPropertiesLoader; import de.latlon.xplan.manager.web.shared.ConfigurationException; @@ -57,13 +41,29 @@ import de.latlon.xplan.validator.syntactic.SyntacticValidator; import de.latlon.xplan.validator.syntactic.SyntacticValidatorImpl; import de.latlon.xplan.validator.wms.config.ValidatorWmsContext; import de.latlon.xplanbox.api.commons.handler.SystemConfigHandler; +import de.latlon.xplanbox.security.config.SecurityContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.io.ResourceLoader; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static java.nio.file.Files.createTempDirectory; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @Configuration @ComponentScan(basePackages = { "de.latlon.xplanbox.api.validator.handler", "de.latlon.xplanbox.api.validator.v1" }) -@Import(ValidatorWmsContext.class) +@Import({ SecurityContext.class, ValidatorWmsContext.class }) public class ApplicationContext { @Autowired diff --git a/xplan-api/xplan-api-validator/src/main/webapp/version.txt b/xplan-api/xplan-api-validator/src/main/webapp/xvalidator/version.txt similarity index 100% rename from xplan-api/xplan-api-validator/src/main/webapp/version.txt rename to xplan-api/xplan-api-validator/src/main/webapp/xvalidator/version.txt diff --git a/xplan-cli/xplan-transform-cli/pom.xml b/xplan-cli/xplan-transform-cli/pom.xml index daa772796257057b2a3a65334037543b4b62dd18..ed8eb4c8386c3d5fac43a8214a96a3e34b724191 100644 --- a/xplan-cli/xplan-transform-cli/pom.xml +++ b/xplan-cli/xplan-transform-cli/pom.xml @@ -3,6 +3,7 @@ <modelVersion>4.0.0</modelVersion> <artifactId>xplan-transform-cli</artifactId> <description>Kommandozeilentool fuer die Transformation zwischen XPlanGML Versionen</description> + <!-- XPlanTransformCLI is deprecated and will be removed in a future version. --> <parent> <groupId>de.latlon.product.xplanbox</groupId> diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformAllExecutor.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformAllExecutor.java index 4439f0302f27dfcac06353af251dc712963cafa7..8b013b097cab459a6d611092f13a7c4eefe8c8bd 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformAllExecutor.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformAllExecutor.java @@ -32,6 +32,7 @@ import java.sql.SQLException; import static de.latlon.xplan.commons.cli.DatabaseUtils.closeQuietly; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class TransformAllExecutor { diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformApplicationRunner.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformApplicationRunner.java index 9889d23d3689e8b828a9d8ae998ff3af2a16f130..5ddf8985f7dcf627d462eab39765ea646ce9d23e 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformApplicationRunner.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformApplicationRunner.java @@ -45,6 +45,7 @@ import static java.nio.file.Files.exists; import static java.nio.file.Files.isDirectory; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ @Component diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformationSynchronizer.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformationSynchronizer.java index 5d3d941984867ddc20c7c51c00daa8707c594058..258ec085cefbc5b618c9a879b87d8939560a84b7 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformationSynchronizer.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformationSynchronizer.java @@ -57,6 +57,7 @@ import static de.latlon.xplan.commons.XPlanVersion.XPLAN_41; import static de.latlon.xplan.transform.cli.TransformApplicationRunner.LOG_TABLE_NAME; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class TransformationSynchronizer implements Synchronizer { diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformingValidator.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformingValidator.java index 1769cb36baa637ea473131d4a6f6c009631f4b70..06ffe5d1d8bd175c66a8728e76bf448a80d63b8f 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformingValidator.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/TransformingValidator.java @@ -42,6 +42,7 @@ import java.io.IOException; import java.io.InputStream; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class TransformingValidator { diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/ValidateExecutor.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/ValidateExecutor.java index 2d13dbd5d451a0a4144c21d0d5511a5827736b07..a463c55571701f49541fd2367fd7ab3228e410c2 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/ValidateExecutor.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/ValidateExecutor.java @@ -32,6 +32,7 @@ import java.util.List; import static de.latlon.xplan.commons.XPlanVersion.XPLAN_41; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class ValidateExecutor { diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/XPlanTransformCLI.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/XPlanTransformCLI.java index b9d0347c58e173a6530e4c8663029aea82e91f3a..a2e0fb760786748f2a80b3d5e915539ee187df23 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/XPlanTransformCLI.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/XPlanTransformCLI.java @@ -20,18 +20,16 @@ */ package de.latlon.xplan.transform.cli; -import de.latlon.xplan.transform.cli.config.ApplicationContext; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; import static de.latlon.xplan.transform.cli.TransformApplicationRunner.LOG_TABLE_NAME; /** * Kommandozeilenwerkzeug (command line interface) zum Verwalten von XPlanArchiven. * + * @deprecated will be removed in a future version. * @author <a href="mailto:schneider@occamlabs.de">Markus Schneider</a> * @since 1.0 */ diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java index ad93bd480eea98f4be9b5538debc72d262c39f0f..9aeb92d13b7e023ca03ccd4bbacb782ccfb99894 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java @@ -58,6 +58,7 @@ import static de.latlon.xplan.manager.workspace.WorkspaceUtils.instantiateWorksp /** * Spring Application Context for initialising TransformTool components. * + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> */ @Configuration diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/CsvTransformationResultWriter.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/CsvTransformationResultWriter.java index 234277f8f7b9eea986d9059855cba87fa700c5bf..3f0a66cd145642477908c914f697f2b248454317 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/CsvTransformationResultWriter.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/CsvTransformationResultWriter.java @@ -40,6 +40,7 @@ import static java.nio.file.Files.newOutputStream; import static org.apache.commons.io.IOUtils.write; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class CsvTransformationResultWriter implements TransformationResultWriter { diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/FileTransformationResultWriter.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/FileTransformationResultWriter.java index 7c55188b8daa72b111ab158410322462e8a14e58..dbfd1138a69a1b4e7242d800c422d969059f8907 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/FileTransformationResultWriter.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/FileTransformationResultWriter.java @@ -37,6 +37,7 @@ import static java.nio.file.Files.newOutputStream; import static org.apache.commons.io.IOUtils.write; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class FileTransformationResultWriter implements TransformationResultWriter { diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformationResultWriter.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformationResultWriter.java index 1b5ebd5f058e6b923d7d163d44aec24f1407cba7..d3d535a7a8ba1fc36d37d948d9c07d1a06a50ffd 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformationResultWriter.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformationResultWriter.java @@ -26,6 +26,7 @@ import de.latlon.xplan.validator.syntactic.report.SyntacticValidatorResult; import java.io.Closeable; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public interface TransformationResultWriter extends Closeable { diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformingValidationResult.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformingValidationResult.java index aee61dffacc9d2c07f0efab6bb2ecb24282ee1a8..49e2fdf37f7d0be4cf6144e1e0ae28e50c4d7629 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformingValidationResult.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/result/TransformingValidationResult.java @@ -25,6 +25,7 @@ import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.validator.syntactic.report.SyntacticValidatorResult; /** + * @deprecated will be removed in a future version. * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class TransformingValidationResult { diff --git a/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanTransform_CLI.adoc b/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanTransform_CLI.adoc index 863c5b48710f16c08375a4c42917e81fc1c3070c..fc232679023b003b113e2c11eb35ec96553fea41 100644 --- a/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanTransform_CLI.adoc +++ b/xplan-documentation/xplan-benutzerhandbuch/src/main/asciidoc/XPlanTransform_CLI.adoc @@ -5,12 +5,9 @@ Die Komponente XPlanTransformCLI ist ein Kommandozeilenwerkzeug, welches dem Fac Die transformierten Pläne können entweder syntaktisch validiert und das Validierungsergebnis in eine CSV-Datei geschrieben werden oder die transformierten Pläne werden in die entsprechende Datenhaltung eingespielt. -[NOTE] -==== +NOTE: Unterstützt wird derzeit die Transformation von XPlanGML 4.1 nach XPlanGML 5.1 -Unterstützt wird derzeit die Transformation von XPlanGML 4.1 nach XPlanGML 5.1 - -==== +IMPORTANT: Das XPlanTransformCLI ist veraltet und wird in zukünftigen Versionen der xPlanBox entfernt [[xplantransform-cli-installation]] === Installation diff --git a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/architektur.adoc b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/architektur.adoc index f5436b8458feeb3a0ce3b1da4c66fc17e1171a4a..a441d88fc49dd90564eb8aac9bf837cad0f1c2ad 100644 --- a/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/architektur.adoc +++ b/xplan-documentation/xplan-betriebshandbuch/src/main/asciidoc/architektur.adoc @@ -88,6 +88,8 @@ welches dem Fachadministrator der xPlanBox ermöglicht, bereits über den XPlanManagerWeb oder das XPlanManagerCLI importierte Pläne in eine aktuellere XPlanGML-Version zu transformieren und in der <<xplandb>> zu speichern. +IMPORTANT: Das XPlanTransformCLI ist veraltet und wird in zukünftigen Versionen der xPlanBox entfernt. + [[xplanevaluationschemasynchronize-cli]] === XPlanAuswerteschemaCLI diff --git a/xplan-security/pom.xml b/xplan-security/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..7b928556b436f59b4851d0c59c71d7a91f60fd37 --- /dev/null +++ b/xplan-security/pom.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>xplan-security</artifactId> + + <parent> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplanbox</artifactId> + <version>7.1-SNAPSHOT</version> + </parent> + + <dependencies> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + </dependency> + <!-- logging --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <!-- test --> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + +</project> diff --git a/xplan-security/src/main/java/de/latlon/xplanbox/security/authentication/PropertiesFileUserDetailsManager.java b/xplan-security/src/main/java/de/latlon/xplanbox/security/authentication/PropertiesFileUserDetailsManager.java new file mode 100644 index 0000000000000000000000000000000000000000..7721fac23399fc423cb17bcbaf44b3557512bf66 --- /dev/null +++ b/xplan-security/src/main/java/de/latlon/xplanbox/security/authentication/PropertiesFileUserDetailsManager.java @@ -0,0 +1,79 @@ +package de.latlon.xplanbox.security.authentication; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.UserDetailsManager; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Map; +import java.util.Properties; +import java.util.stream.Collectors; + +/** + * {@link UserDetailsManager} managing user details from properties file + * + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 7.1 + */ +public class PropertiesFileUserDetailsManager implements UserDetailsManager { + + private static final Logger LOG = LoggerFactory.getLogger(PropertiesFileUserDetailsManager.class); + + private final Map<String, String> usersAndEncryptedPasswords; + + public PropertiesFileUserDetailsManager(String userPropertiesFile, PasswordEncoder passwordEncoder) + throws SecurityConfigurationException { + try (FileInputStream inputStream = new FileInputStream(userPropertiesFile)) { + Properties users = new Properties(); + users.load(inputStream); + this.usersAndEncryptedPasswords = users.entrySet() + .stream() + .collect(Collectors.toMap(entry -> (String) entry.getKey(), + entry -> passwordEncoder.encode((String) entry.getValue()))); + } + catch (IOException e) { + LOG.error("Properties file with users could not be read. ", e); + throw new SecurityConfigurationException(e); + } + } + + @Override + public void createUser(UserDetails user) { + throw new UnsupportedOperationException(); + } + + @Override + public void updateUser(UserDetails user) { + throw new UnsupportedOperationException(); + } + + @Override + public void deleteUser(String username) { + throw new UnsupportedOperationException(); + } + + @Override + public void changePassword(String oldPassword, String newPassword) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean userExists(String username) { + return usersAndEncryptedPasswords.containsKey(username); + } + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + if (!userExists(username)) { + throw new UsernameNotFoundException(username); + } + String password = this.usersAndEncryptedPasswords.get(username); + return User.withUsername(username).password(password).roles("USER_ROLE").build(); + } + +} diff --git a/xplan-security/src/main/java/de/latlon/xplanbox/security/authentication/SecurityConfigurationException.java b/xplan-security/src/main/java/de/latlon/xplanbox/security/authentication/SecurityConfigurationException.java new file mode 100644 index 0000000000000000000000000000000000000000..b7b9da4d2bdae0711729905f024a1dfae7c134ec --- /dev/null +++ b/xplan-security/src/main/java/de/latlon/xplanbox/security/authentication/SecurityConfigurationException.java @@ -0,0 +1,15 @@ +package de.latlon.xplanbox.security.authentication; + +/** + * Indicates a misconfiguration in the security module. + * + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 7.1 + */ +public class SecurityConfigurationException extends Exception { + + public SecurityConfigurationException(Throwable e) { + super(e); + } + +} diff --git a/xplan-security/src/main/java/de/latlon/xplanbox/security/config/SecurityContext.java b/xplan-security/src/main/java/de/latlon/xplanbox/security/config/SecurityContext.java new file mode 100644 index 0000000000000000000000000000000000000000..1bebe7c5513d2729cfa1b98b4297a3734627af09 --- /dev/null +++ b/xplan-security/src/main/java/de/latlon/xplanbox/security/config/SecurityContext.java @@ -0,0 +1,49 @@ +package de.latlon.xplanbox.security.config; + +import de.latlon.xplanbox.security.authentication.PropertiesFileUserDetailsManager; +import de.latlon.xplanbox.security.authentication.SecurityConfigurationException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 7.1 + */ +@EnableWebSecurity +@Configuration +@Profile("enableSecurity") +@ComponentScan(basePackages = { "de.latlon.xplanbox.security" }) +public class SecurityContext { + + private static final Logger LOG = LoggerFactory.getLogger(SecurityContext.class); + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + LOG.info("Configure security."); + http.csrf((csrf) -> csrf.disable()).authorizeRequests().anyRequest().authenticated().and().httpBasic(); + return http.build(); + } + + @Bean + public PropertiesFileUserDetailsManager userDetailsService( + @Value("#{environment.XPLAN_SECURITY_USER_PROPERTIES_FILE}") String userPropertiesFile, + PasswordEncoder passwordEncoder) throws SecurityConfigurationException { + return new PropertiesFileUserDetailsManager(userPropertiesFile, passwordEncoder); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + +} \ No newline at end of file diff --git a/xplan-security/src/test/java/de/latlon/xplanbox/security/config/SecurityContextTest.java b/xplan-security/src/test/java/de/latlon/xplanbox/security/config/SecurityContextTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4705d2f1e2940594d14c3a62163ed1a251e46d46 --- /dev/null +++ b/xplan-security/src/test/java/de/latlon/xplanbox/security/config/SecurityContextTest.java @@ -0,0 +1,19 @@ +package de.latlon.xplanbox.security.config; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + */ +@SpringBootTest +@ContextConfiguration(classes = SecurityContext.class) +public class SecurityContextTest { + + @Test + public void contextLoad() { + + } + +} diff --git a/xplan-tests/xplan-tests-soapui/pom.xml b/xplan-tests/xplan-tests-soapui/pom.xml index cb2cb464956f5ab467c78e02021f294257fc5fcd..081c6d3f09240f3f2d80430757ea54bfa614244f 100644 --- a/xplan-tests/xplan-tests-soapui/pom.xml +++ b/xplan-tests/xplan-tests-soapui/pom.xml @@ -90,6 +90,7 @@ <settingsFile>${basedir}/src/main/resources/soapui-settings.xml</settingsFile> <outputFolder>${project.build.directory}/soapui</outputFolder> <junitReport>true</junitReport> + <exportAll>true</exportAll> <testFailIgnore>true</testFailIgnore> <endpoint>${endpoint}</endpoint> <username>${username}</username> diff --git a/xplan-tests/xplan-tests-soapui/runAllSoapUiTests.sh b/xplan-tests/xplan-tests-soapui/runAllSoapUiTests.sh index c199bb8c10ca63dd3f5ec8847f3df61b389b0f83..0caa5c19c3557774d1c5e331c2f6eb0c16d30e3a 100755 --- a/xplan-tests/xplan-tests-soapui/runAllSoapUiTests.sh +++ b/xplan-tests/xplan-tests-soapui/runAllSoapUiTests.sh @@ -48,7 +48,7 @@ echo "Transforming to PDF $REPORT_PATH_PDF..." sed -i 's/display:none;//' target/site/surefire-report.html weasyprint file://$PWD/target/site/surefire-report.html $REPORT_PATH_PDF REPORT_PATH_TAR=target/test-report.tar.gz -tar cfz $REPORT_PATH_TAR -C target/site . +tar cfz $REPORT_PATH_TAR -C target site soapui if [ "$XPLAN_UPLOAD_TEST_REPORT" = "true" ]; then diff --git a/xplan-webapps/xplan-root/Dockerfile b/xplan-webapps/xplan-root/Dockerfile index f0817e221516f6d2a9afd16155078e108cff79bb..b2d3abfe2f4d9b576fa969ebe3081eedad1191bc 100644 --- a/xplan-webapps/xplan-root/Dockerfile +++ b/xplan-webapps/xplan-root/Dockerfile @@ -1,5 +1,22 @@ FROM httpd:2.4.58-alpine +ARG BUILD_DATE=? +ARG DOCKER_IMAGE_NAME=? +ARG GIT_REVISION=? +ARG WEB_CONTEXT=ROOT +ARG XPLANBOX_VERSION=latest +# see https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys +LABEL "org.opencontainers.image.created"="$BUILD_DATE" \ + "org.opencontainers.image.description"="ozgxplanung xPlanBox component" \ + "org.opencontainers.image.licenses"="GNU Affero General Public License & others" \ + "org.opencontainers.image.ref.name"="$DOCKER_IMAGE_NAME" \ + "org.opencontainers.image.revision"="$GIT_REVISION" \ + "org.opencontainers.image.title"="ozgxplanung - $DOCKER_IMAGE_NAME" \ + "org.opencontainers.image.url"="https://gitlab.opencode.de/diplanung/ozgxplanung" \ + "org.opencontainers.image.vendor"="lat/lon GmbH" \ + "org.opencontainers.image.version"="$XPLANBOX_VERSION" + +RUN apk add -U tzdata ENV TZ=Europe/Berlin -COPY target/xplan-root-*-default /usr/local/apache2/htdocs/ \ No newline at end of file +COPY target/xplan-root-*-default /usr/local/apache2/htdocs/