From 1184ea3ba4797ac4c7dae239cd0ab24df75ddddc Mon Sep 17 00:00:00 2001 From: Bertrand Bougon Date: Tue, 24 Dec 2024 13:02:01 +0100 Subject: [PATCH] =?UTF-8?q?[PRO=20CONNECT][VALIDATION=20CGU]=20Demande=20?= =?UTF-8?q?=C3=A0=20l=E2=80=99utilisateur=20connect=C3=A9=20via=20ProConne?= =?UTF-8?q?ct=20de=20valider=20les=20CGU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/pro-connect/routeProConnect.ts | 19 +++++++--- .../api/pro-connect/routeProConnect.spec.ts | 36 +++++++++++++++++-- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/mon-aide-cyber-api/src/api/pro-connect/routeProConnect.ts b/mon-aide-cyber-api/src/api/pro-connect/routeProConnect.ts index 8e4bf506f..498af0bfe 100644 --- a/mon-aide-cyber-api/src/api/pro-connect/routeProConnect.ts +++ b/mon-aide-cyber-api/src/api/pro-connect/routeProConnect.ts @@ -77,14 +77,15 @@ export const routesProConnect = (configuration: ConfigurationServeur) => { const redirige = ( idToken: string | undefined, - identifiant: crypto.UUID + identifiant: crypto.UUID, + urlDeRedirection: string ) => { requete.session!.ProConnectIdToken = idToken; const jeton = gestionnaireDeJeton.genereJeton({ identifiant: identifiant, }); requete.session!.token = jeton; - return reponse.redirect('/aidant/tableau-de-bord'); + return reponse.redirect(urlDeRedirection); }; try { @@ -108,7 +109,13 @@ export const routesProConnect = (configuration: ConfigurationServeur) => { ).rechercheParMail(email!); if (aidant) { - return redirige(idToken, aidant.identifiant); + return redirige( + idToken, + aidant.identifiant, + !aidant.dateSignatureCGU + ? '/aidant/valide-signature-cgu' + : '/aidant/tableau-de-bord' + ); } if (estGendarme) { const compte = await busCommande.publie< @@ -128,7 +135,11 @@ export const routesProConnect = (configuration: ConfigurationServeur) => { }, ...(siret && { siret: siret }), }); - return redirige(idToken, compte.identifiant); + return redirige( + idToken, + compte.identifiant, + '/aidant/valide-signature-cgu' + ); } return reponse.redirect( diff --git a/mon-aide-cyber-api/test/api/pro-connect/routeProConnect.spec.ts b/mon-aide-cyber-api/test/api/pro-connect/routeProConnect.spec.ts index 4d2b9d126..ee3c1465a 100644 --- a/mon-aide-cyber-api/test/api/pro-connect/routeProConnect.spec.ts +++ b/mon-aide-cyber-api/test/api/pro-connect/routeProConnect.spec.ts @@ -161,6 +161,38 @@ describe('Le serveur MAC, sur les routes de connexion ProConnect', () => { ); }); + describe('Dans le cas d’un Aidant n’ayant pas validé les CGU', () => { + beforeEach(async () => { + const aidant = unAidant().sansCGUSignees().construis(); + await testeurMAC.entrepots.aidants().persiste(aidant); + utilitairesCookies.recuperateurDeCookies = () => + 'j%3A%7B%22state%22%3A%22etat%22%2C%22nonce%22%3A%22coucou%22%7D'; + testeurMAC.adaptateurProConnect.recupereJeton = async () => ({ + idToken: fakerFR.string.alpha(10), + accessToken: fakerFR.string.alpha(10), + }); + testeurMAC.adaptateurProConnect.recupereInformationsUtilisateur = + async () => + desInformationsUtilisateur().pourUnAidant(aidant).construis(); + testeurMAC.gestionnaireDeJeton.genereJeton = () => 'abc'; + donneesServeur = testeurMAC.initialise(); + }); + + it('L’Aidant est redirigé vers la validation des CGU si elles ne sont pas signées', async () => { + const reponse = await executeRequete( + donneesServeur.app, + 'GET', + '/pro-connect/apres-authentification', + donneesServeur.portEcoute + ); + + expect(reponse.statusCode).toStrictEqual(302); + expect(reponse.headers['location']).toStrictEqual( + '/aidant/valide-signature-cgu' + ); + }); + }); + describe("Dans le cas d'un gendarme", () => { it("Si l'utilisateur n'est pas connu, on crée un espace Aidant", async () => { adaptateurEnvironnement.siretsEntreprise = () => ({ @@ -190,7 +222,7 @@ describe('Le serveur MAC, sur les routes de connexion ProConnect', () => { expect(aidantTrouve!.siret).toStrictEqual('12345'); }); - it("À l'issue de la création de l'espace Aidant, l'utilisateur est redirigé vers le tableau de bord", async () => { + it("À l'issue de la création de l'espace Aidant, l'utilisateur est redirigé vers la validation des CGU", async () => { adaptateurEnvironnement.siretsEntreprise = () => ({ gendarmerie: () => '12345', }); @@ -213,7 +245,7 @@ describe('Le serveur MAC, sur les routes de connexion ProConnect', () => { expect(reponse.statusCode).toStrictEqual(302); expect(reponse.headers['location']).toStrictEqual( - '/aidant/tableau-de-bord' + '/aidant/valide-signature-cgu' ); const objet = enObjet<{ session: string; [clef: string]: string }>( (reponse.headers['set-cookie'] as string[])[1]