diff --git a/src/Admin/src/Handler/Account/PatchAdminAccountResourceHandler.php b/src/Admin/src/Handler/Account/PatchAdminAccountResourceHandler.php index fbaf475f..8e27fa7e 100644 --- a/src/Admin/src/Handler/Account/PatchAdminAccountResourceHandler.php +++ b/src/Admin/src/Handler/Account/PatchAdminAccountResourceHandler.php @@ -19,9 +19,11 @@ class PatchAdminAccountResourceHandler extends AbstractHandler { #[Inject( AdminServiceInterface::class, + UpdateAdminInputFilter::class, )] public function __construct( protected AdminServiceInterface $adminService, + protected UpdateAdminInputFilter $inputFilter, ) { } @@ -32,12 +34,13 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new UpdateAdminInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $admin = $this->adminService->updateAdmin($request->getAttribute(Admin::class), $inputFilter->getValues()); + $admin = $request->getAttribute(Admin::class); + $this->adminService->updateAdmin($admin, (array) $this->inputFilter->getValues()); return $this->createResponse($request, $admin); } diff --git a/src/Admin/src/Handler/Admin/PatchAdminResourceHandler.php b/src/Admin/src/Handler/Admin/PatchAdminResourceHandler.php index 1749154b..8a08ecb2 100644 --- a/src/Admin/src/Handler/Admin/PatchAdminResourceHandler.php +++ b/src/Admin/src/Handler/Admin/PatchAdminResourceHandler.php @@ -18,9 +18,11 @@ class PatchAdminResourceHandler extends AbstractHandler { #[Inject( AdminServiceInterface::class, + UpdateAdminInputFilter::class, )] public function __construct( protected AdminServiceInterface $adminService, + protected UpdateAdminInputFilter $inputFilter, ) { } @@ -31,13 +33,13 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new UpdateAdminInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } $admin = $this->adminService->findOneBy(['uuid' => $request->getAttribute('uuid')]); - $this->adminService->updateAdmin($admin, $inputFilter->getValues()); + $this->adminService->updateAdmin($admin, (array) $this->inputFilter->getValues()); return $this->createResponse($request, $admin); } diff --git a/src/Admin/src/Handler/Admin/PostAdminResourceHandler.php b/src/Admin/src/Handler/Admin/PostAdminResourceHandler.php index 4f792de9..f21f0287 100644 --- a/src/Admin/src/Handler/Admin/PostAdminResourceHandler.php +++ b/src/Admin/src/Handler/Admin/PostAdminResourceHandler.php @@ -18,9 +18,11 @@ class PostAdminResourceHandler extends AbstractHandler { #[Inject( AdminServiceInterface::class, + CreateAdminInputFilter::class, )] public function __construct( protected AdminServiceInterface $adminService, + protected CreateAdminInputFilter $inputFilter, ) { } @@ -31,12 +33,12 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new CreateAdminInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $admin = $this->adminService->createAdmin($inputFilter->getValues()); + $admin = $this->adminService->createAdmin((array) $this->inputFilter->getValues()); return $this->createdResponse($request, $admin); } diff --git a/src/App/src/ConfigProvider.php b/src/App/src/ConfigProvider.php index 04516261..79bf2cd9 100644 --- a/src/App/src/ConfigProvider.php +++ b/src/App/src/ConfigProvider.php @@ -15,6 +15,7 @@ use Api\App\Middleware\AuthorizationMiddleware; use Api\App\Middleware\ContentNegotiationMiddleware; use Api\App\Middleware\DeprecationMiddleware; +use Api\App\Middleware\ErrorReportPermissionMiddleware; use Api\App\Middleware\ResponseMiddleware; use Api\App\Service\ErrorReportService; use Api\App\Service\ErrorReportServiceInterface; @@ -54,20 +55,21 @@ public function getDependencies(): array PostErrorReportResourceHandler::class => [HandlerDelegatorFactory::class], ], 'factories' => [ - 'dot-mail.options.default' => MailOptionsAbstractFactory::class, - 'dot-mail.service.default' => MailServiceAbstractFactory::class, - AuthenticationMiddleware::class => AuthenticationMiddlewareFactory::class, - AuthorizationMiddleware::class => AttributedServiceFactory::class, - ContentNegotiationMiddleware::class => AttributedServiceFactory::class, - DeprecationMiddleware::class => AttributedServiceFactory::class, - Environment::class => TwigEnvironmentFactory::class, - PostErrorReportResourceHandler::class => AttributedServiceFactory::class, - ErrorReportService::class => AttributedServiceFactory::class, - ResponseMiddleware::class => AttributedServiceFactory::class, - RouteListCommand::class => RouteListCommandFactory::class, - TokenGenerateCommand::class => TokenGenerateCommandFactory::class, - TwigExtension::class => TwigExtensionFactory::class, - TwigRenderer::class => TwigRendererFactory::class, + 'dot-mail.options.default' => MailOptionsAbstractFactory::class, + 'dot-mail.service.default' => MailServiceAbstractFactory::class, + AuthenticationMiddleware::class => AuthenticationMiddlewareFactory::class, + AuthorizationMiddleware::class => AttributedServiceFactory::class, + ContentNegotiationMiddleware::class => AttributedServiceFactory::class, + DeprecationMiddleware::class => AttributedServiceFactory::class, + Environment::class => TwigEnvironmentFactory::class, + ErrorReportPermissionMiddleware::class => AttributedServiceFactory::class, + PostErrorReportResourceHandler::class => AttributedServiceFactory::class, + ErrorReportService::class => AttributedServiceFactory::class, + ResponseMiddleware::class => AttributedServiceFactory::class, + RouteListCommand::class => RouteListCommandFactory::class, + TokenGenerateCommand::class => TokenGenerateCommandFactory::class, + TwigExtension::class => TwigExtensionFactory::class, + TwigRenderer::class => TwigRendererFactory::class, ], 'aliases' => [ Authentication\AuthenticationInterface::class => Authentication\OAuth2\OAuth2Adapter::class, diff --git a/src/App/src/Handler/PostErrorReportResourceHandler.php b/src/App/src/Handler/PostErrorReportResourceHandler.php index d9e500ef..bc09d9ef 100644 --- a/src/App/src/Handler/PostErrorReportResourceHandler.php +++ b/src/App/src/Handler/PostErrorReportResourceHandler.php @@ -5,8 +5,8 @@ namespace Api\App\Handler; use Api\App\Attribute\MethodDeprecation; -use Api\App\Exception\ForbiddenException; -use Api\App\Exception\UnauthorizedException; +use Api\App\Exception\BadRequestException; +use Api\App\InputFilter\ErrorReportInputFilter; use Api\App\Service\ErrorReportServiceInterface; use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; @@ -19,16 +19,17 @@ class PostErrorReportResourceHandler extends AbstractHandler { #[Inject( ErrorReportServiceInterface::class, + ErrorReportInputFilter::class, )] public function __construct( protected ErrorReportServiceInterface $errorReportService, + protected ErrorReportInputFilter $inputFilter, ) { } /** - * @throws ForbiddenException + * @throws BadRequestException * @throws RuntimeException - * @throws UnauthorizedException */ #[MethodDeprecation( sunset: '2038-01-01', @@ -37,11 +38,12 @@ public function __construct( )] public function handle(ServerRequestInterface $request): ResponseInterface { - $this->errorReportService - ->checkRequest($request) - ->appendMessage( - $request->getParsedBody()['message'] ?? '' - ); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); + } + + $this->errorReportService->appendMessage($this->inputFilter->getValue('message')); return $this->infoResponse(Message::ERROR_REPORT_OK, StatusCodeInterface::STATUS_CREATED); } diff --git a/src/App/src/InputFilter/ErrorReportInputFilter.php b/src/App/src/InputFilter/ErrorReportInputFilter.php new file mode 100644 index 00000000..eb7f465c --- /dev/null +++ b/src/App/src/InputFilter/ErrorReportInputFilter.php @@ -0,0 +1,19 @@ + + */ +class ErrorReportInputFilter extends InputFilter +{ + public function __construct() + { + $this->add(new MessageInput('message')); + } +} diff --git a/src/App/src/InputFilter/Input/MessageInput.php b/src/App/src/InputFilter/Input/MessageInput.php new file mode 100644 index 00000000..d5f1e2b4 --- /dev/null +++ b/src/App/src/InputFilter/Input/MessageInput.php @@ -0,0 +1,32 @@ +setRequired($isRequired); + + $this->getFilterChain() + ->attachByName(StringTrim::class) + ->attachByName(StripTags::class); + + $this->getValidatorChain() + ->attachByName(NotEmpty::class, [ + 'message' => sprintf(Message::VALIDATOR_REQUIRED_FIELD_BY_NAME, 'Message'), + ], true); + } +} diff --git a/src/App/src/Middleware/ErrorReportPermissionMiddleware.php b/src/App/src/Middleware/ErrorReportPermissionMiddleware.php new file mode 100644 index 00000000..30794cae --- /dev/null +++ b/src/App/src/Middleware/ErrorReportPermissionMiddleware.php @@ -0,0 +1,36 @@ +errorReportService->checkRequest($request); + + return $handler->handle($request); + } +} diff --git a/src/App/src/RoutesDelegator.php b/src/App/src/RoutesDelegator.php index cd249966..d4ab78a3 100644 --- a/src/App/src/RoutesDelegator.php +++ b/src/App/src/RoutesDelegator.php @@ -6,6 +6,7 @@ use Api\App\Handler\GetIndexResourceHandler; use Api\App\Handler\PostErrorReportResourceHandler; +use Api\App\Middleware\ErrorReportPermissionMiddleware; use Mezzio\Application; use Psr\Container\ContainerInterface; @@ -24,7 +25,11 @@ public function __invoke(ContainerInterface $container, string $serviceName, cal $app->get('/', GetIndexResourceHandler::class, 'app::view-index'); // Other application reports an error - $app->post('/error-report', PostErrorReportResourceHandler::class, 'app::create-error-report'); + $app->post( + '/error-report', + [ErrorReportPermissionMiddleware::class, PostErrorReportResourceHandler::class], + 'app::create-error-report' + ); return $app; } diff --git a/src/User/src/Handler/Account/Avatar/PostUserAccountAvatarHandler.php b/src/User/src/Handler/Account/Avatar/PostUserAccountAvatarHandler.php index 82030523..9e2e87c1 100644 --- a/src/User/src/Handler/Account/Avatar/PostUserAccountAvatarHandler.php +++ b/src/User/src/Handler/Account/Avatar/PostUserAccountAvatarHandler.php @@ -17,9 +17,11 @@ class PostUserAccountAvatarHandler extends AbstractHandler { #[Inject( UserAvatarServiceInterface::class, + UpdateAvatarInputFilter::class, )] public function __construct( protected UserAvatarServiceInterface $userAvatarService, + protected UpdateAvatarInputFilter $inputFilter, ) { } @@ -28,14 +30,14 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new UpdateAvatarInputFilter())->setData($request->getUploadedFiles()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData($request->getUploadedFiles()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } $userAvatar = $this->userAvatarService->createAvatar( $request->getAttribute(User::class), - $inputFilter->getValue('avatar') + $this->inputFilter->getValue('avatar') ); return $this->createdResponse($request, $userAvatar); diff --git a/src/User/src/Handler/Account/PatchUserAccountResourceHandler.php b/src/User/src/Handler/Account/PatchUserAccountResourceHandler.php index 58d59f03..8c5ddea2 100644 --- a/src/User/src/Handler/Account/PatchUserAccountResourceHandler.php +++ b/src/User/src/Handler/Account/PatchUserAccountResourceHandler.php @@ -19,9 +19,11 @@ class PatchUserAccountResourceHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + UpdateUserInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected UpdateUserInputFilter $inputFilter, ) { } @@ -32,14 +34,15 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new UpdateUserInputFilter()) + $this->inputFilter ->setValidationGroup(['password', 'passwordConfirm', 'detail']) ->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $user = $this->userService->updateUser($request->getAttribute(User::class), $inputFilter->getValues()); + $user = $request->getAttribute(User::class); + $this->userService->updateUser($user, (array) $this->inputFilter->getValues()); return $this->createResponse($request, $user); } diff --git a/src/User/src/Handler/Account/PostUserAccountActivateHandler.php b/src/User/src/Handler/Account/PostUserAccountActivateHandler.php index ed86dd1e..53d400a8 100644 --- a/src/User/src/Handler/Account/PostUserAccountActivateHandler.php +++ b/src/User/src/Handler/Account/PostUserAccountActivateHandler.php @@ -23,9 +23,11 @@ class PostUserAccountActivateHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + ActivateAccountInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected ActivateAccountInputFilter $inputFilter, ) { } @@ -37,12 +39,12 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new ActivateAccountInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $user = $this->userService->findByEmail($inputFilter->getValue('email')); + $user = $this->userService->findByEmail($this->inputFilter->getValue('email')); if ($user->isActive()) { throw new ConflictException(Message::USER_ALREADY_ACTIVATED); } diff --git a/src/User/src/Handler/Account/PostUserAccountRecoverHandler.php b/src/User/src/Handler/Account/PostUserAccountRecoverHandler.php index 502e4cf3..27b443ba 100644 --- a/src/User/src/Handler/Account/PostUserAccountRecoverHandler.php +++ b/src/User/src/Handler/Account/PostUserAccountRecoverHandler.php @@ -19,9 +19,11 @@ class PostUserAccountRecoverHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + RecoverIdentityInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected RecoverIdentityInputFilter $inputFilter, ) { } @@ -32,12 +34,12 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new RecoverIdentityInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $user = $this->userService->findByEmail($inputFilter->getValue('email')); + $user = $this->userService->findByEmail($this->inputFilter->getValue('email')); $this->userService->sendRecoverIdentityMail($user); return $this->infoResponse(Message::MAIL_SENT_RECOVER_IDENTITY); diff --git a/src/User/src/Handler/Account/PostUserAccountResourceHandler.php b/src/User/src/Handler/Account/PostUserAccountResourceHandler.php index 9b5607a1..4e393344 100644 --- a/src/User/src/Handler/Account/PostUserAccountResourceHandler.php +++ b/src/User/src/Handler/Account/PostUserAccountResourceHandler.php @@ -19,9 +19,11 @@ class PostUserAccountResourceHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + CreateUserInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected CreateUserInputFilter $inputFilter, ) { } @@ -33,14 +35,14 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new CreateUserInputFilter()) + $this->inputFilter ->setValidationGroup(['identity', 'password', 'passwordConfirm', 'detail']) ->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $user = $this->userService->createUser($inputFilter->getValues()); + $user = $this->userService->createUser((array) $this->inputFilter->getValues()); $this->userService->sendActivationMail($user); return $this->createdResponse($request, $user); diff --git a/src/User/src/Handler/Account/ResetPassword/PatchUserAccountResetPasswordHandler.php b/src/User/src/Handler/Account/ResetPassword/PatchUserAccountResetPasswordHandler.php index 751a2f15..7fd9454d 100644 --- a/src/User/src/Handler/Account/ResetPassword/PatchUserAccountResetPasswordHandler.php +++ b/src/User/src/Handler/Account/ResetPassword/PatchUserAccountResetPasswordHandler.php @@ -23,9 +23,11 @@ class PatchUserAccountResetPasswordHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + UpdatePasswordInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected UpdatePasswordInputFilter $inputFilter, ) { } @@ -48,14 +50,14 @@ public function handle(ServerRequestInterface $request): ResponseInterface throw new ConflictException(sprintf(Message::RESET_PASSWORD_USED, $hash)); } - $inputFilter = (new UpdatePasswordInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } $this->userService->updateUser( $userResetPassword->markAsCompleted()->getUser(), - $inputFilter->getValues() + (array) $this->inputFilter->getValues() ); $this->userService->sendResetPasswordCompletedMail($userResetPassword->getUser()); diff --git a/src/User/src/Handler/Account/ResetPassword/PostUserAccountResetPasswordHandler.php b/src/User/src/Handler/Account/ResetPassword/PostUserAccountResetPasswordHandler.php index e394a680..5d3b54d9 100644 --- a/src/User/src/Handler/Account/ResetPassword/PostUserAccountResetPasswordHandler.php +++ b/src/User/src/Handler/Account/ResetPassword/PostUserAccountResetPasswordHandler.php @@ -22,9 +22,11 @@ class PostUserAccountResetPasswordHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + ResetPasswordInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected ResetPasswordInputFilter $inputFilter, ) { } @@ -36,15 +38,15 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new ResetPasswordInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - if (! empty($inputFilter->getValue('email'))) { - $user = $this->userService->findByEmail($inputFilter->getValue('email')); - } elseif (! empty($inputFilter->getValue('identity'))) { - $user = $this->userService->findByIdentity($inputFilter->getValue('identity')); + if (! empty($this->inputFilter->getValue('email'))) { + $user = $this->userService->findByEmail($this->inputFilter->getValue('email')); + } elseif (! empty($this->inputFilter->getValue('identity'))) { + $user = $this->userService->findByIdentity($this->inputFilter->getValue('identity')); } else { $user = null; } diff --git a/src/User/src/Handler/User/Avatar/PostUserAvatarResourceHandler.php b/src/User/src/Handler/User/Avatar/PostUserAvatarResourceHandler.php index 050f2bdb..cf771dbd 100644 --- a/src/User/src/Handler/User/Avatar/PostUserAvatarResourceHandler.php +++ b/src/User/src/Handler/User/Avatar/PostUserAvatarResourceHandler.php @@ -19,10 +19,12 @@ class PostUserAvatarResourceHandler extends AbstractHandler #[Inject( UserServiceInterface::class, UserAvatarServiceInterface::class, + UpdateAvatarInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, protected UserAvatarServiceInterface $userAvatarService, + protected UpdateAvatarInputFilter $inputFilter, ) { } @@ -32,14 +34,13 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new UpdateAvatarInputFilter())->setData($request->getUploadedFiles()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData($request->getUploadedFiles()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $user = $this->userService->findOneBy(['uuid' => $request->getAttribute('uuid')]); - - $userAvatar = $this->userAvatarService->createAvatar($user, $inputFilter->getValue('avatar')); + $user = $this->userService->findOneBy(['uuid' => $request->getAttribute('uuid')]); + $userAvatar = $this->userAvatarService->createAvatar($user, $this->inputFilter->getValue('avatar')); return $this->createdResponse($request, $userAvatar); } diff --git a/src/User/src/Handler/User/PatchUserResourceHandler.php b/src/User/src/Handler/User/PatchUserResourceHandler.php index 09e9b4fc..fe9159dc 100644 --- a/src/User/src/Handler/User/PatchUserResourceHandler.php +++ b/src/User/src/Handler/User/PatchUserResourceHandler.php @@ -18,9 +18,11 @@ class PatchUserResourceHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + UpdateUserInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected UpdateUserInputFilter $inputFilter, ) { } @@ -31,13 +33,13 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new UpdateUserInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } $user = $this->userService->findOneBy(['uuid' => $request->getAttribute('uuid')]); - $this->userService->updateUser($user, $inputFilter->getValues()); + $this->userService->updateUser($user, (array) $this->inputFilter->getValues()); return $this->createResponse($request, $user); } diff --git a/src/User/src/Handler/User/PostUserResourceHandler.php b/src/User/src/Handler/User/PostUserResourceHandler.php index 85b2401b..7ae13343 100644 --- a/src/User/src/Handler/User/PostUserResourceHandler.php +++ b/src/User/src/Handler/User/PostUserResourceHandler.php @@ -19,9 +19,11 @@ class PostUserResourceHandler extends AbstractHandler { #[Inject( UserServiceInterface::class, + CreateUserInputFilter::class, )] public function __construct( protected UserServiceInterface $userService, + protected CreateUserInputFilter $inputFilter, ) { } @@ -33,12 +35,12 @@ public function __construct( */ public function handle(ServerRequestInterface $request): ResponseInterface { - $inputFilter = (new CreateUserInputFilter())->setData((array) $request->getParsedBody()); - if (! $inputFilter->isValid()) { - throw (new BadRequestException())->setMessages($inputFilter->getMessages()); + $this->inputFilter->setData((array) $request->getParsedBody()); + if (! $this->inputFilter->isValid()) { + throw (new BadRequestException())->setMessages($this->inputFilter->getMessages()); } - $user = $this->userService->createUser($inputFilter->getValues()); + $user = $this->userService->createUser((array) $this->inputFilter->getValues()); if ($user->isPending()) { $this->userService->sendActivationMail($user); } elseif ($user->isActive()) {