From bcc2b5a96b1ff6c6a0bdbc7ff6ed92b0672f9f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Raya=20D=C3=89CORNOD?= Date: Thu, 23 Jan 2025 12:31:24 +0100 Subject: [PATCH] =?UTF-8?q?int=C3=A9gration=20de=20la=20doc=20du=20wiki=20?= =?UTF-8?q?dans=20la=20doc=20technique=20(antora)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../001a98b2-ec5e-4a2c-b24e-b6a0911f6196.png | Bin 0 -> 47701 bytes .../366f4814-a881-435b-9fcd-57195695b1bd.png | Bin 0 -> 13570 bytes .../fe18f0b8-1f06-4c17-813e-bc8868b60c62.png | Bin 0 -> 22471 bytes src/docs/modules/ROOT/nav.adoc | 7 +- .../Docaposte_Signature-electronique.adoc | 233 ++++++++++++++++++ .../modules/ROOT/pages/wiki/ESUP-SISCOL.adoc | 177 +++++++++++++ .../modules/ROOT/pages/wiki/ESUP-STAGE.adoc | 185 ++++++++++++++ ...ion-des-conditions-dans-les-templates.adoc | 46 ++++ .../pages/wiki/Liste-des-changements.adoc | 26 ++ .../modules/ROOT/pages/wiki/Prerequis.adoc | 174 +++++++++++++ ...rocessus-de-creation-d-un-utilisateur.adoc | 15 ++ src/docs/modules/ROOT/pages/wiki/index.adoc | 62 +++++ 12 files changed, 924 insertions(+), 1 deletion(-) create mode 100644 src/docs/modules/ROOT/images/wiki/001a98b2-ec5e-4a2c-b24e-b6a0911f6196.png create mode 100644 src/docs/modules/ROOT/images/wiki/366f4814-a881-435b-9fcd-57195695b1bd.png create mode 100644 src/docs/modules/ROOT/images/wiki/fe18f0b8-1f06-4c17-813e-bc8868b60c62.png create mode 100644 src/docs/modules/ROOT/pages/wiki/Docaposte_Signature-electronique.adoc create mode 100644 src/docs/modules/ROOT/pages/wiki/ESUP-SISCOL.adoc create mode 100644 src/docs/modules/ROOT/pages/wiki/ESUP-STAGE.adoc create mode 100644 src/docs/modules/ROOT/pages/wiki/Gestion-des-conditions-dans-les-templates.adoc create mode 100644 src/docs/modules/ROOT/pages/wiki/Liste-des-changements.adoc create mode 100644 src/docs/modules/ROOT/pages/wiki/Prerequis.adoc create mode 100644 src/docs/modules/ROOT/pages/wiki/Processus-de-creation-d-un-utilisateur.adoc create mode 100644 src/docs/modules/ROOT/pages/wiki/index.adoc diff --git a/src/docs/modules/ROOT/images/wiki/001a98b2-ec5e-4a2c-b24e-b6a0911f6196.png b/src/docs/modules/ROOT/images/wiki/001a98b2-ec5e-4a2c-b24e-b6a0911f6196.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2f21e6d7b875dc9d40a15e4ef8a315710a3939 GIT binary patch literal 47701 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 literal 0 HcmV?d00001 diff --git a/src/docs/modules/ROOT/images/wiki/366f4814-a881-435b-9fcd-57195695b1bd.png b/src/docs/modules/ROOT/images/wiki/366f4814-a881-435b-9fcd-57195695b1bd.png new file mode 100644 index 0000000000000000000000000000000000000000..efd1bec8e525a69fb2f0fc68d1d0858e4e0ed587 GIT binary patch literal 13570 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 L>)u7FS%v-|=lq<=c&%);NTG6Rgh7`!8tvJ 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 z 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 F${){)ocRC% literal 0 HcmV?d00001 diff --git a/src/docs/modules/ROOT/nav.adoc b/src/docs/modules/ROOT/nav.adoc index 26d09497..4fabd346 100644 --- a/src/docs/modules/ROOT/nav.adoc +++ b/src/docs/modules/ROOT/nav.adoc @@ -3,4 +3,9 @@ * xref::decisions.adoc[] * xref::flux.adoc[] * xref::archi-tech.adoc[] -* xref::event-storming.adoc[] \ No newline at end of file +* xref::event-storming.adoc[] +* ESUP STAGE +** xref::wiki/index.adoc[Home] +** xref::wiki/Prerequis.adoc[Prérequis] +** xref::wiki/ESUP-SISCOL.adoc[ESUP-SISCOL] +** xref::wiki/ESUP-STAGE.adoc[ESUP-STAGE] diff --git a/src/docs/modules/ROOT/pages/wiki/Docaposte_Signature-electronique.adoc b/src/docs/modules/ROOT/pages/wiki/Docaposte_Signature-electronique.adoc new file mode 100644 index 00000000..7843fc75 --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/Docaposte_Signature-electronique.adoc @@ -0,0 +1,233 @@ += Signature Électronique Docaposte +:imagesdir: ../../images + +== Tomcat certificats + +Documentation d'aide à la configuration des certificats TLS gérés du process Java relatif à Esup-Stage. + +=== Définitions + +Java sépare le magasin de certificats à utiliser en 2 catégories : + +* keystore : magasin de certificats qui contient des clés privées d'authentification ou de sécurité +* truststore : magasin de certificats qui contient les certificats publics qui sont acceptés + +Ces 2 magasins sont stockés dans des fichiers de type JKS ou PKCS12 + +=== Edition de votre truststore + +Les applications tomcat devront accepter certains certificats pour pouvoir accepter les appels web vers d'autres services de votre SI. + +L'application Esup-Stage aura surement besoin de se connecter à votre serveur d'authentification SSO en HTTPS (certificat TLS), il faut donc rajouter la confiance de l'Autorité Certification (AC) qui émet les certificats de votre établissement dans le truststore dédié au tomcat. + +Nous allons pour cela créer un fichier truststore avec la chaine de certificat de l'AC émettant les certificats de votre établissement + +* Récupérez le fichier ca.crt de l'AC de votre établissement + +Pour l'exemple de création du truststore, nous avons pris le mot de passe 'my_password' mais ceci reste à votre libre choix. + +. Découpez la chaîne des certificats publics contenu dans le fichier ca.crt** ++ +[source,console] +---- +[user@computer ~/tmp]$ csplit -s -z -f cacrt- ca.crt '/-----BEGIN CERTIFICATE-----/' '{*}' +[user@computer ~/tmp]$ ls -1 +cacrt-00 +cacrt-01 +ca.crt +---- + +. Créez/Importez la série des certificats issus du ca.crt dans un nouveau truststore ++ +[source,console] +---- +[user@computer ~/tmp]$ ls -1 cacrt-* | while read item; do \ + echo "Import un certificat de la chaine de certification '${item}' :"; \ + keytool -keystore truststore.jks -storepass my_password \ + -alias ${item} -import -noprompt -file ${item}; \ + done +Import un certificat de la chaine de certification 'cacrt-00' : +Certificate was added to keystore +Import un certificat de la chaine de certification 'cacrt-01' : +Certificate was added to keystore +[user@computer ~/tmp]$ +---- + +. Vérifiez le contenu du truststore + ++ +[source,console] +---- +[user@computer ~/tmp]$ keytool -list -v -keystore truststore.jks -storepass my_password \ + | grep -C 5 'Entry type: trustedCertEntry' \ + | grep -E '^(Alias name|Entry type|Issuer|Valid from):' +Alias name: cacrt-00 +Entry type: trustedCertEntry +Issuer: ... +Valid from: ... +Alias name: cacrt-01 +Entry type: trustedCertEntry +Issuer: ... +Valid from: ... +[user@computer ~/tmp]$ +---- + +. Ajoutez un autre service avec son certificat public + +Si vous avez d'autres services HTTPS n'utilisant pas le CA de votre établissement, vous pouvez importer le certificat de service externe dans votre truststore. ++ +* récupérez le certificat de ce service externe +* importez ce fichier certificat manuellement dans le truststore + +.Exemple avec l'API de test de Docaposte +. Récupérez le certificat ++ +[source,console] +---- +[user@computer ~/tmp]$ openssl s_client -showcerts -connect demo-parapheur.dfast.fr:443 /dev/null|openssl x509 -outform PEM > demo-parapheur.pem +---- + +. Ajout au magasin trustore ++ +[source,console] +---- +[user@computer ~/tmp]$ keytool -keystore truststore.jks -storepass my_password \ + -alias 'demo-parapheur' -import -noprompt -file demo-parapheur.pem +Certificate was added to keystore +[user@computer ~/tmp]$ +---- + +. Exportez votre truststore + +Exportez ce fichier 'truststore.jks' vers votre serveur esup-stage et retenez le mot de passe de celui-ci. ++ +* Reportez cette config du truststore dans la variable 'CATALINA_OPTS' de votre tomcat (voir section suivante 'Lanceur Tomcat') +* Reportez cette config du truststore dans la config d'esup-stage, voir les propriétés 'docaposte.truststore.*' dans le fichier /etc/estage/estage.properties + +== Lanceur Tomcat + +Le tomcat doit être lancé avec les paramètres indiquant les paramètres de chargement du truststore. + +Votre fichier de configuration devra contenir les variables 'CATALINA_OPTS' de lancement suivante : + +* `javax.net.ssl.trustStore` : chemin du fichier truststore +* `javax.net.ssl.trustStoreType` : type de magazin (JKS ou PKCS12) +* `javax.net.ssl.trustStorePassword` : mot de passe associé à votre fichier magazin truststore + +Exemple avec un apache-tomcat-9.0 packagé en Red Hat + +* /etc/sysconfig/tomcat9.0 +[source,shell] +---- +CATALINA_OPTS=" -Xms2048m -Xmx4096m ... -Djavax.net.ssl.trustStore=/etc/ssl/catalina.truststore -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=my_password ... " +---- +Exemple à partir d'un apache-tomcat binaire récupérer sur le site [Apache Tomcat](https://tomcat.apache.org/) + +* `${CATALINA_HOME}/bin/setenv.sh` (fichier exécutable à créer si inexistant) +[source,shell] +---- + +# TOMCAT > MEMOIRE +export CATALINA_OPTS="$CATALINA_OPTS -Xms2048m -Xmx4096m" +... +# TOMCAT > TRUSTSTORE certificats acceptés +export CATALINA_OPTS="$CATALINA_OPTS -Djavax.net.ssl.trustStore=/etc/ssl/catalina.truststore" +export CATALINA_OPTS="$CATALINA_OPTS -Djavax.net.ssl.trustStoreType=JKS" +export CATALINA_OPTS="$CATALINA_OPTS -Djavax.net.ssl.trustStorePassword=my_password" +---- + +Vérifiez que les variables sont bien chargées après le redémarrage du tomcat + +[source,console] +---- +[root@server ~]# ps aux | grep tomcat +tomcat ... /usr/bin/java ... -Djavax.net.ssl.trustStore=/etc/ssl/catalina.truststore -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=my_password ... +[root@server ~]# +---- + +== Module Docaposte + +Pour le module "Docaposte" intégré dans https://github.com/EsupPortail/esup-stage/[esup-stage], le service "Docaposte" via l'organisme certificateur (Certinomis, ChamberSign, ...) vous a normalement fourni un fichier avec l'extension '.p12' (au format PKCS12) nécessaire à l'authentification auprès du service. + +Tout d'abord, il faut vérifier la validité de ce fichier 'certificat.p12' qui doit contenir la clé privée d'authentification et les certificats publics associés. + +* Vérification de la présence d'une clé privée valide dans le fichier 'certificat.p12': Pour le module "Docaposte" intégrer dans https://github.com/EsupPortail/esup-stage/[esup-stage], le service "Docaposte" via l'organisme certificateur (Certinomis, ChamberSign, ...) vous a normalement fourni un fichier avec l'extension '.p12' (au format PKCS12) nécessaire à l'authentification auprès du service. +Tout d'abord, il faut vérifier la validité de ce fichier 'certificat.p12' qui doit contenir la clé privée d'authentification et les certificats publics associés. +* Vérification de la présence d'une clé privée valide dans le fichier 'certificat.p12': ++ +[source,console] +---- +[root@server ~]# keytool -list -v -keystore /data/certificat.p12 -storepass my_password \ + | grep -C 6 '^Entry type: PrivateKeyEntry' \ + | grep -E '^(Alias name|Creation date|Entry type|Owner|Issuer|Valid from):' +Alias name: 1 +Creation date: May 16, 2023 +Entry type: PrivateKeyEntry +Owner: ... +Issuer: ... +Valid from: Tue Nov 22 08:12:07 CET 2022 until: Thu Nov 21 08:12:07 CET 2024 +[root@server ~]# +---- + +* Vérification de la présence des certificats publics présents dans le fichier 'certificat.p12' : ++ +[source,console] +---- +[root@server ~]# openssl pkcs12 -in certificat.p12 -out docaposte.crt -nodes +Enter Import Password: ***** +[root@server ~]# cat docaposte.crt +... +-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE----- +... +-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE----- +[root@server ~]# +---- + +== Paramétrage dans ESUP-Stage + +=== Fichier estage.properties + +Dans le fichier `/etc/estage/estage.properties` du serveur ESUP-Stage, complétez les informations suivantes : + +[source,properties] +---- +# uri vers le webservice Docaposte +docaposte.uri=https://demo-parapheur.dfast.fr/parapheur-soap/soap/v1/Documents +# numéro siren fourni par Docaposte +docaposte.siren=0123456789 +# chemin absolu du fichier .p12 +docaposte.keystore.path=/data/certificat.p12 +# mot de passe permettant la lecture du fichier p12 +docaposte.keystore.password=xxx +# chemin absolu du fichier .pks +docaposte.truststore.path=/data/ProductionFAST.jks +# mot de passe permettant la lecture du fichier jks +docaposte.truststore.password=xxx +---- + +=== Centre de gestion + +Au niveau de chaque centre de gestion qui doit donner droit à la signature électronique, renseignez dans l'onglet Signature électronique le code du circuit de signature paramétré dans Docaposte. Pour ce faire : + +* Rendez-vous à l'emplacement _Centre de gestion > Liste des centre de gestion_ puis sélectionnez un centre de gestion. +* Dans ce centre de gestion, rendez vous dans l'onglet _Signature électronique_. + +Dans l'_Ordre de signature_, vous pouvez changer l'ordre des signataires à l'aide de la croix multidirectionnelle qui s'affiche en survolant avec la souris le nombre précédent l'intitulé du signataire. + +Dans cette version, il n'est possible d'utiliser que des signatures OTP. Cela signifie que chaque signataire recevra un mail ou sms l'invitant à signer électroniquement la convention. La signature automatique (signature serveur) n'est pas prise en charge. + +=== Contrôle des métadonnées + +Dans Fast, vous avez la possibilité de contrôler la bonne transmission des métadonnées en allant dans le répertoire + +* Preuve => Cliquez sur un document dans la rubrique "A signer(OTP) puis en bas de page vous verrez le lien "Preuve". Dans une des pages s'afficheront les métadonnées. +* OTP => Cliquez sur un document dans la rubrique "A signer(OTP) puis en bas de page vous verrez le lien "OTP". Seront affichées toutes les métadonnées disponibles. Si l'étape de signature associée à l'OTP n'a pas encore été dépassée, vous pouvez modifier manuellement les métadonnées. Cela est utile en cas d'erreur de saisi dans ESUP-Stage. + +=== Certificat personnel + +Il est possible de faire signer une convention avec le certificat personnel d'un utilisateur. Pour ce faire, vous devez choisir dans le paramétrage du centre de gestion le paramètre "Signature serveur". Dans Fast, vous devez renseigner à l'étape de signature concernée le paramètre Signature. +Exemple de paramétrage d'un centre de gestion avec un workflow incluant une signature personnel (signature de l'étudiant) : +image:wiki/001a98b2-ec5e-4a2c-b24e-b6a0911f6196.png[image] + +Même exemple de workflow avec 4 signatures OTP et une signature avec un certificat personnel du côté de Fast +image:wiki/366f4814-a881-435b-9fcd-57195695b1bd.png[image] diff --git a/src/docs/modules/ROOT/pages/wiki/ESUP-SISCOL.adoc b/src/docs/modules/ROOT/pages/wiki/ESUP-SISCOL.adoc new file mode 100644 index 00000000..aecd6f16 --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/ESUP-SISCOL.adoc @@ -0,0 +1,177 @@ += ESUP SISCOL + +Cette application expose à l'application ESUP-STAGE des API REST (OPEN API - Swagger). Ainsi seule ESUP SIScol fait des accès au SI de l'établissement (Annuaire LDAP et Apogée). + +[discrete] +=== Versions + +* APOGEE `6.4.x` +* JDK `11`, `8` +* APOGEE WS `62031` ...`62070` + +[discrete] +=== Installation du JAR client WS-APOGEE + +_Avant de commencer l'installation, il faut vous procurer le client Web service Apogée soit auprès des collègues qui déploient Apogée dans votre établissement ou directement auprès de l'AMUE. Les WebServices Apogée doivent être installés selon les préconisations de l'AMUE et fonctionnelles sinon, il n'est pas nécessaire d'aller plus loin..._ + +*Le jar client apo-webservices-client doit correspondre au web-service Apogée installé.* Votre fichier apo-webservices-client{mettre la version}.jar doit être installé ainsi : + +[source,shell] +---- +mvn install:install-file -Dfile=apo-webservices-client{mettre la version}.jar -DgroupId=gouv.education.apogee -DartifactId=apo-webservices-client -Dversion={mettre la version} -Dpackaging=jar +---- + +[discrete] +=== Clonage et installation + +[source,shell] +---- +cd /opt +git clone https://github.com/EsupPortail/esup-siscol.git esup-siscol +---- + +Il faut ajouter la bonne dépendance vers votre numéro de version du client Apogée, ex. 62070 au lieu de "*version-ws-apogee-a-définir-ici*" dans le pom.xml. + +[source,xml] +---- + + gouv.education.apogee + apo-webservices-client + version-ws-apogee-a-définir-ici + +---- + +[discrete] +=== Fichier de paramétrage + +Nous allons créer un répertoire où nous placerons les fichiers de configurations de l'application esup-siscol : + +[source,shell] +---- +mkdir /etc/esup-siscol +cp /opt/esup-siscol/src/main/resources/application.yml.sample /etc/esup-siscol/application.yml +---- + +.Fichier /etc/esup-siscol/application.yml +[source,yaml] +---- +spring: + ldap: + urls: + - ldap://ldap-paris.fr:389 + username: uid=xxxx,ou=admins,dc=u-paris10,dc=fr + password: xxxx + base: dc=u-paris10,dc=fr + +springdoc: + version: '@springdoc.version@' + api-docs: + groups: + enabled: true + swagger-ui: + + display-request-duration: true + groups-order: ASC + operationsSorter: method + disable-swagger-default-url: true + use-root-path: true + path: /swagger-ui.html + url: /api-docs.yaml + +server: + error: + include-exception: true + whitelabel: + enabled: true + path: /error.html + include-stacktrace: always + +app: + ldap: + stringFilterTeacher: (|(eduPersonAffiliation=teacher)(eduPersonAffiliation=faculty)) + stringFilterStudent: (eduPersonAffiliation=student) + stringFilterStaff: (eduPersonAffiliation=staff) + repoStringFilterStudent: (eduPersonAffiliation=student) + repoStringFilterStudentBySn: (&(eduPersonAffiliation=student)(sn={0})) + repoStringFilterStudentByUId: (&(eduPersonAffiliation=student)(uid={0})) + repoStringFilterStudentByNumEtu: (&(eduPersonAffiliation=student)(numlEtu={0})) + dnPeople: ou=people + + apogee: + startYearMonth: 09 + startYearDay: 01 + universityCode: UPN + urlService: + administratifMetier: http://wsapogee.monuniv.fr/aws/services/AdministratifMetier + etudiantMetier: http://wsapogee.monuniv.fr/aws/services/EtudiantMetier + pedagogiqueMetier: http://wsapogee.monuniv.fr/aws/services/PedagogiqueMetier + geographieMetier: http://wsapogee.monuniv.fr/aws/services/GeographieMetier + referentielMetier: http://wsapogee.monuniv.fr/aws/services/ReferentielMetier + offreFormationMetier: http://wsapogee.monuniv.fr/aws/services/OffreFormationMetier + + credential: + userscredential: + root: + username: root + password: un-super-mot-de-passe-a-remplacer-ici + roles: + - ADMIN + - USER + - USER_APOGEE + - USER_LDAP + autorisation: + supann: + - USER_LDAP + - ADMIN + referentiel: + - USER_APOGEE + - ADMIN + + cache: + # Chargement au demarrage des caches + onStartup: + # Active ou non, par defaut : false + enabled: true + # Time-To-Live du cache temporaire, en minutes, par defaut : 60 [minutes] + #ttl-tmp: + # Time-To-Live du cache permanent, en heures, par defaut : 0 [heures] + # Si 0, aucune limite de temps + #ttl-permanent: + # Cron pour un rechargement periodique des caches + scheduling: + # Active ou non, par defaut : false + enabled: false + # Expression cron, par defaut : aucune + cron: 0 0 7-22 * * * +---- + +Vous devez modifier en cohérence avec vos spécificités : + +* la section "LDAP" +* la section "APOGEE" en indiquant vos URL côté serveur WebService Apogée (installé en général par les administrateurs techniques Apogée) +* la section "credential" en modifiant votre mot de passe qui devra être renseigné aussi dans le fichier de configuration de l'application ESUP-STAGE + +[discrete] +=== Compilation et génération du WAR + +Pour compiler le projet et générer le WAR dans le répertoire "./target/", lancez les commandes : + +[source,shell] +---- +mvn clean compile +mvn install +---- + +[discrete] +=== Déploiement sur un serveur Tomcat : + +Si vous n'avez pas déjà installé votre serveur Tomcat, vous pouvez vous aider des prérequis de cette documentation. L'application ESUP SIScol peut-être déployée sur un serveur Tomcat indépendant (même serveur ou sur un autre serveur) ou utilisé le même serveur Tomcat que l'application ESUP Stage. + +Si votre Tomcat est installé sur le chemin suivant : \{tomcat_path}=/usr/share/tomcat, il faut copier votre fichier esup-siscol-x.x.x.war dans le webapp pour son déploiement : + +[source,shell] +---- +cp target/esup-siscol-x.x.x.war {tomcat_path}/webapps/esup-siscol.war +---- + +Après déploiement, vous pourrez y accéder à l'adresse : http://localhost:8080/esup-siscol diff --git a/src/docs/modules/ROOT/pages/wiki/ESUP-STAGE.adoc b/src/docs/modules/ROOT/pages/wiki/ESUP-STAGE.adoc new file mode 100644 index 00000000..f319f88d --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/ESUP-STAGE.adoc @@ -0,0 +1,185 @@ += ESUP STAGE + +=== Prérequis + +Les xref:wiki/Prerequis.adoc[prérequis] sont les suivants sur votre serveur : + +. Git +. Java OpenJdk 11 +. Apache Maven +. Installation Mariadb +. Installation du projet Esup-SIscol (sur le même serveur ou sur un serveur dédié) + +=== Clonage du projet + +[source,shell] +---- +cd /opt +git clone https://github.com/EsupPortail/esup-stage.git +---- + +[#la-base-de-donnees] +=== La base de données + +==== Création de la base et de l'utilisateur + +[source,SQL] +---- +CREATE DATABASE estage; +CREATE USER 'esupstage_user'@'%' IDENTIFIED BY 'password'; +GRANT ALL PRIVILEGES ON estage.* TO 'esupstage_user'@'%'; +FLUSH PRIVILEGES; +---- + +==== Import de la base pStage et passage du patch + +Si vous n'avez pas de base pStage a reprendre, cette partie est inutile + +____ +Pour importer votre base pStage d'une installation en production, vous devez réaliser un dump, ici le fichier : + +mysql-pstage-2022-01-25-16h00.sql.gz +____ + +____ +Votre dump ne doit pas comporter de CREATE DATABASE ou USE DATABASE +____ + +Les commandes suivantes permettent d'importer votre dump (pStage) dans votre base estage (ESUP STAGE) : + +[source,shell] +---- +zcat /opt/estage/mysql-pstage-2022-01-25-16h00.sql.gz | mysql -u esupstage_user -p estage +cat /opt/estage/src/main/resources/db/changelog/init-changelog.sql | mysql -u esupstage_user -p estage +---- + +=== Modification du fichier de configuration + +[source,shell] +---- +cd /etc +mkdir estage +cd estage +cp /opt/esup-stage/etc/estage/estage-example.properties estage.properties +---- + +Modifier le fichier de configuration + +[source,properties] +---- +# parametres des URLs pour l'authentication CAS +cas.url.login=https://cas.monuniv.fr/cas/login?service={service} +cas.url.service=https://cas.monuniv.fr/cas/p3/serviceValidate?service={service}&ticket={ticket}&format=json +cas.url.logout=https://cas.monuniv.fr/cas/logout + +# parametres base de donnees +appli.datasource.url=jdbc:mariadb://monserversql.monuniv.fr:3306/estage +appli.datasource.username=estage +appli.datasource.password=xxx +appli.datasource.driver=org.mariadb.jdbc.Driver + +# url de l'application (notamment utilisée pour envoyer des liens par mail) +appli.url=http://esupstage.monuniv.fr:8080/frontend/#/ + +# logins des admin technique, séparés par des ; (utilisateurs à créer au 1er lancement pour paramétrer l'application) +appli.admin_technique=xxx;yyy + +# identifiant pour l'accès au web services référentiel (cela correspond aux identifiants du WS esup-SIscol) +referentiel.ws.login=root +referentiel.ws.password=xxx +# url du service LDAP +referentiel.ws.ldap_url=https://referentiel.monuniv.fr/ldap +# url du service Apogée +referentiel.ws.apogee_url=https://referentiel.monuniv.fr/apogee + +# mailer +appli.mailer.protocol=smtp +appli.mailer.host=smtp.monuniv.fr +appli.mailer.port=25 +appli.mailer.auth=true +appli.mailer.username=username@monuniv.fr +appli.mailer.password=xxx +appli.mailer.from=from@monuniv.fr +appli.mailer.disable_delivery=true +# paramètres pour le développement, par défaut disable_delivery=false, delivery_address=null +# si appli.mailer.disable_delivery=true alors l'envoi de mail est désactivé sinon si false alors l'envoi de mail est activé +appli.mailer.delivery_address=user@monuniv.fr +# Permet de rediriger les mails vers une adresse mail. Si adresse mail renseignée alors les mails sont redirigés vers cette adresse. Si null alors les mails sont envoyés aux utilisateurs. + +# chemin vers le dossier contenant les uploads +# pour les logos des centres de gestion il faut que le dossier ${appli.data_dir}/centregestion/logos soit existant sur le serveur +appli.data_dir=/data_esup_stage +---- + +____ +Remarque : il faut que l'utilisateur faisant tourner votre *Tomcat puisse avoir les droits en écriture sur le répertoire data_esup_stage* +____ + +=== Compilation du projet + +[source,shell] +---- +cd /opt/esup-stage +mvn -Dmaven.test.skip=true clean package +---- + +=== Déploiement / Lancement de l'application + +____ +Après la compilation, le chemin complet du fichier de déploiement est le suivant : /opt/estage/target/ROOT.war +____ + +==== Déploiement TOMCAT + +Cette documentation ne va pas décrire l'installation d'un Tomcat. ESUP STAGE a été déployé et testé sur une version TOMCAT 9 + +Vous pouvez télécharger tomcat ici : https://tomcat.apache.org/download-90.cgi + +Nous considérons par exemple le chemin du répertoire tomcat ainsi : /opt/tomcat-esup-stage + +Supprimer (ou déplacer une sauvegarde) votre répertoire /opt/tomcat-esup-stage/webapp/ROOT avant le déploiement + +Copier directement votre fichier /opt/estage/target/ROOT.war dans votre répertoire *webapp de tomcat* + +[source,shell] +---- +cp /opt/esupstage/target/ROOT.war /opt/tomcat-esup-stage/webapp/ +---- + +On arrête le tomcat avant et on le redémarre ensuite + +[source,shell] +---- +/opt/tomcat-esup-stage/bin/shutdown.sh +---- + +Pensez à paramétrer les espaces mémoire JVM : export JAVA\_OPTS="-Xms1024m -Xmx1024m -XX:MaxPermSize=256m" + +Démarrage : + + +[source,shell] +---- +/opt/tomcat-esup-stage/bin/startup.sh +---- + +Bravo, l'installation est terminée ! Vous pouvez y accéder sur http://localhost:8080 + +Lancement direct du war (ne pas utiliser : en cours de debug) java -jar /opt/estage/target/ROOT.war + +Dans le cas de l'utilisation d'un proxy (apache proxypass par exemple) il est conseillé d'utiliser le protocole AJP. + +Exemple de configuration Apache : + + +[source,apacheconf] +---- + + ServerAdmin admin@monuniv.fr + ServerName esup-stage.monuniv.fr + DefaultType text/html + ProxyRequests off + ProxyPreserveHost On + ProxyPass / http://localhost:8080/ + ProxyPassReverse / http://localhost:8080/ + +---- diff --git a/src/docs/modules/ROOT/pages/wiki/Gestion-des-conditions-dans-les-templates.adoc b/src/docs/modules/ROOT/pages/wiki/Gestion-des-conditions-dans-les-templates.adoc new file mode 100644 index 00000000..e1ec29a6 --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/Gestion-des-conditions-dans-les-templates.adoc @@ -0,0 +1,46 @@ += Gestion des conditions dans les templates +:sectnums: +:imagesdir: ../../images + +Dans les modèles (templates) de convention de stage, il est possible d'afficher +les variables en fonction de conditions. Les conditions, pour fonctionner, +doivent respecter les règles suivantes : + +== Conditions simples + +[literal] +$IF condition +vContenu si la condition est vraie. +$ELSE +Contenu si la condition est fausse. +$ENDIF + +== Conditions multiples + +[literal] +$IF condition1 +Contenu si condition1 est vraie. +$ELSEIF condition2 +Contenu si condition2 est vraie. +$ELSE +Contenu si aucune condition n'est vraie. +$ENDIF + +== Utilisation avec des variables dynamiques + +[literal] +$IF user.name != '' +Bonjour, ${user.name} ! +$ELSE +Bonjour, utilisateur anonyme. +$ENDIF + +== La structure $IF ... $FI + +Cela encadre une condition. Si la condition est vraie, le contenu placé entre $IF et $ENDIF sera affiché. + + +== Opérateurs logiques + +image:wiki/fe18f0b8-1f06-4c17-813e-bc8868b60c62.png[image] + +WARNING: veuillez utiliser uniquement les simples quotes (pas celles courbées) lorsque vous utilisez cette syntaxe. diff --git a/src/docs/modules/ROOT/pages/wiki/Liste-des-changements.adoc b/src/docs/modules/ROOT/pages/wiki/Liste-des-changements.adoc new file mode 100644 index 00000000..29d0d873 --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/Liste-des-changements.adoc @@ -0,0 +1,26 @@ += Liste des changements + +== Versions stables + +* https://github.com/EsupPortail/esup-stage[ESUP-Stage 2.1.9] +* https://github.com/EsupPortail/esup-siscol[ESUP-SIScol 1.0.28] + +''' + +== Version(s) à venir + +=== ESUP-Stage + +* Page d'erreur personnalisée - Gestion des cas ou favicon et logo possiblement null +* A la connexion : récupération du nom et prénom depuis le LDAP au lieu de pointer sur le retour du CAS + +=== ESUP-SIScol + +* {blank} + +== RAS + +== Releases passées + +* https://github.com/EsupPortail/esup-stage/releases[ESUP-Stage] +* https://github.com/EsupPortail/esup-siscol/releases[ESUP-SIScol] diff --git a/src/docs/modules/ROOT/pages/wiki/Prerequis.adoc b/src/docs/modules/ROOT/pages/wiki/Prerequis.adoc new file mode 100644 index 00000000..b50f2e0d --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/Prerequis.adoc @@ -0,0 +1,174 @@ += Prérequis + +_Avant de lancer les installations, il est nécessaire de mettre en place un "écosystème" permettant de compiler, déployer et exécuter nos applications._ + +==== 1. Git + +Sur RHEL 8 / CentOS 8 + +[source,shell] +---- +yum install git +---- + +Sur Ubuntu 20.04 / Debian + +[source,shell] +---- +apt-get install git +---- + +==== 2. Java + +Version de java minimale : Java OpenJdk 11 (seul cette version a été testé pour ESUP Stage) + +===== Installation java OpenJdk 11 + +*Sous RHEL 8 / CentOS 8* + +[source,shell] +---- +sudo yum -y install java-11-openjdk java-11-openjdk-devel +---- + +Vérification de l'installation + +[,console] +---- +$ java -version +openjdk version "11.0.12" 2021-07-20 LTS +OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS) +OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing) + +$ which java +/usr/bin/java +---- + +Définir les variables d'environnement Java + +[source,shell] +---- +sudo tee /etc/profile.d/java11.sh <>) : + +[source,properties] +---- +# url du service LDAP +referentiel.ws.ldap_url=https://referentiel.monuniv.fr/ldap +# url du service Apogée +referentiel.ws.apogee_url=https://referentiel.monuniv.fr/apogee +---- \ No newline at end of file diff --git a/src/docs/modules/ROOT/pages/wiki/Processus-de-creation-d-un-utilisateur.adoc b/src/docs/modules/ROOT/pages/wiki/Processus-de-creation-d-un-utilisateur.adoc new file mode 100644 index 00000000..2bc39b03 --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/Processus-de-creation-d-un-utilisateur.adoc @@ -0,0 +1,15 @@ += Processus de création d'un utilisateur + +Voici la procédure de création des utilisateurs dans ESUP-Stage. Un utilisateur se connecte à l'application : + +. On recherche dans l'application s'il existe déjà +** S'il existe déjà alors il hérite du même rôle et des mêmes droits +** S'il n'existe pas, on passe à l'étape 2 +. On recherche l'utilisateur dans l'annuaire LDAP +** Ce sera un étudiant si /ldap/etudiant indique qu'il s'agit d'un étudiant +** Ce sera un enseignant si /ldap/tuteur/ indique qu'il s'agit d'un enseignant +** Ce sera un enseignant et gestionnaire si /ldap/tuteur/ indique qu'il s'agit d'un enseignant et qu'il est rattaché à un centre de gestion +** Si l'utilisateur n'est dans aucun des cas précédents alors on passe à l'étape 3 +. On doit créer à la main l'utilisateur via le menu de création de la gestion des utilisateurs + +Vous pouvez visualiser les appels /ldap/etudiant et /ldap/tuteur/ via le Swagger UI mis à disposition avec ESUP-SIScol. diff --git a/src/docs/modules/ROOT/pages/wiki/index.adoc b/src/docs/modules/ROOT/pages/wiki/index.adoc new file mode 100644 index 00000000..8b16fa5c --- /dev/null +++ b/src/docs/modules/ROOT/pages/wiki/index.adoc @@ -0,0 +1,62 @@ +:reftext: Home +:navtitle: Home + +image::https://raw.github.com/EsupPortail/esup-stage/main/logo-esup-stage.png[ESUP STAGE LOGO] + +== 🎓 Gestion Moderne des Conventions de Stage pour l'Enseignement Supérieur + +ESUP-Stage est une application web nouvelle génération conçue pour simplifier la gestion des stages dans les établissements d'enseignement supérieur. + +=== 🚀 Fonctionnalités Principales + +[horizontal] +Création de Conventions:: Processus complet de génération et de validation des conventions de stage +Intégration Système:: Compatible avec les infrastructures universitaires existantes +Personnalisation:: Configuration souple et adaptable via l'interface utilisateur + +=== 🔗 Interconnexions + +* Intégration LDAP +* Compatibilité Apogée +* Développement en cours pour Pégase + +=== 📦 Partie du Consortium + +Développée et maintenue dans le cadre du consortium https://www.esup-portail.org/catalogue-des-services[ESUP Portail] + +''' + +=== Liste des changements + +xref:wiki/Liste-des-changements.adoc[Suivi des changements à venir et passés] + +La liste des changements vous permettra de suivre l'évolution des applications ainsi que les corrections et évolutions associées. + +''' + +=== Lien vers le code source des applications + +L'application ESUP-Stage se compose de deux applications que sont : + +* ESUP-Stage : https://github.com/EsupPortail/esup-stage +* ESUP-SIscol : https://github.com/EsupPortail/esup-siscol + +''' + +=== Liste de diffusion + +.https://listes.esup-portail.org/sympa/info/esup-stage +Cette liste permet de nous faire parvenir vos retours et d'échanger avec les autres établissements utilisateurs de l'application. + +''' + +=== Documentation d'installation + +* xref:wiki/Prerequis.adoc[Prérequis] +* xref:wiki/ESUP-SISCOL.adoc[ESUP-SISCOL] +* xref:wiki/ESUP-STAGE.adoc[ESUP-STAGE] +* xref:wiki/Docaposte_Signature-electronique.adoc[Docaposte_Signature électronique] + +=== Autres documents + +* xref:wiki/Processus-de-creation-d-un-utilisateur.adoc[Processus-de-création-d'un-utilisateur] +* xref:wiki/Gestion-des-conditions-dans-les-templates.adoc[Gestion des conditions dans les modèles (templates) de convention]