feat(#31): API Changement MDP obligatoire première connexion (#77)

Co-authored-by: Julien Martin <julien.martin@ptits-pas.fr>
Co-committed-by: Julien Martin <julien.martin@ptits-pas.fr>
This commit was merged in pull request #77.
This commit is contained in:
2026-01-27 15:13:45 +00:00
committed by jmartin
parent c5028c3b22
commit 95d1c3741b
3 changed files with 105 additions and 1 deletions
+28 -1
View File
@@ -1,10 +1,11 @@
import { Body, Controller, Get, Post, Req, UnauthorizedException, UseGuards } from '@nestjs/common';
import { Body, Controller, Get, Post, Req, UnauthorizedException, BadRequestException, UseGuards } from '@nestjs/common';
import { LoginDto } from './dto/login.dto';
import { AuthService } from './auth.service';
import { Public } from 'src/common/decorators/public.decorator';
import { RegisterDto } from './dto/register.dto';
import { RegisterParentDto } from './dto/register-parent.dto';
import { RegisterParentCompletDto } from './dto/register-parent-complet.dto';
import { ChangePasswordRequiredDto } from './dto/change-password.dto';
import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { AuthGuard } from 'src/common/guards/auth.guard';
import type { Request } from 'express';
@@ -97,5 +98,31 @@ export class AuthController {
logout(@User() currentUser: Users) {
return this.authService.logout(currentUser.id);
}
@Post('change-password-required')
@UseGuards(AuthGuard)
@ApiBearerAuth('access-token')
@ApiOperation({
summary: 'Changement de mot de passe obligatoire',
description: 'Permet de changer le mot de passe lors de la première connexion (flag changement_mdp_obligatoire)'
})
@ApiResponse({ status: 200, description: 'Mot de passe changé avec succès' })
@ApiResponse({ status: 400, description: 'Mot de passe actuel incorrect ou confirmation non correspondante' })
@ApiResponse({ status: 403, description: 'Changement de mot de passe non requis pour cet utilisateur' })
async changePasswordRequired(
@User() currentUser: Users,
@Body() dto: ChangePasswordRequiredDto,
) {
// Vérifier que les mots de passe correspondent
if (dto.nouveau_mot_de_passe !== dto.confirmation_mot_de_passe) {
throw new BadRequestException('Les mots de passe ne correspondent pas');
}
return this.authService.changePasswordRequired(
currentUser.id,
dto.mot_de_passe_actuel,
dto.nouveau_mot_de_passe,
);
}
}