From a4370a61c8af5c3b47816941db1b0a1ed88f19fa Mon Sep 17 00:00:00 2001 From: Fabien Lamarque Date: Thu, 4 Jul 2024 13:43:13 +0000 Subject: [PATCH] Redirige vers la destruction de session quand incident d'authentification Co-authored-by: Emmanuel Gaillot --- src/api/connexionFCPlus.js | 4 ++-- test/api/connexionFCPlus.spec.js | 9 +++++---- test/routes/routesAuth.spec.js | 5 +++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/api/connexionFCPlus.js b/src/api/connexionFCPlus.js index 859572e..e63ec9b 100644 --- a/src/api/connexionFCPlus.js +++ b/src/api/connexionFCPlus.js @@ -13,9 +13,9 @@ const connexionFCPlus = (config, code, requete, reponse) => { return stockeDansCookieSession(infos, adaptateurChiffrement, requete); })) .then(() => reponse.render('redirectionNavigateur', { destination: '/' })) - .catch((e) => { + .catch(() => { requete.session.jeton = undefined; - reponse.render('erreur', { descriptionErreur: `Échec authentification (${e.message})` }); + reponse.render('redirectionNavigateur', { destination: '/auth/fcplus/destructionSession' }); }); }; diff --git a/test/api/connexionFCPlus.spec.js b/test/api/connexionFCPlus.spec.js index e1737fb..458fca8 100644 --- a/test/api/connexionFCPlus.spec.js +++ b/test/api/connexionFCPlus.spec.js @@ -39,8 +39,8 @@ describe('Le requêteur de connexion FC+', () => { .then(() => expect(requete.session.jeton).toBeUndefined()); }); - it("sert une page d'erreur si le nonce retourné est différent du nonce en session", () => { - expect.assertions(1); + it('redirige vers la destruction de session FC+ si le nonce retourné est différent du nonce en session', () => { + expect.assertions(2); adaptateurChiffrement.verifieJeton = () => Promise.resolve({ nonce: 'unNonce' }); requete.session.jeton = { nonce: 'abcde' }; @@ -48,9 +48,10 @@ describe('Le requêteur de connexion FC+', () => { enJSON: () => Promise.resolve({ nonce: 'oups' }), }); - reponse.render = (_nomModelePage, { descriptionErreur }) => { + reponse.render = (nomModelePage, { destination }) => { try { - expect(descriptionErreur).toBe('Échec authentification (nonce invalide)'); + expect(nomModelePage).toBe('redirectionNavigateur'); + expect(destination).toBe('/auth/fcplus/destructionSession'); return Promise.resolve(); } catch (e) { return Promise.reject(e); diff --git a/test/routes/routesAuth.spec.js b/test/routes/routesAuth.spec.js index 1ffd11f..f296531 100644 --- a/test/routes/routesAuth.spec.js +++ b/test/routes/routesAuth.spec.js @@ -123,13 +123,14 @@ describe('Le serveur des routes `/auth`', () => { .catch(leveErreur); }); - it("sert une page d'erreur quand l'authentification échoue", () => { + it("redirige vers la destruction de session FranceConnect+ quand l'authentification échoue", () => { serveur.fabriqueSessionFCPlus().nouvelleSession = () => Promise.resolve({ enJSON: () => Promise.reject(new Error('Oups')), }); return axios.get(`http://localhost:${port}/auth/fcplus/connexion_apres_redirection?code=unCode&state=unState`) - .then((reponse) => expect(reponse.data).toContain('Échec authentification (Oups)')); + .then((reponse) => expect(reponse.data).toContain('')) + .catch(leveErreur); }); }); });