-
Notifications
You must be signed in to change notification settings - Fork 55
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
Conversation
Une fois les applications déployées, elles seront accessibles via les liens suivants :
Les variables d'environnement seront accessibles via les liens suivants : |
131c2c1
to
8792729
Compare
...c/identity-access-management/infrastructure/repositories/authentication-method-repository.js
Outdated
Show resolved
Hide resolved
...c/identity-access-management/infrastructure/repositories/authentication-method-repository.js
Outdated
Show resolved
Hide resolved
aff9da1
to
f3deebb
Compare
0bd1d63
to
d0910de
Compare
1162551
to
043fa9a
Compare
566a481
to
451871c
Compare
b89e1e9
to
39ff086
Compare
39ff086
to
0bc20a0
Compare
2602ac5
to
42da8b5
Compare
...c/identity-access-management/infrastructure/repositories/authentication-method.repository.js
Outdated
Show resolved
Hide resolved
api/src/identity-access-management/domain/services/GARAnonymizationParser.js
Outdated
Show resolved
Hide resolved
api/src/identity-access-management/application/anonymization/anonymization.admin.controller.js
Outdated
Show resolved
Hide resolved
api/src/identity-access-management/domain/services/GARAnonymizationParser.js
Outdated
Show resolved
Hide resolved
...-management/integration/infrastructure/repositories/authentication-method.repository.test.js
Show resolved
Hide resolved
...c/identity-access-management/domain/usecases/anonymize-gar-authentication-methods.usecase.js
Outdated
Show resolved
Hide resolved
...c/identity-access-management/domain/usecases/anonymize-gar-authentication-methods.usecase.js
Outdated
Show resolved
Hide resolved
method: 'POST', | ||
headers: { authorization: generateValidRequestAuthorizationHeader(user.id) }, | ||
url: '/api/admin/anonymize/gar', | ||
payload: iconv.encode(input, 'UTF-8'), |
There was a problem hiding this comment.
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.
payload: iconv.encode(input, 'UTF-8'), | |
payload: input, |
There was a problem hiding this comment.
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.
...c/identity-access-management/infrastructure/repositories/authentication-method.repository.js
Outdated
Show resolved
Hide resolved
* @param {Object} params | ||
* @param {string} params.userIds | ||
* @param {AuthenticationMethodRepository} params.authenticationMethodRepository | ||
* @return {Promise<void>} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* @return {Promise<void>} | |
* @return {Promise<{anonymized: string[], total: number}>} |
api/src/identity-access-management/application/anonymization/anonymization.admin.controller.js
Show resolved
Hide resolved
api/tests/identity-access-management/acceptance/application/anonymization.admin.route.test.js
Outdated
Show resolved
Hide resolved
}); | ||
|
||
it('calls anonymizeGarResultSerializer.serialize', async function () { | ||
// given |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// given |
}); | ||
|
||
it('calls parsing function', async function () { | ||
// given |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 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 () { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
describe('Unit | Identity Access Management | Domain | UseCases | anonymize-gar-authentication-methods', function () { | |
describe('Unit | Identity Access Management | Domain | UseCase | anonymize-gar-authentication-methods', function () { |
...-access-management/unit/domain/usecases/anonymize-gar-authentication-methods.usecase.test.js
Outdated
Show resolved
Hide resolved
...s-management/unit/infrastructure/serializers/jsonapi/anonymize-gar-result.serializer.test.js
Outdated
Show resolved
Hide resolved
There was a problem hiding this 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
...c/identity-access-management/infrastructure/repositories/authentication-method.repository.js
Outdated
Show resolved
Hide resolved
42da8b5
to
3671b1a
Compare
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>
3671b1a
to
74e53c1
Compare
🦄 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
💯 Pour tester
Pour l'ensemble des tests il faut :
User ID
et en données les 4 id. Noter le path du fichierPOST http://localhost:3000/api/admin/anonymize/gar
: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étailValidationError: \"[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
parOrganization ID
. Constater l'erreur412 "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:
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 :
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
.