From df4363dd37a0488a5b159a1118c1309a20667c04 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 28 Jan 2026 14:15:17 +0100 Subject: [PATCH] resend correct mail to existing user --- src/Controller/UserController.php | 90 ++++++++++++++++--------------- src/Service/UserService.php | 2 +- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index bf77f0f..c1e79a5 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -47,17 +47,17 @@ class UserController extends AbstractController private readonly UserOrganizationService $userOrganizationService, private readonly UserRepository $userRepository, private readonly UsersOrganizationsRepository $uoRepository, - private readonly OrganizationsRepository $organizationRepository, - private readonly LoggerInterface $userManagementLogger, - private readonly LoggerInterface $organizationManagementLogger, - private readonly LoggerInterface $errorLogger, - private readonly LoggerInterface $securityLogger, - private readonly LoggerService $loggerService, - private readonly EmailService $emailService, - private readonly AwsService $awsService, - private readonly OrganizationsService $organizationsService, - private readonly AppsRepository $appsRepository, - private readonly RolesRepository $rolesRepository, private readonly AccessTokenService $accessTokenService, + private readonly OrganizationsRepository $organizationRepository, + private readonly LoggerInterface $userManagementLogger, + private readonly LoggerInterface $organizationManagementLogger, + private readonly LoggerInterface $errorLogger, + private readonly LoggerInterface $securityLogger, + private readonly LoggerService $loggerService, + private readonly EmailService $emailService, + private readonly AwsService $awsService, + private readonly OrganizationsService $organizationsService, + private readonly AppsRepository $appsRepository, + private readonly RolesRepository $rolesRepository, private readonly AccessTokenService $accessTokenService, ) { } @@ -168,7 +168,7 @@ class UserController extends AbstractController // ------------------------------------------------------------------- // Calcul du flag de modification : utilisateur admin ET exactement 1 UO - $canEdit = $this->userService->canEditRolesCheck($actingUser, $user,$this->isGranted('ROLE_ADMIN'), $singleUo, $organization); + $canEdit = $this->userService->canEditRolesCheck($actingUser, $user, $this->isGranted('ROLE_ADMIN'), $singleUo, $organization); } catch (\Exception $e) { $this->loggerService->logError('error while loading user information', [ @@ -190,7 +190,7 @@ class UserController extends AbstractController ]); } - #[Route('/edit/{id}', name: 'edit', methods: ['GET','POST'])] + #[Route('/edit/{id}', name: 'edit', methods: ['GET', 'POST'])] public function edit(int $id, Request $request): Response { $this->denyAccessUnlessGranted('ROLE_USER'); @@ -290,12 +290,12 @@ class UserController extends AbstractController $this->addFlash('error', "L'organisation n'existe pas."); throw $this->createNotFoundException(self::NOT_FOUND); } - if($this->isGranted('ROLE_ADMIN') && !$this->userService->isAdminOfOrganization($org) && !$this->isGranted('ROLE_SUPER_ADMIN')) { + if ($this->isGranted('ROLE_ADMIN') && !$this->userService->isAdminOfOrganization($org) && !$this->isGranted('ROLE_SUPER_ADMIN')) { $this->loggerService->logAccessDenied($actingUser->getId()); $this->addFlash('error', "Accès non autorisé."); throw $this->createAccessDeniedException(self::ACCESS_DENIED); } - }elseif($this->isGranted('ROLE_ADMIN')) { + } elseif ($this->isGranted('ROLE_ADMIN')) { $this->loggerService->logAccessDenied($actingUser->getId()); $this->addFlash('error', "Accès non autorisé."); throw $this->createAccessDeniedException(self::ACCESS_DENIED); @@ -794,7 +794,7 @@ class UserController extends AbstractController $user = $uo->getUsers(); $initials = $user->getName()[0] . $user->getSurname()[0]; return [ - 'pictureUrl' =>$user->getPictureUrl(), + 'pictureUrl' => $user->getPictureUrl(), 'email' => $user->getEmail(), 'isConnected' => $this->userService->isUserConnected($user->getUserIdentifier()), 'showUrl' => $this->generateUrl('user_show', ['id' => $user->getId()]), @@ -931,31 +931,35 @@ class UserController extends AbstractController $this->loggerService->logEntityNotFound('User', ['id' => $user->getId()], $actingUser->getId()); throw $this->createNotFoundException(self::NOT_FOUND); } - $uo = $this->uoRepository->findOneBy(['users' => $user, - 'organization' => $org, - 'statut' => "INVITED"]); - if (!$uo) { - $this->loggerService->logEntityNotFound('UsersOrganization', [ - 'user_id' => $user->getId(), - 'organization_id' => $orgId], $actingUser->getId()); - throw $this->createNotFoundException(self::NOT_FOUND); - } - $uo->setModifiedAt(new \DateTimeImmutable()); - try { - $data = ['user' => $uo->getUsers(), 'organization' => $uo->getOrganization()]; - $token = $this->userService->generatePasswordToken($user, $org->getId()); - $this->emailService->sendPasswordSetupEmail($user, $token); - $this->loggerService->logEmailSent($userId, $org->getId(), 'Invitation Resent'); - $this->organizationsService->notifyOrganizationAdmins($data, 'USER_INVITED'); - return $this->json(['message' => 'Invitation envoyée avec success.'], Response::HTTP_OK); - } catch (\Exception $e) { - $this->loggerService->logCritical('Error while resending invitation', [ - 'target_user_id' => $user->getId(), - 'organization_id' => $orgId, - 'acting_user_id' => $actingUser->getId(), - 'error' => $e->getMessage(), - ]); - return $this->json(['message' => 'Erreur lors de l\'envoie du mail.'], Response::HTTP_INTERNAL_SERVER_ERROR); + $token = $this->userService->generatePasswordToken($user, $org->getId()); + if ($user->getLastConnection() !== null) { + $this->userService->sendExistingUserNotifications($user, $org, $actingUser); + } else { + $uo = $this->uoRepository->findOneBy(['users' => $user, + 'organization' => $org, + 'statut' => "INVITED"]); + if (!$uo) { + $this->loggerService->logEntityNotFound('UsersOrganization', [ + 'user_id' => $user->getId(), + 'organization_id' => $orgId], $actingUser->getId()); + throw $this->createNotFoundException(self::NOT_FOUND); + } + $uo->setModifiedAt(new \DateTimeImmutable()); + try { + $data = ['user' => $uo->getUsers(), 'organization' => $uo->getOrganization()]; + $this->emailService->sendPasswordSetupEmail($user, $token); + $this->loggerService->logEmailSent($userId, $org->getId(), 'Invitation Resent'); + $this->organizationsService->notifyOrganizationAdmins($data, 'USER_INVITED'); + return $this->json(['message' => 'Invitation envoyée avec success.'], Response::HTTP_OK); + } catch (\Exception $e) { + $this->loggerService->logCritical('Error while resending invitation', [ + 'target_user_id' => $user->getId(), + 'organization_id' => $orgId, + 'acting_user_id' => $actingUser->getId(), + 'error' => $e->getMessage(), + ]); + return $this->json(['message' => 'Erreur lors de l\'envoie du mail.'], Response::HTTP_INTERNAL_SERVER_ERROR); + } } } throw $this->createAccessDeniedException(self::ACCESS_DENIED); @@ -972,14 +976,14 @@ class UserController extends AbstractController 'token' => $token, 'user_id' => $userId ], - null); + null); throw $this->createNotFoundException('Invalid invitation link.'); } $user = $this->userRepository->find($userId); if (!$user) { $this->loggerService->logEntityNotFound('User not found in accept invitation', [ 'user_id' => $userId - ],null); + ], null); throw $this->createNotFoundException(self::NOT_FOUND); } if (!$this->userService->isPasswordTokenValid($user, $token)) { diff --git a/src/Service/UserService.php b/src/Service/UserService.php index c762440..924f460 100644 --- a/src/Service/UserService.php +++ b/src/Service/UserService.php @@ -660,7 +660,7 @@ class UserService } // Private helpers for email notifications - private function sendExistingUserNotifications(User $user, Organizations $org, User $actingUser): void + public function sendExistingUserNotifications(User $user, Organizations $org, User $actingUser): void { try { $token = $this->generatePasswordToken($user, $org->getId());