Skip to content

Commit

Permalink
Simule avec serveur Mock FC+ renvoi état invalide
Browse files Browse the repository at this point in the history
Co-authored-by: Fabien Lamarque <[email protected]>
  • Loading branch information
egaillot and Fabinout committed Jun 4, 2024
1 parent 3ef337d commit 0004524
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 5 deletions.
3 changes: 2 additions & 1 deletion .env.site.template
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
AVEC_CONNEXION_FC_PLUS= # autorise connexion à FC Plus
AVEC_CONNEXION_FC_PLUS= # autorise connexion à FC Plus avec valeur true
AVEC_ENVOI_COOKIE_SUR_HTTP= # autorise envoi du cookie de session par HTTP avec valeur true
AVEC_MOCK= # autorise l'ajout de contextes de serveur mock FC Plus avec valeur true
SECRET_JETON_SESSION= # secret utilisé pour chiffrer et déchiffrer le jeton stocké dans le cookie de session

AVEC_AUTHENTIFICATION_EIDAS= # si renseigné à `true`, passe par le « bridge eIDAS » pour l'authentification
Expand Down
6 changes: 4 additions & 2 deletions mockFCPlus.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,10 @@ app.get('/', (_requete, reponse) => {
});

app.get('/debut_session', (requete, reponse) => {
const etat = requete.params.state;
reponse.redirect(`${process.env.URL_REDIRECTION_CONNEXION}?state=${etat}&code=abcdef`);
const contexteMock = requete.query.contexte_mock;
const etat = (contexteMock === 'etatRenvoyeInvalide') ? 'oups' : requete.query.state;
const code = (contexteMock === 'signatureJetonInvalide') ? 'XXX' : 'abcdef';
reponse.redirect(`${process.env.URL_REDIRECTION_CONNEXION}?state=${etat}&code=${code}`);
});

app.get('/fin_session', (_requete, reponse) => {
Expand Down
3 changes: 3 additions & 0 deletions src/adaptateurs/adaptateurEnvironnement.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ const avecConnexionFCPlus = () => process.env.AVEC_CONNEXION_FC_PLUS === 'true';

const avecEnvoiCookieSurHTTP = () => process.env.AVEC_ENVOI_COOKIE_SUR_HTTP === 'true';

const avecMock = () => process.env.AVEC_MOCK === 'true';

const clePriveeJWK = () => JSON.parse(atob(process.env.CLE_PRIVEE_JWK_EN_BASE64));

const fournisseurIdentiteSuggere = () => (process.env.AVEC_AUTHENTIFICATION_EIDAS === 'true' ? 'eidas-bridge' : '');
Expand All @@ -25,6 +27,7 @@ const urlRedirectionDeconnexion = () => process.env.URL_REDIRECTION_DECONNEXION;
module.exports = {
avecEnvoiCookieSurHTTP,
avecConnexionFCPlus,
avecMock,
clePriveeJWK,
fournisseurIdentiteSuggere,
identifiantClient,
Expand Down
6 changes: 5 additions & 1 deletion src/api/creationSessionFCPlus.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@ const creationSessionFCPlus = (config, requete, reponse) => {
const urlRedirectionConnexion = adaptateurEnvironnement.urlRedirectionConnexion();
const etat = adaptateurChiffrement.cleHachage(`${Math.random()}`);
const nonce = adaptateurChiffrement.cleHachage(`${Math.random()}`);
const { contexteMock } = requete.query;
const paramContexteMock = (adaptateurEnvironnement.avecMock() && contexteMock)
? `&contexte_mock=${contexteMock}`
: '';

const construisURL = () => adaptateurFranceConnectPlus.urlCreationSession()
.then((url) => `${url}?scope=profile%20openid%20birthcountry%20birthplace&acr_values=eidas2&claims={%22id_token%22:{%22amr%22:{%22essential%22:true}}}&prompt=login%20consent&response_type=code&idp_hint=${adaptateurEnvironnement.fournisseurIdentiteSuggere()}&client_id=${identifiantClient}&redirect_uri=${urlRedirectionConnexion}&state=${etat}&nonce=${nonce}`);
.then((url) => `${url}?scope=profile%20openid%20birthcountry%20birthplace&acr_values=eidas2&claims={%22id_token%22:{%22amr%22:{%22essential%22:true}}}&prompt=login%20consent&response_type=code&idp_hint=${adaptateurEnvironnement.fournisseurIdentiteSuggere()}&client_id=${identifiantClient}&redirect_uri=${urlRedirectionConnexion}&state=${etat}&nonce=${nonce}${paramContexteMock}`);

return stockeDansCookieSession({ etat }, adaptateurChiffrement, requete)
.then(() => construisURL())
Expand Down
22 changes: 21 additions & 1 deletion test/api/creationSessionFCPlus.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@ describe('Le requêteur de création de session FC+', () => {
const adaptateurFranceConnectPlus = {};
const config = { adaptateurChiffrement, adaptateurEnvironnement, adaptateurFranceConnectPlus };
const reponse = {};

const requete = {};

beforeEach(() => {
adaptateurChiffrement.cleHachage = () => '';
adaptateurChiffrement.genereJeton = () => Promise.resolve();
adaptateurEnvironnement.avecMock = () => false;
adaptateurEnvironnement.fournisseurIdentiteSuggere = () => '';
adaptateurEnvironnement.identifiantClient = () => '';
adaptateurEnvironnement.urlRedirectionConnexion = () => '';
adaptateurFranceConnectPlus.urlCreationSession = () => Promise.resolve('');
requete.query = {};
requete.session = {};
reponse.send = () => Promise.resolve();
});
Expand Down Expand Up @@ -155,4 +156,23 @@ describe('Le requêteur de création de session FC+', () => {
return creationSessionFCPlus(config, requete, reponse);
});
});

describe('Si utilisation serveur mock FC+', () => {
it('renseigne le paramètre `contexte_mock` avec la bonne valeur', () => {
expect.assertions(1);
adaptateurEnvironnement.avecMock = () => true;

requete.query.contexteMock = 'unContexte';
reponse.send = (url) => {
try {
expect(url).toContain('contexte_mock=unContexte');
return Promise.resolve();
} catch (e) {
return Promise.reject(e);
}
};

return creationSessionFCPlus(config, requete, reponse);
});
});
});
1 change: 1 addition & 0 deletions test/routes/serveurTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const serveurTest = () => {
adaptateurEnvironnement = {
avecConnexionFCPlus: () => true,
avecEnvoiCookieSurHTTP: () => true,
avecMock: () => true,
fournisseurIdentiteSuggere: () => '',
identifiantClient: () => '',
secretJetonSession: () => 'secret',
Expand Down

0 comments on commit 0004524

Please sign in to comment.