Skip to content
This repository has been archived by the owner on Dec 11, 2020. It is now read-only.

MTES-MCT/rieau-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RIEAU API

CircleCI

API backend de RIEAU

Développement

Prérequis

  • Java 11, par exemple AdoptOpenJDK 11 installé depuis sdkman.

  • Adaptez les variables à l'environnement de dev:

cp src/main/resources/application-{env}.properties.sample src/main/resources/application-{env}.properties
  • Activez l'environnement de dev en ajoutant:
-Pdev

Ce dernier bouchonne la persistence des fichiers en filesystem, des données en mémoire dans une base H2 et l'authentification est basique avec Spring security.

Sinon, par défaut c'est l'environnement d'intégration qui est activé. Ce dernier intègre la persistence des fichiers avec un serveur Minio, des données avec une base PostgreSQL et l'authentification avec un serveur Oauth2/OIDC Keycloak. Ces derniers doivent être lancés en préalable avec une stack docker-compose en phase de développement:

docker-compose -f src/main/docker/docker-compose.yml up --build -d

Exporter le realm de test avec les users:

docker exec -it keycloak keycloak/bin/standalone.sh \
-Djboss.socket.binding.port-offset=100 \
-Dkeycloak.migration.action=export \
-Dkeycloak.migration.provider=dir \
-Dkeycloak.migration.realmName=rieau \
-Dkeycloak.migration.usersExportStrategy=REALM_FILE \
-Dkeycloak.migration.dir=/tmp/export

Importer le realm de test avec les users:

docker exec -it keycloak keycloak/bin/standalone.sh \
-Djboss.socket.binding.port-offset=100 \
-Dkeycloak.migration.action=import \
-Dkeycloak.migration.provider=singleFile \
-Dkeycloak.migration.file=/tmp/realm-rieau-test.json \
-Dkeycloak.migration.strategy=OVERWRITE_EXISTING

Dev

  • Maven 3.6+, par exemple installé depuis sdkman.
  • Spring boot CLI 2.1+, par exemple installé depuis sdkman.

Lancement

./mvnw spring-boot:run

Tests unitaires

  • Lancez tous les tests:
./mvnw clean test -Pdev
  • Lancez une seule classe de test:
./mvnw clean test -Dtest=<nomdelaclasse> -Pdev
  • Lancez une seule méthode de test:
./mvnw clean test -Dtest=<nomdelaclasse>#<nomdelamethode> -Pdev

Tests d'intégration

Prérequis: la stack lancée avec docker-compose.

Attention geo.api.gouv.fr est limité à 10 appels/s/IP!

Pour désactiver la vérification des communes, ajouter:

-Dapp.communes-url=
  • Lancez tous les tests sans échec:
./mvnw clean integration-test -Dapp.communes-url=

avec échec mais sans l'analyse des vulnérabilités:

./mvnw clean verify -Dapp.communes-url= -Dskip.check=true
  • Lancez une seule classe de test:
./mvnw clean integration-test -Dit.test=<nomdelaclasse>IT -Dapp.communes-url=
  • Lancez une seule méthode de test:
./mvnw clean integration-test -Dit.test=<nomdelaclasse>IT#<nomdelamethode> -Dapp.communes-url=

Tests manuels

Prérequis: la stack lancée avec docker-compose.

KC_REALM=rieau
KC_USERNAME=jean.martin
KC_PASSWORD=
KC_CLIENT=rieau
KC_URL="http://localhost:8080/auth"
KC_RESPONSE=$( \
   curl -k -v \
        -d "username=$KC_USERNAME" \
        -d "password=$KC_PASSWORD" \
        -d 'grant_type=password' \
        -d "client_id=$KC_CLIENT" \
        "$KC_URL/realms/$KC_REALM/protocol/openid-connect/token" \
    | jq .
)
KC_ACCESS_TOKEN=$(echo $KC_RESPONSE| jq -r .access_token)
KC_ID_TOKEN=$(echo $KC_RESPONSE| jq -r .id_token)
KC_REFRESH_TOKEN=$(echo $KC_RESPONSE| jq -r .refresh_token)
curl -k -H "Authorization: Bearer $KC_ACCESS_TOKEN" -v http://localhost:5000/dossiers

Vérification des vulnérabilités

./mvnw clean check -Pdev -DskipTests

Gestion des versions

Avec le plugin maven-release, par exemples:

Tag git et pom puis update de la dev version dans pom:

./mvnw --batch-mode -Dtag=v1.0.0 -Ddry.run=true -Dskip.check=true release:prepare \
    -DreleaseVersion=1.0.0 \
    -DdevelopmentVersion=1.1.0-SNAPSHOT

Ajout de -DdryRun=true pour tester seulement, puis mvn release:clean.

Update seulement de la dev version dans pom:

mvn --batch-mode release:update-versions -DdevelopmentVersion=1.1.0-SNAPSHOT

Construction de l'image Docker

  • Build:
./mvnw clean package -DskipTests -DskipITs -Dskip.check=true
mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)
docker build -t tristanrobert/rieau-api -f src/main/docker/Dockerfile .
  • Run:
docker run -p 5000:5000 --name rieau-api -d -t tristanrobert/rieau-api

Il est possible de changer le port http du serveur à l'éxécution en ajoutant -e SERVER_PORT=5000. Par défaut, il est égal à 5000.

Il est possible de changer à l'exécution les variables d'environnement (cf. rieau-infra).

  • Scan des vulnérabilités:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v $HOME/.trivy/caches:/root/.cache/ knqyf263/trivy tristanrobert/rieau-api:latest
  • Publier:

Tagger une version semver et pousser la sur le registry:

docker tag tristanrobert/rieau-api:[digestid] tristanrobert/rieau-api:[semver]
docker push tristanrobert/rieau-api:[semver]

Diagrammes UML

Les sources des modèles PlantUML sont dans src/main/docs.

Pour prévisualiser, lancer un serveur de rendu:

docker run -d -p 8080:8080 plantuml/plantuml-server:tomcat

Diagramme de classes du domaine métier