diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 1d24297ed36ea5281519e7b6e6a33b628c37d4df..0000000000000000000000000000000000000000 --- a/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -# This Dockerfile encapsulate the MIP portal backend application for development purposes. -# We use it to bootstrap the generation of the Hibernate mapping file and the application jar. - -FROM maven:3-jdk-8 - -COPY ./src/docker/init/build-in-docker.sh /build-in-docker.sh - -CMD mkdir /opt/portal/ - -VOLUME /opt/portal/ - -WORKDIR /opt/portal/ - -CMD ["/build-in-docker.sh"] diff --git a/README.md b/README.md index ce9c373c3c20a5b07e8620e7c0d2079dad7ca5f3..3cdb8c03e91eddfaa183f9b2f12b27ed93283846 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,15 @@ ## Introduction -This is the MIP implementation. +This is the MIP backend. ## Usage -Build the project with `./build` and run it with `./run`. +* Build the project: `./build.sh` +* Run the project: `./run.sh` +* Show live logs: `./log.sh` (CTRL+C to quit) +* Stop and remove the running container: `./halt.sh` -## API Documentation using Swagger (Springfox) +## Generate PDF API documentation on build -The API documentation is available at `<BASE URL>/swagger-ui.html`. A JSON version is available at `<BASE URL>/v2/api-docs` - -## TODO - -* Implement SoapUI tests; -* Clean code (both back-end front-end); -* Sync with original Swagger description; -* Externalize configuration (DB parameters, security enabled/disabled, ...); -* Make user tests with multiple users; -* Fix bugs. - -## BUGS - -* Export PDF does not work; - -### Maintenance - -* To keep an updated API documentation, the developers should keep synchronized both the auto-generated swagger file (from Java annotations) with the hand written one. You can follow this method to get a YAML description from the Java-annotated code: - * Add annotations to the Java code; - * Get JSON from `<BASE URL>/v2/api-docs`; - * Convert JSON to YAML on [http://jsontoyaml.com](http://jsontoyaml.com). - \ No newline at end of file +Uncomment the following line in src/docker/build/build-in-docker.sh : +`mvn swagger2markup:convertSwagger2markup asciidoctor:process-asciidoc` diff --git a/build.sh b/build.sh index 748d7fb5c3af2af5940511f0c5df9206f5f57c4f..9430442030af1418d15b607eb7aec43ef166be09 100755 --- a/build.sh +++ b/build.sh @@ -1,13 +1,5 @@ -#!/bin/bash -e +#!/usr/bin/env bash -if groups $USER | grep &>/dev/null '\bdocker\b'; then - DOCKER_COMPOSE="docker-compose" -else - DOCKER_COMPOSE="sudo docker-compose" -fi - -# TODO: Cannot clean otherwise the build fails because of Hibernate schema generation -mvn package -cp target/mip.jar src/docker/build/ - -$DOCKER_COMPOSE build +./halt.sh +docker-compose -f ./docker-compose_build.yml build +docker-compose -f ./docker-compose_build.yml up diff --git a/docker-compose.init.yml b/docker-compose.init.yml deleted file mode 100644 index e5828d70bd0765e4ea7b22decc6685d3a6551456..0000000000000000000000000000000000000000 --- a/docker-compose.init.yml +++ /dev/null @@ -1,21 +0,0 @@ -# Build the application and regenerate the Hibernate mapping - -portaldb: - image: postgres:9.5.3 - container_name: portaldb - ports: - - "55432:5432" - volumes: - - ./src/test/db/sql:/docker-entrypoint-initdb.d/ - environment: - POSTGRES_PASSWORD: test - -portal-backend: - build: . - volumes: - - ./:/portal/ - - ./.m2/:/root/.m2/ - links: - - portaldb - ports: - - "8080:8080" diff --git a/docker-compose.yml b/docker-compose.yml index ad6a91c77c771a297d969a83a5cd6f464c14735e..3902ae28d99a031ce64bb3d938e24bc5f48926a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,10 @@ +version: '2' -portaldb: - image: postgres:9.5.3 - container_name: portaldb - ports: - - "55432:5432" - volumes: - - ./src/test/db/sql:/docker-entrypoint-initdb.d/ - environment: - POSTGRES_PASSWORD: test - -portal-backend: - build: ./src/docker/build - volumes: - - ./src/test/docker/:/opt/portal/config/ - - ./target/:/opt/portal/lib/ - links: - - portaldb - ports: - - "8080:8080" +services: + backend: + container_name: backend + build: + context: . + dockerfile: ./src/docker/run/Dockerfile + ports: + - "8080:8080" diff --git a/docker-compose_build.yml b/docker-compose_build.yml new file mode 100644 index 0000000000000000000000000000000000000000..b29bf59ecd0f6a068269bcc0fed3f0498bb9505d --- /dev/null +++ b/docker-compose_build.yml @@ -0,0 +1,11 @@ +version: '2' + +services: + backend_build: + container_name: backend_build + build: ./src/docker/build/ + volumes: + - ./:/opt/portal/ + - .m2:/root/.m2/ + ports: + - "8080:8080" diff --git a/halt.sh b/halt.sh new file mode 100755 index 0000000000000000000000000000000000000000..7b9c9e76afdaad93310047eeef58c64326caffb9 --- /dev/null +++ b/halt.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +docker-compose kill +docker-compose rm -f diff --git a/log.sh b/log.sh new file mode 100755 index 0000000000000000000000000000000000000000..f1cd4924d74ad499aef9188c070880d2be956cf2 --- /dev/null +++ b/log.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +docker-compose logs -f backend diff --git a/pom.xml b/pom.xml index a9cb39f28e7cf809c411420afed6756ec9965b9e..f568cd0128ea345536e5df38c17c1eeb25ea59d8 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <groupId>org.hbp.mip</groupId> <artifactId>backend-services</artifactId> - <version>0.1.0</version> + <version>DOCKER_BUILD</version> <packaging>jar</packaging> <name>backend-services</name> diff --git a/run.sh b/run.sh index 3483bbcfcb1c7446b56537d6792375c48896efe9..4dc85dc16cce4068bda87ac0f34f4701adff2e31 100755 --- a/run.sh +++ b/run.sh @@ -1,20 +1,4 @@ -#!/bin/bash -e +#!/usr/bin/env bash -# Run the backend in a Docker container and start the database. -# The current project is compiler inside the Docker container - -if groups $USER | grep &>/dev/null '\bdocker\b'; then - DOCKER_COMPOSE="docker-compose" -else - DOCKER_COMPOSE="sudo docker-compose" -fi - -# Create a symlink to the local Maven repository -[ -L .m2 ] || ln -s -t . ~/.m2 - -$DOCKER_COMPOSE --file=docker-compose.init.yml --project-name=portal-backend-init up - -echo "Need to set the current user as owner of the files generated in target directory..." -sudo chown -R $USER:$USER ./target - -echo "Done" +docker-compose build +docker-compose up -d diff --git a/src/docker/build/.gitignore b/src/docker/build/.gitignore deleted file mode 100644 index d392f0e82c4ac6dd2e7bb17eb9253e1b30d07105..0000000000000000000000000000000000000000 --- a/src/docker/build/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.jar diff --git a/src/docker/build/Dockerfile b/src/docker/build/Dockerfile index 1369edf76009678d08db82e5e5ce87ef7b829f85..b4318d788f65cf01d672e59aab38c69b6e4aa17f 100644 --- a/src/docker/build/Dockerfile +++ b/src/docker/build/Dockerfile @@ -1,19 +1,8 @@ -# This Dockerfile encapsulate the MIP portal backend application for development purposes. - FROM maven:3-jdk-8 -RUN apt-get update && apt-get install -y wget -RUN wget https://github.com/jwilder/dockerize/releases/download/v0.2.0/dockerize-linux-amd64-v0.2.0.tar.gz -RUN tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.2.0.tar.gz - -COPY mip.sh /opt/portal/ -COPY mip.jar /opt/portal/lib/ -RUN chmod +x /opt/portal/mip.sh -EXPOSE 8080 - -VOLUME /opt/portal/config/ -VOLUME /opt/portal/lib/ +COPY ./build-in-docker.sh /build-in-docker.sh +VOLUME /opt/portal/ WORKDIR /opt/portal/ -CMD ["/usr/local/bin/dockerize", "-timeout", "240s", "-wait", "tcp://portaldb:5432", "/opt/portal/mip.sh"] +CMD ["bash", "/build-in-docker.sh"] diff --git a/src/docker/build/build-in-docker.sh b/src/docker/build/build-in-docker.sh new file mode 100644 index 0000000000000000000000000000000000000000..1c389dc33511fa5626e5b7faa425ea81e6850ea9 --- /dev/null +++ b/src/docker/build/build-in-docker.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +rm -r target/ +mvn package -DskipTests -P dev + +# Uncomment to generate a PDF API documentation +# mvn swagger2markup:convertSwagger2markup asciidoctor:process-asciidoc diff --git a/src/docker/build/mip.sh b/src/docker/build/mip.sh deleted file mode 100644 index cfae68474c42a1e66b80edb0ea849911ddd8eef4..0000000000000000000000000000000000000000 --- a/src/docker/build/mip.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -/usr/bin/java -DconfigFile=/opt/portal/config/application.yml -jar /opt/portal/lib/mip.jar diff --git a/src/docker/init/build-in-docker.sh b/src/docker/init/build-in-docker.sh deleted file mode 100644 index aff4c2e6c8eaabb623c62b16339b0dde606ead82..0000000000000000000000000000000000000000 --- a/src/docker/init/build-in-docker.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -e - -echo ">>> Building inside Docker" -cd /portal - -mvn package - -echo ">>> Press Ctrl+C to stop, build is complete" diff --git a/src/docker/run/Dockerfile b/src/docker/run/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..61e0c7ee2580f256bfa049f91bb65d31f40350af --- /dev/null +++ b/src/docker/run/Dockerfile @@ -0,0 +1,4 @@ +FROM frolvlad/alpine-oraclejdk8:slim + +COPY ./target/backend-services-DOCKER_BUILD.jar backend.jar +CMD ["java", "-jar", "backend.jar"] diff --git a/src/main/java/org/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java b/src/main/java/org/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java new file mode 100644 index 0000000000000000000000000000000000000000..437052aa882be5f901a312cd269b58578c2b4d0b --- /dev/null +++ b/src/main/java/org/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java @@ -0,0 +1,21 @@ +package org.hbp.mip.utils; + +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class CustomLoginUrlAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint { + + public CustomLoginUrlAuthenticationEntryPoint(String url) { + super(url); + } + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { + response.sendError(HttpServletResponse.SC_UNAUTHORIZED); + } +} diff --git a/start.bat b/start.bat deleted file mode 100644 index af12a1b5207ddf687faaa0fd0f34405c1f966ed3..0000000000000000000000000000000000000000 --- a/start.bat +++ /dev/null @@ -1 +0,0 @@ -start java -jar target\backend-services-0.0.1-SNAPSHOT.jar --spring.config.location=config\application.yml \ No newline at end of file diff --git a/stop.sh b/stop.sh deleted file mode 100755 index 3bc6146acfc2c199f78ff4ceb66ae10aaf91ab51..0000000000000000000000000000000000000000 --- a/stop.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -if groups $USER | grep &>/dev/null '\bdocker\b'; then - DOCKER_COMPOSE="docker-compose" -else - DOCKER_COMPOSE="sudo docker-compose" -fi - -$DOCKER_COMPOSE rm -f