Skip to content

Commit

Permalink
[TECH] Migrer la route POST /api/account-recovery vers src/identity-a…
Browse files Browse the repository at this point in the history
…ccess-management (PIX-12740)

 #9321
  • Loading branch information
pix-service-auto-merge authored Jun 21, 2024
2 parents 6982364 + 695c1fb commit 487108e
Show file tree
Hide file tree
Showing 13 changed files with 219 additions and 240 deletions.

This file was deleted.

44 changes: 0 additions & 44 deletions api/lib/application/account-recovery/index.js

This file was deleted.

1 change: 0 additions & 1 deletion api/lib/domain/usecases/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,6 @@ const path = dirname(fileURLToPath(import.meta.url));

const usecasesWithoutInjectedDependencies = {
...(await importNamedExportsFromDirectory({ path: join(path, './'), ignoredFileNames: ['index.js'] })),
...(await importNamedExportsFromDirectory({ path: join(path, './account-recovery') })),
...(await importNamedExportsFromDirectory({ path: join(path, './certificate') })),
...(await importNamedExportsFromDirectory({ path: join(path, './organizations-administration') })),
...(await importNamedExportsFromDirectory({ path: join(path, './stages') })),
Expand Down
2 changes: 0 additions & 2 deletions api/lib/routes.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import * as accountRecovery from './application/account-recovery/index.js';
import * as adminMembers from './application/admin-members/index.js';
import * as authentication from './application/authentication/index.js';
import * as cache from './application/cache/index.js';
Expand Down Expand Up @@ -36,7 +35,6 @@ import * as userOrgaSettings from './application/user-orga-settings/index.js';
import * as users from './application/users/index.js';

const routes = [
accountRecovery,
adminMembers,
authentication,
cache,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,20 @@ const checkAccountRecoveryDemand = async function (
return dependencies.studentInformationForAccountRecoverySerializer.serializeAccountRecovery(studentInformation);
};

const sendEmailForAccountRecovery = async function (
request,
h,
dependencies = { studentInformationForAccountRecoverySerializer },
) {
const studentInformation = await dependencies.studentInformationForAccountRecoverySerializer.deserialize(
request.payload,
);

await usecases.sendEmailForAccountRecovery({ studentInformation });

return h.response().code(204);
};

const updateUserAccountFromRecoveryDemand = async function (request, h) {
const temporaryKey = request.payload.data.attributes['temporary-key'];
const password = request.payload.data.attributes.password;
Expand All @@ -29,5 +43,6 @@ const updateUserAccountFromRecoveryDemand = async function (request, h) {

export const accountRecoveryController = {
checkAccountRecoveryDemand,
sendEmailForAccountRecovery,
updateUserAccountFromRecoveryDemand,
};
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import Joi from 'joi';
import JoiDate from '@joi/date';
import BaseJoi from 'joi';
import XRegExp from 'xregexp';

import { config } from '../../../shared/config.js';
import { accountRecoveryController } from './account-recovery.controller.js';

const Joi = BaseJoi.extend(JoiDate);
const { passwordValidationPattern } = config.account;
const inePattern = new RegExp('^[0-9]{9}[a-zA-Z]{2}$');
const inaPattern = new RegExp('^[0-9]{10}[a-zA-Z]{1}$');

export const accountRecoveryRoutes = [
{
Expand Down Expand Up @@ -48,4 +52,33 @@ export const accountRecoveryRoutes = [
tags: ['identity-access-management', 'api', 'account-recovery'],
},
},
{
method: 'POST',
path: '/api/account-recovery',
config: {
auth: false,
handler: accountRecoveryController.sendEmailForAccountRecovery,
validate: {
payload: Joi.object({
data: {
attributes: {
'first-name': Joi.string().empty(Joi.string().regex(/^\s*$/)).required(),
'last-name': Joi.string().empty(Joi.string().regex(/^\s*$/)).required(),
'ine-ina': Joi.alternatives().try(
Joi.string().regex(inePattern).required(),
Joi.string().regex(inaPattern).required(),
),
birthdate: Joi.date().format('YYYY-MM-DD').required(),
email: Joi.string().email().required(),
},
},
}),
options: {
allowUnknown: true,
},
},
notes: ["- Permet d'envoyer un mail de demande d'ajout de mot de passe pour récupérer son compte Pix."],
tags: ['api', 'account-recovery'],
},
},
];
2 changes: 2 additions & 0 deletions api/src/identity-access-management/domain/usecases/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';

import { mailService } from '../../../../lib/domain/services/mail-service.js';
import * as userReconciliationService from '../../../../lib/domain/services/user-reconciliation-service.js';
import { oidcAuthenticationServiceRegistry } from '../../../../lib/domain/usecases/index.js';
import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js';
import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-repository.js';
Expand Down Expand Up @@ -54,6 +55,7 @@ const services = {
resetPasswordService,
scoAccountRecoveryService,
tokenService,
userReconciliationService,
userService,
};
const validators = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
import crypto from 'node:crypto';

import { AccountRecoveryDemand } from '../../../../src/identity-access-management/domain/models/AccountRecoveryDemand.js';
import { AccountRecoveryDemand } from '../models/AccountRecoveryDemand.js';

const sendEmailForAccountRecovery = async function ({
/**
* @param {{
* studentInformation: Object,
* temporaryKey: string,
* accountRecoveryDemandRepository: AccountRecoveryDemandRepository,
* organizationLearnerRepository: OrganizationLearnerRepository,
* userRepository: UserRepository,
* mailService: MailService,
* scoAccountRecoveryService: ScoAccountRecoveryService,
* userReconciliationService: UserReconciliationService,
* }} params
* @return {Promise<void>}
*/
export const sendEmailForAccountRecovery = async function ({
studentInformation,
temporaryKey,
organizationLearnerRepository,
Expand Down Expand Up @@ -46,5 +59,3 @@ const sendEmailForAccountRecovery = async function ({
temporaryKey: encodedTemporaryKey,
});
};

export { sendEmailForAccountRecovery };

This file was deleted.

Loading

0 comments on commit 487108e

Please sign in to comment.