diff --git a/.env.oots.template b/.env.oots.template index d9003f7..ab683af 100644 --- a/.env.oots.template +++ b/.env.oots.template @@ -1,3 +1,4 @@ +AVEC_CONNEXION_FC_PLUS= # autorise connexion à FC Plus AVEC_ENVOI_COOKIE_SUR_HTTP= # autorise envoi du cookie de session par HTTP avec valeur true AVEC_REQUETE_PIECE_JUSTIFICATIVE= # active l'API /requete/pieceJustificative avec valeur true IDENTIFIANT_EIDAS= # identifiant eIDAS injecté dans les requêtes (tant qu'on ne sait pas le récupérer) diff --git a/src/adaptateurs/adaptateurEnvironnement.js b/src/adaptateurs/adaptateurEnvironnement.js index 74d14e7..3b80d20 100644 --- a/src/adaptateurs/adaptateurEnvironnement.js +++ b/src/adaptateurs/adaptateurEnvironnement.js @@ -1,7 +1,9 @@ -const avecRequetePieceJustificative = () => process.env.AVEC_REQUETE_PIECE_JUSTIFICATIVE === 'true'; +const avecConnexionFCPlus = () => process.env.AVEC_CONNEXION_FC_PLUS === 'true'; const avecEnvoiCookieSurHTTP = () => process.env.AVEC_ENVOI_COOKIE_SUR_HTTP === 'true'; +const avecRequetePieceJustificative = () => process.env.AVEC_REQUETE_PIECE_JUSTIFICATIVE === 'true'; + const clePriveeJWK = () => JSON.parse(atob(process.env.CLE_PRIVEE_JWK_EN_BASE64)); const fournisseurIdentiteSuggere = () => (process.env.AVEC_AUTHENTIFICATION_EIDAS === 'true' ? 'eidas-bridge' : ''); @@ -26,6 +28,7 @@ const urlRedirectionDeconnexion = () => process.env.URL_REDIRECTION_DECONNEXION; module.exports = { avecEnvoiCookieSurHTTP, + avecConnexionFCPlus, avecRequetePieceJustificative, clePriveeJWK, fournisseurIdentiteSuggere, diff --git a/src/ootsFrance.js b/src/ootsFrance.js index 99bafd2..5f5bbb6 100644 --- a/src/ootsFrance.js +++ b/src/ootsFrance.js @@ -57,7 +57,10 @@ const creeServeur = (config) => { depotPointsAcces, })); - app.use('/', routesBase({ middleware })); + app.use('/', routesBase({ + adaptateurEnvironnement, + middleware, + })); const arreteEcoute = (suite) => serveur.close(suite); diff --git a/src/routes/routesAuth.js b/src/routes/routesAuth.js index 45ef310..8674a1b 100644 --- a/src/routes/routesAuth.js +++ b/src/routes/routesAuth.js @@ -55,29 +55,37 @@ const routesAuth = (config) => { deconnexionFCPlus(requete, reponse) )); - routes.get('/fcplus/destructionSession', (...args) => middleware.renseigneUtilisateurCourant(...args), (requete, reponse) => ( - destructionSessionFCPlus( - { - adaptateurChiffrement, - adaptateurEnvironnement, - adaptateurFranceConnectPlus, - }, - requete, - reponse, - ) - )); + routes.get('/fcplus/destructionSession', (...args) => middleware.renseigneUtilisateurCourant(...args), (requete, reponse) => { + if (adaptateurEnvironnement.avecConnexionFCPlus()) { + destructionSessionFCPlus( + { + adaptateurChiffrement, + adaptateurEnvironnement, + adaptateurFranceConnectPlus, + }, + requete, + reponse, + ); + } else { + reponse.status(501).send('Not Implemented Yet!'); + } + }); - routes.get('/fcplus/creationSession', (requete, reponse) => ( - creationSessionFCPlus( - { - adaptateurChiffrement, - adaptateurEnvironnement, - adaptateurFranceConnectPlus, - }, - requete, - reponse, - ) - )); + routes.get('/fcplus/creationSession', (requete, reponse) => { + if (adaptateurEnvironnement.avecConnexionFCPlus()) { + creationSessionFCPlus( + { + adaptateurChiffrement, + adaptateurEnvironnement, + adaptateurFranceConnectPlus, + }, + requete, + reponse, + ); + } else { + reponse.status(501).send('Not Implemented Yet!'); + } + }); return routes; }; diff --git a/src/routes/routesBase.js b/src/routes/routesBase.js index be21aa5..5e5a3fe 100644 --- a/src/routes/routesBase.js +++ b/src/routes/routesBase.js @@ -1,7 +1,11 @@ const express = require('express'); const routesBase = (config) => { - const { middleware } = config; + const { + adaptateurEnvironnement, + middleware, + } = config; + const routes = express.Router(); routes.get( @@ -9,7 +13,11 @@ const routesBase = (config) => { (...args) => middleware.renseigneUtilisateurCourant(...args), (requete, reponse) => { const infosUtilisateur = requete.utilisateurCourant; - reponse.render('pageAccueil', { infosUtilisateur }); + const avecConnexionFCPlus = adaptateurEnvironnement.avecConnexionFCPlus(); + reponse.render('pageAccueil', { + infosUtilisateur, + avecConnexionFCPlus, + }); }, ); diff --git a/src/vues/pageAccueil.mustache b/src/vues/pageAccueil.mustache index ecaa1d5..aecf2cd 100644 --- a/src/vues/pageAccueil.mustache +++ b/src/vues/pageAccueil.mustache @@ -2,6 +2,7 @@ OOTS-France +{{#avecConnexionFCPlus}} {{#infosUtilisateur}}

Utilisateur courant : {{given_name}} {{family_name}}

Déconnexion @@ -10,3 +11,8 @@

Pas d'utilisateur courant

Connexion {{/infosUtilisateur}} +{{/avecConnexionFCPlus}} + +{{^avecConnexionFCPlus}} +

Pas d'utilisateur courant

+{{/avecConnexionFCPlus}} diff --git a/test/routes/routesAuth.spec.js b/test/routes/routesAuth.spec.js index 27c2efe..7c1f914 100644 --- a/test/routes/routesAuth.spec.js +++ b/test/routes/routesAuth.spec.js @@ -118,6 +118,17 @@ describe('Le serveur des routes `/auth`', () => { .then((reponse) => expect(reponse.request.path).toContain('id_token_hint=abcdef')) .catch(leveErreur); }); + + it('retourne une erreur 501 si le feature-flipping est désactivé', () => { + expect.assertions(1); + + serveur.adaptateurEnvironnement().avecConnexionFCPlus = () => false; + + return axios.get(`http://localhost:${port}/auth/fcplus/creationSession`) + .catch(({ response }) => { + expect(response.status).toEqual(501); + }); + }); }); describe('sur GET /auth/fcplus/creationSession', () => { @@ -139,5 +150,16 @@ describe('Le serveur des routes `/auth`', () => { return verifieRedirection(`http://localhost:${port}/auth/fcplus/creationSession`, `http://localhost:${port}/redirectionConnexion`); }); + + it('retourne une erreur 501 si le feature-flipping est désactivé', () => { + expect.assertions(1); + + serveur.adaptateurEnvironnement().avecConnexionFCPlus = () => false; + + return axios.get(`http://localhost:${port}/auth/fcplus/creationSession`) + .catch(({ response }) => { + expect(response.status).toEqual(501); + }); + }); }); }); diff --git a/test/routes/routesBase.spec.js b/test/routes/routesBase.spec.js index cc0d1d9..f6e29f1 100644 --- a/test/routes/routesBase.spec.js +++ b/test/routes/routesBase.spec.js @@ -38,5 +38,16 @@ describe('Le serveur des routes `/`', () => { }) .catch(leveErreur); }); + it("n'affiche pas le bouton quand le feature flip est désactivé", () => { + expect.assertions(2); + + serveur.adaptateurEnvironnement().avecConnexionFCPlus = () => false; + + return axios.get(`http://localhost:${port}/`) + .then((reponse) => { + expect(reponse.status).toEqual(200); + expect(reponse.data).not.toContain('Connexion'); + }); + }); }); }); diff --git a/test/routes/serveurTest.js b/test/routes/serveurTest.js index 76825ec..5e5c0ec 100644 --- a/test/routes/serveurTest.js +++ b/test/routes/serveurTest.js @@ -37,6 +37,7 @@ const serveurTest = () => { }; adaptateurEnvironnement = { + avecConnexionFCPlus: () => true, avecEnvoiCookieSurHTTP: () => true, avecRequetePieceJustificative: () => true, fournisseurIdentiteSuggere: () => '',