From 6823bdeb503c42c0390dfb1225a6dfa4b03bbc46 Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Wed, 6 May 2026 22:07:30 +0300 Subject: [PATCH] implement ConfirmUserEmail use case --- .../ConfirmUserEmail/ConfirmUserEmail.php | 65 +++++++++++++++++++ .../ConfirmUserEmailRequest.php | 11 ++++ 2 files changed, 76 insertions(+) create mode 100644 backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmail.php create mode 100644 backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmailRequest.php diff --git a/backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmail.php b/backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmail.php new file mode 100644 index 0000000..1fdb563 --- /dev/null +++ b/backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmail.php @@ -0,0 +1,65 @@ +token === null || $request->token === '') { + throw new BadRequestException('token is required'); + } + if ($request->password === null || $request->password === '') { + throw new BadRequestException('password is required'); + } + if (strlen($request->password) < self::MIN_PASSWORD_LENGTH) { + throw new BadRequestException( + 'password must be at least ' + .self::MIN_PASSWORD_LENGTH.' characters' + ); + } + + $token = $this->tokenRepo->findByToken($request->token); + if ($token === null) { + throw new DomainException('token not found'); + } + + $now = $this->clock->now(); + if ($token->getAvailableTo() < $now) { + throw new DomainException('token expired'); + } + + $user = $token->getUser(); + $confirmedUser = new User( + id: $user->getId(), + email: $user->getEmail(), + displayName: $user->getDisplayName(), + passwordHash: $this->hasher->hash($request->password), + isAdmin: $user->isAdmin(), + emailConfirmedAt: $now, + ); + $this->userRepo->update($confirmedUser); + $this->tokenRepo->delete($token->getId()); + } +} diff --git a/backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmailRequest.php b/backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmailRequest.php new file mode 100644 index 0000000..6945ebe --- /dev/null +++ b/backend/app/User/UseCases/ConfirmUserEmail/ConfirmUserEmailRequest.php @@ -0,0 +1,11 @@ +