Skip to content

Commit 021b4e6

Browse files
committed
Issue #563: Upgraded packages and their implementations:
- laminas/laminas-inputfilter - laminas/laminas-hydrator - dotkernel/dot-errorhandler Signed-off-by: alexmerlin <alex.merlin.1985@gmail.com>
1 parent b7c92dc commit 021b4e6

60 files changed

Lines changed: 932 additions & 440 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎composer.json‎

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -52,47 +52,48 @@
5252
"php": "~8.3.0 || ~8.4.0 || ~8.5.0",
5353
"ext-gd": "*",
5454
"ext-json": "*",
55-
"dotkernel/dot-cache": "^4.3",
56-
"dotkernel/dot-cli": "^3.9.0",
57-
"dotkernel/dot-data-fixtures": "^1.4.0",
58-
"dotkernel/dot-dependency-injection": "^1.2",
59-
"dotkernel/dot-errorhandler": "^4.0.0",
60-
"dotkernel/dot-mail": "^5.3.0",
61-
"dotkernel/dot-response-header": "^3.5.0",
62-
"dotkernel/dot-router": "^1.0.5",
63-
"laminas/laminas-authentication": "^2.18",
64-
"laminas/laminas-component-installer": "^3.5.0",
65-
"laminas/laminas-config-aggregator": "^1.18.0",
66-
"laminas/laminas-hydrator": "^4.16.0",
67-
"laminas/laminas-inputfilter": "^2.31.0",
68-
"laminas/laminas-stdlib": "^3.20.0",
69-
"mezzio/mezzio": "^3.20.1",
70-
"mezzio/mezzio-authentication-oauth2": "^3.0.1",
71-
"mezzio/mezzio-authorization-acl": "^1.11.0",
72-
"mezzio/mezzio-authorization-rbac": "^1.8.0",
73-
"mezzio/mezzio-cors": "^1.13.0",
74-
"mezzio/mezzio-fastroute": "^3.12.0",
75-
"mezzio/mezzio-hal": "^2.10.1",
76-
"mezzio/mezzio-helpers": "^5.18",
77-
"mezzio/mezzio-problem-details": "^1.15.0",
78-
"ramsey/uuid": "^4.5.0",
55+
"dotkernel/dot-cache": "^4.4",
56+
"dotkernel/dot-cli": "^3.11.1",
57+
"dotkernel/dot-data-fixtures": "^1.5.0",
58+
"dotkernel/dot-dependency-injection": "^1.4.1",
59+
"dotkernel/dot-errorhandler": "^4.4.2",
60+
"dotkernel/dot-mail": "^5.4.3",
61+
"dotkernel/dot-response-header": "^3.6.0",
62+
"dotkernel/dot-router": "^1.1.0",
63+
"laminas/laminas-authentication": "^2.19",
64+
"laminas/laminas-component-installer": "^3.8.0",
65+
"laminas/laminas-config-aggregator": "^1.20.0",
66+
"laminas/laminas-hydrator": "^5.0.0",
67+
"laminas/laminas-inputfilter": "^3.0.x-dev",
68+
"laminas/laminas-servicemanager": "^4.5.1",
69+
"laminas/laminas-stdlib": "^3.21.0",
70+
"mezzio/mezzio": "^3.28.1",
71+
"mezzio/mezzio-authentication-oauth2": "^3.1.0",
72+
"mezzio/mezzio-authorization-acl": "^1.13.0",
73+
"mezzio/mezzio-authorization-rbac": "^1.10.0",
74+
"mezzio/mezzio-cors": "^1.16.0",
75+
"mezzio/mezzio-fastroute": "^3.14.0",
76+
"mezzio/mezzio-hal": "^2.13.0",
77+
"mezzio/mezzio-helpers": "^5.20",
78+
"mezzio/mezzio-problem-details": "^1.19.0",
79+
"ramsey/uuid": "^4.9.4",
7980
"ramsey/uuid-doctrine": "^2.1.0",
80-
"roave/psr-container-doctrine": "^5.2.2 || ^6.0.0",
81-
"symfony/filesystem": "^7.2.0",
82-
"symfony/var-exporter": "^6.4 || ^7.4",
83-
"zircote/swagger-php": "^6.4.0"
81+
"roave/psr-container-doctrine": "^5.2.2 || ^6.2.0",
82+
"symfony/filesystem": "^7.4.18",
83+
"symfony/var-exporter": "^6.4 || ^7.4.18",
84+
"zircote/swagger-php": "^6.13.0"
8485
},
8586
"require-dev": {
86-
"boundwize/structarmed": "^0.19.0",
87-
"dotkernel/dot-maker": "^2.0.0",
88-
"laminas/laminas-coding-standard": "^3.0.1",
89-
"laminas/laminas-development-mode": "^3.13.0",
90-
"phpstan/phpstan": "^2.1.11",
91-
"phpstan/phpstan-doctrine": "^2.0.2",
92-
"phpstan/phpstan-phpunit": "^2.0.6",
93-
"phpunit/phpunit": "^12.5.23",
87+
"boundwize/structarmed": "^0.19.4",
88+
"dotkernel/dot-maker": "^2.1.0",
89+
"laminas/laminas-coding-standard": "^3.1.0",
90+
"laminas/laminas-development-mode": "^3.15.0",
91+
"phpstan/phpstan": "^2.3.1",
92+
"phpstan/phpstan-doctrine": "^2.0.28",
93+
"phpstan/phpstan-phpunit": "^2.1.1",
94+
"phpunit/phpunit": "^12.5.39",
9495
"roave/security-advisories": "dev-latest",
95-
"symfony/var-dumper": "^7.2.3"
96+
"symfony/var-dumper": "^7.4.18"
9697
},
9798
"autoload": {
9899
"psr-4": {

‎config/autoload/error-handling.global.php‎

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,59 @@
33
declare(strict_types=1);
44

55
use Api\App\Service\ErrorReportServiceInterface;
6+
use Dot\ErrorHandler\Extra\ExtraProvider;
7+
use Dot\ErrorHandler\Extra\Processor\RequestProcessor;
8+
use Dot\ErrorHandler\Extra\Processor\TraceProcessor;
9+
use Dot\ErrorHandler\Extra\Provider\RequestProvider;
10+
use Dot\ErrorHandler\Extra\Provider\TraceProvider;
11+
use Dot\ErrorHandler\Extra\ReplacementStrategy;
612
use Dot\Log\Formatter\Json;
713
use Dot\Log\Logger;
814

915
return [
1016
'dot-errorhandler' => [
11-
'loggerEnabled' => true,
12-
'logger' => 'dot-log.default_logger',
17+
'loggerEnabled' => true,
18+
'logger' => 'dot-log.default_logger',
19+
ExtraProvider::CONFIG_KEY => [
20+
TraceProvider::class => [
21+
'enabled' => true,
22+
'processor' => [
23+
'class' => TraceProcessor::class,
24+
],
25+
],
26+
/**
27+
* Logs the parsed request body. Keys containing any of the sensitiveParameters are masked,
28+
* but other personal data (emails, names etc.) is logged as-is.
29+
*/
30+
RequestProvider::class => [
31+
'enabled' => false,
32+
'processor' => [
33+
'class' => RequestProcessor::class,
34+
'replacementStrategy' => ReplacementStrategy::Full,
35+
'sensitiveParameters' => [
36+
'password',
37+
'token',
38+
'secret',
39+
],
40+
],
41+
],
42+
],
1343
],
1444
'dot_log' => [
1545
'loggers' => [
1646
'default_logger' => [
1747
'writers' => [
1848
'FileWriter' => [
19-
'name' => 'stream',
20-
'priority' => Logger::ALERT,
21-
'options' => [
49+
'name' => 'stream',
50+
'level' => Logger::ALERT,
51+
'options' => [
2252
'stream' => __DIR__ . '/../../log/error-log-{Y}-{m}-{d}.log',
2353
'filters' => [
2454
'allMessages' => [
25-
'name' => 'priority',
55+
'name' => 'level',
2656
'options' => [
2757
'operator' => '>=',
28-
'priority' => Logger::EMERG,
58+
'level' => Logger::EMERG,
2959
],
3060
],
3161
],

‎config/cli-config.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
use Doctrine\Migrations\DependencyFactory;
1010
use Doctrine\ORM\EntityManager;
1111
use Doctrine\ORM\Events;
12-
use Dot\Log\LoggerInterface;
1312
use Psr\Container\ContainerExceptionInterface;
13+
use Psr\Log\LoggerInterface;
1414

1515
$container = require 'config/container.php';
1616

@@ -29,7 +29,7 @@
2929
try {
3030
/** @var LoggerInterface $logger */
3131
$logger = $container->get('dot-log.default_logger');
32-
$logger->err($exception->getMessage());
32+
$logger->error($exception->getMessage());
3333
} catch (ContainerExceptionInterface $exception) {
3434
error_log($exception->getMessage());
3535
}

‎src/Admin/src/Command/AdminCreateCommand.php‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Core\Admin\Entity\AdminRole;
1414
use Core\Admin\Enum\AdminRoleEnum;
1515
use Core\Admin\Enum\AdminStatusEnum;
16+
use Core\App\InputFilter\ValidationErrors;
1617
use Core\App\Message;
1718
use Dot\DependencyInjection\Attribute\Inject;
1819
use Exception;
@@ -41,10 +42,12 @@ class AdminCreateCommand extends Command
4142
#[Inject(
4243
AdminServiceInterface::class,
4344
AdminRoleServiceInterface::class,
45+
CreateAdminInputFilter::class,
4446
)]
4547
public function __construct(
4648
protected AdminServiceInterface $adminService,
4749
protected AdminRoleServiceInterface $adminRoleService,
50+
protected CreateAdminInputFilter $inputFilter,
4851
) {
4952
parent::__construct(self::$defaultName);
5053
}
@@ -71,10 +74,10 @@ protected function configure(): void
7174
*/
7275
protected function execute(InputInterface $input, OutputInterface $output): int
7376
{
74-
$inputFilter = (new CreateAdminInputFilter())->setData($this->getData($input));
75-
if (! $inputFilter->isValid()) {
77+
$result = $this->inputFilter->validate($this->getData($input));
78+
if (! $result->valid()) {
7679
$messages = [];
77-
foreach ($inputFilter->getMessages() as $field => $errors) {
80+
foreach (ValidationErrors::fromResult($result) as $field => $errors) {
7881
foreach ($errors as $error) {
7982
/** @var scalar $error */
8083
$messages[] = sprintf('%s: %s', $field, $error);
@@ -84,7 +87,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
8487
throw new Exception(implode(PHP_EOL, $messages));
8588
}
8689

87-
$this->adminService->saveAdmin($inputFilter->getValues());
90+
/** @var non-empty-array<non-empty-string, mixed> $data */
91+
$data = $result->value();
92+
93+
$this->adminService->saveAdmin($data);
8894

8995
(new SymfonyStyle($input, $output))->info(Message::ADMIN_CREATED);
9096

‎src/Admin/src/ConfigProvider.php‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
use Api\Admin\Handler\Admin\PostAdminResourceHandler;
1717
use Api\Admin\Handler\Admin\Role\GetAdminRoleCollectionHandler;
1818
use Api\Admin\Handler\Admin\Role\GetAdminRoleResourceHandler;
19+
use Api\Admin\InputFilter\CreateAdminInputFilter;
20+
use Api\Admin\InputFilter\UpdateAdminInputFilter;
1921
use Api\Admin\Service\AdminRoleService;
2022
use Api\Admin\Service\AdminRoleServiceInterface;
2123
use Api\Admin\Service\AdminService;
@@ -25,6 +27,7 @@
2527
use Core\Admin\Entity\Admin;
2628
use Core\Admin\Entity\AdminRole;
2729
use Dot\DependencyInjection\Factory\AttributedServiceFactory;
30+
use Laminas\InputFilter\InputFilterFactory;
2831
use Mezzio\Application;
2932
use Mezzio\Hal\Metadata\MetadataMap;
3033

@@ -71,6 +74,8 @@ private function getDependencies(): array
7174
PostAdminResourceHandler::class => [HandlerDelegatorFactory::class],
7275
],
7376
'factories' => [
77+
CreateAdminInputFilter::class => InputFilterFactory::class,
78+
UpdateAdminInputFilter::class => InputFilterFactory::class,
7479
AdminCreateCommand::class => AttributedServiceFactory::class,
7580
DeleteAdminResourceHandler::class => AttributedServiceFactory::class,
7681
GetAdminAccountResourceHandler::class => AttributedServiceFactory::class,

‎src/Admin/src/Handler/Account/PatchAdminAccountResourceHandler.php‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use Api\App\Exception\NotFoundException;
1212
use Api\App\Handler\AbstractHandler;
1313
use Api\App\IdentityInterface;
14-
use Core\App\Message;
1514
use Dot\DependencyInjection\Attribute\Inject;
1615
use Psr\Http\Message\ResponseInterface;
1716
use Psr\Http\Message\ServerRequestInterface;
@@ -35,16 +34,13 @@ public function __construct(
3534
*/
3635
public function handle(ServerRequestInterface $request): ResponseInterface
3736
{
38-
$this->inputFilter->setData((array) $request->getParsedBody());
39-
if (! $this->inputFilter->isValid()) {
40-
throw BadRequestException::create(
41-
detail: Message::VALIDATOR_INVALID_DATA,
42-
additional: ['errors' => $this->inputFilter->getMessages()]
43-
);
37+
$result = $this->inputFilter->validate((array) $request->getParsedBody());
38+
if (! $result->valid()) {
39+
throw BadRequestException::fromValidationResult($result);
4440
}
4541

4642
/** @var non-empty-array<non-empty-string, mixed> $data */
47-
$data = (array) $this->inputFilter->getValues();
43+
$data = $result->value();
4844

4945
return $this->createResponse(
5046
$request,

‎src/Admin/src/Handler/Admin/PatchAdminResourceHandler.php‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use Api\App\Exception\NotFoundException;
1313
use Api\App\Handler\AbstractHandler;
1414
use Core\Admin\Entity\Admin;
15-
use Core\App\Message;
1615
use Dot\DependencyInjection\Attribute\Inject;
1716
use Psr\Http\Message\ResponseInterface;
1817
use Psr\Http\Message\ServerRequestInterface;
@@ -37,16 +36,13 @@ public function __construct(
3736
#[Resource(entity: Admin::class)]
3837
public function handle(ServerRequestInterface $request): ResponseInterface
3938
{
40-
$this->inputFilter->setData((array) $request->getParsedBody());
41-
if (! $this->inputFilter->isValid()) {
42-
throw BadRequestException::create(
43-
detail: Message::VALIDATOR_INVALID_DATA,
44-
additional: ['errors' => $this->inputFilter->getMessages()]
45-
);
39+
$result = $this->inputFilter->validate((array) $request->getParsedBody());
40+
if (! $result->valid()) {
41+
throw BadRequestException::fromValidationResult($result);
4642
}
4743

4844
/** @var non-empty-array<non-empty-string, mixed> $data */
49-
$data = (array) $this->inputFilter->getValues();
45+
$data = $result->value();
5046

5147
return $this->createResponse(
5248
$request,

‎src/Admin/src/Handler/Admin/PostAdminResourceHandler.php‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use Api\App\Exception\ConflictException;
1111
use Api\App\Exception\NotFoundException;
1212
use Api\App\Handler\AbstractHandler;
13-
use Core\App\Message;
1413
use Dot\DependencyInjection\Attribute\Inject;
1514
use Psr\Http\Message\ResponseInterface;
1615
use Psr\Http\Message\ServerRequestInterface;
@@ -34,16 +33,13 @@ public function __construct(
3433
*/
3534
public function handle(ServerRequestInterface $request): ResponseInterface
3635
{
37-
$this->inputFilter->setData((array) $request->getParsedBody());
38-
if (! $this->inputFilter->isValid()) {
39-
throw BadRequestException::create(
40-
detail: Message::VALIDATOR_INVALID_DATA,
41-
additional: ['errors' => $this->inputFilter->getMessages()]
42-
);
36+
$result = $this->inputFilter->validate((array) $request->getParsedBody());
37+
if (! $result->valid()) {
38+
throw BadRequestException::fromValidationResult($result);
4339
}
4440

4541
/** @var non-empty-array<non-empty-string, mixed> $data */
46-
$data = (array) $this->inputFilter->getValues();
42+
$data = $result->value();
4743

4844
return $this->createdResponse($request, $this->adminService->saveAdmin($data));
4945
}

‎src/Admin/src/InputFilter/AdminRoleInputFilter.php‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Api\App\InputFilter\Input\UuidInput;
88
use Core\App\InputFilter\AbstractInputFilter;
9+
use Laminas\InputFilter\Factory;
910

1011
/**
1112
* @phpstan-type AdminRoleDataType array{
@@ -15,8 +16,10 @@
1516
*/
1617
class AdminRoleInputFilter extends AbstractInputFilter
1718
{
18-
public function __construct()
19+
public function __construct(Factory $factory)
1920
{
20-
$this->add(new UuidInput('id'));
21+
parent::__construct($factory);
22+
23+
$this->add(UuidInput::spec('id'));
2124
}
2225
}

‎src/Admin/src/InputFilter/CreateAdminInputFilter.php‎

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Api\App\InputFilter\Input\PasswordInput;
1313
use Core\App\InputFilter\AbstractInputFilter;
1414
use Laminas\InputFilter\CollectionInputFilter;
15+
use Laminas\InputFilter\Factory;
1516

1617
/**
1718
* @phpstan-import-type AdminRoleDataType from AdminRoleInputFilter
@@ -28,19 +29,23 @@
2829
*/
2930
class CreateAdminInputFilter extends AbstractInputFilter
3031
{
31-
public function __construct()
32+
public function __construct(Factory $factory)
3233
{
33-
$roles = (new CollectionInputFilter())
34-
->setInputFilter(new AdminRoleInputFilter())
35-
->setIsRequired(true);
34+
parent::__construct($factory);
35+
36+
$roles = [
37+
'type' => CollectionInputFilter::class,
38+
'input_filter' => new AdminRoleInputFilter($factory),
39+
'required' => true,
40+
];
3641

3742
$this
38-
->add(new IdentityInput('identity'))
39-
->add(new PasswordInput('password'))
40-
->add(new PasswordConfirmInput('passwordConfirm'))
41-
->add(new FirstNameInput('firstName', false))
42-
->add(new LastNameInput('lastName', false))
43-
->add(new StatusInput('status'))
43+
->add(IdentityInput::spec('identity'))
44+
->add(PasswordInput::spec('password'))
45+
->add(PasswordConfirmInput::spec('passwordConfirm'))
46+
->add(FirstNameInput::spec('firstName', false))
47+
->add(LastNameInput::spec('lastName', false))
48+
->add(StatusInput::spec('status'))
4449
->add($roles, 'roles');
4550
}
4651
}

0 commit comments

Comments
 (0)