Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] Ajouter une route pour anonymiser en masse les données du GAR #9211

Merged
merged 6 commits into from
Jun 20, 2024

Conversation

er-lim
Copy link
Contributor

@er-lim er-lim commented Jun 10, 2024

🦄 Problème

Il faut mettre en place une route réservée aux super-admin pour anonymiser les données du GAR.

🤖 Proposition

Nous avons décidé de ne pas supprimer la ligne de la table authentication-method, mais de mettre à jour (en batch, par lot de 1000) certains champs de cette table; le nom et le prénom seront remplacés par 'anonymized', et le champ ExternalId par 'anonymized-{id de la ligne}'

🌈 Remarques

  • Gestion des erreurs : en cas d'id inexistant, le processus continue.
  • Certains cas d'erreurs (validation du fichier) rendent cependant impossible toute anonymisation (voir tests).
  • Le test du scénario de réconciliation après anonymisation n'est peut-être pas complet avec les seeds dont nous disposons pour l'instant.

💯 Pour tester

Pour l'ensemble des tests il faut :

  1. dans la table authentication-complement, récupérer les id des 4 users dont le GAR est l'identity provider.
  2. faire un fichier csv avec en en-tête User ID et en données les 4 id. Noter le path du fichier
  3. se connecter sur pix admin , d'abord en tant que CertifUser (pour le premier test) puis en tant que superAdmin (pour tous les autres) et récupérer pour chacune des deux connexions un 'Bearer token'
  4. en renseignant le chemin du fichier en payload et bearer token en entête de la requête, on peut dans Postman par exemple (ou une autre application permettant de tester les api), faire la requête suivante de format POST http://localhost:3000/api/admin/anonymize/gar :
  • pour tester les autorisations : lancer la requête avec en payload le fichier csv correct, mais avec le Bearer Token du profil Certif. Constater l'erreur 403, Forbidden Access. Vérifier en base de données qu'aucune ligne de la table authentication-complement n'est modifiée.

Pour la suite des tests il faut le Bearer Token du profil SuperAdmin :

  • pour tester la validation du format de données : remplacer le dernier id par toto et garder les trois autres . Constater l'erreur 422 / Unprocessable entity, avec le détail ValidationError: \"[3].id\" must be a number.Vérifier en base de données qu'aucune ligne de la table authentication-complement n'est modifiée.

  • pour tester la correction du header : remplacer par exemple User ID par Organization ID. Constater l'erreur 412 "ENCODING NOT SUPPORTED". Vérifier en base de données qu'aucune ligne de la table authentication-method n'est modifiée.

  • pour tester un scénario passant : remplacer un des id (le troisième par exemple) par un id inexistant en base, les autres sont valides:

  1. constater la réponse 200
{
   "data": {
       "type": "anonymize-gar-results",
       "attributes": {
           "anonymized": 3,
           "total": 4
       }
   }
}

2.constater que les trois champs (Nom, Prénom, ExternalId) existants ont été modifiés comme attendu (voir description de la pr) en base.

Scénario de test de la réconciliation après anonymisation :

  • se connecter au "Faux Gar" avec le profil d'un utilisateur "GAR" (par exemple Bob Léponge - date de naissance nécessaire).
  • Accéder à la campagne SCOBADGE1
  • Se déconneter
  • Anonymiser l'utilisateur comme montré précédemment
  • Vérifier que les données sont anonymisées en base de donnée
  • Se connecter à nouveau comme précédemment, via le "Faux GAR", avec le profil Bob Léponge, à la même campagne.
  • Vérifier que les données sont re-remplies dans la table authentication-methods

Si c'est curl qui est utilisé pour effectuer l'envoi du fichier, voici ci-dessous la commande curl.

Remplacer XXX par le bon token.

Et il faut créer un fichier CSV ayant pour nom accounts_to_nonymize.csv.

bearer='XXX'

curl \
-X POST \
-H "Authorization: Bearer $bearer" \
--data-binary @accounts_to_nonymize.csv \
http://localhost:3000/api/admin/anonymize/gar

@pix-bot-github
Copy link

Une fois les applications déployées, elles seront accessibles via les liens suivants :

Les variables d'environnement seront accessibles via les liens suivants :

@mariannebost mariannebost force-pushed the pix-12806-add-gar-anonymised-api branch 7 times, most recently from 131c2c1 to 8792729 Compare June 12, 2024 16:45
@er-lim er-lim force-pushed the pix-12806-add-gar-anonymised-api branch 2 times, most recently from 0bd1d63 to d0910de Compare June 14, 2024 12:19
@EmmanuelleBonnemay EmmanuelleBonnemay force-pushed the pix-12806-add-gar-anonymised-api branch 2 times, most recently from 1162551 to 043fa9a Compare June 17, 2024 13:22
@er-lim er-lim force-pushed the pix-12806-add-gar-anonymised-api branch 4 times, most recently from 566a481 to 451871c Compare June 18, 2024 07:08
@EmmanuelleBonnemay EmmanuelleBonnemay force-pushed the pix-12806-add-gar-anonymised-api branch 2 times, most recently from b89e1e9 to 39ff086 Compare June 18, 2024 13:07
@EmmanuelleBonnemay EmmanuelleBonnemay changed the title refactor(api): move authentication-method-repository [FEATURE] Ajouter une route pour anonymiser en masse les données du GAR Jun 18, 2024
@EmmanuelleBonnemay EmmanuelleBonnemay marked this pull request as ready for review June 19, 2024 07:43
@EmmanuelleBonnemay EmmanuelleBonnemay requested a review from a team as a code owner June 19, 2024 07:43
method: 'POST',
headers: { authorization: generateValidRequestAuthorizationHeader(user.id) },
url: '/api/admin/anonymize/gar',
payload: iconv.encode(input, 'UTF-8'),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ici on peut se passer de la conversion en UTF-8 puisque la 1ère ligne contient uniquement du texte en ASCII et que les lignes suivantes contiennent uniquement des digits. En effet la conversion en UTF-8 de ce contenu sera la même que le contenu d'origine.

Suggested change
payload: iconv.encode(input, 'UTF-8'),
payload: input,

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce point n'a pas été modifié, mais on pourra ajouter un commit dans une autre PR.

* @param {Object} params
* @param {string} params.userIds
* @param {AuthenticationMethodRepository} params.authenticationMethodRepository
* @return {Promise<void>}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* @return {Promise<void>}
* @return {Promise<{anonymized: string[], total: number}>}

api/src/identity-access-management/application/routes.js Outdated Show resolved Hide resolved
});

it('calls anonymizeGarResultSerializer.serialize', async function () {
// given
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// given

});

it('calls parsing function', async function () {
// given
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// given

import { anonymizeGARAuthenticationMethods } from '../../../../../src/identity-access-management/domain/usecases/anonymize-gar-authentication-methods.usecase.js';
import { expect, sinon } from '../../../../test-helper.js';

describe('Unit | Identity Access Management | Domain | UseCases | anonymize-gar-authentication-methods', function () {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
describe('Unit | Identity Access Management | Domain | UseCases | anonymize-gar-authentication-methods', function () {
describe('Unit | Identity Access Management | Domain | UseCase | anonymize-gar-authentication-methods', function () {

Copy link
Contributor

@lego-technix lego-technix left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Lu et testé fonctionnellement avec succès avec Firefox

EmmanuelleBonnemay and others added 6 commits June 20, 2024 12:09
Co-authored-by: Eric Lim <eric.lim@zenika.com>
Co-authored-by: Marianne Bost <marianne.bost@pix.fr>
Co-authored-by: Eric Lim <eric.lim@zenika.com>
Co-authored-by: Marianne Bost <marianne.bost@pix.fr>
Co-authored-by: Eric Lim <eric.lim@zenika.com>
Co-authored-by: Eric Lim <eric.lim@zenika.com>
@pix-service-auto-merge pix-service-auto-merge merged commit c1cc71c into dev Jun 20, 2024
6 of 7 checks passed
@pix-service-auto-merge pix-service-auto-merge deleted the pix-12806-add-gar-anonymised-api branch June 20, 2024 12:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants