diff --git a/composer.json b/composer.json index 52681a0e..7b8bf39e 100644 --- a/composer.json +++ b/composer.json @@ -45,8 +45,10 @@ "nikolaposa/monolog-factory": "^3.0", "ocramius/proxy-manager": "^2.7.0", "phly/phly-event-dispatcher": "^1.0", + "php-middleware/request-id": "^4.0", "predis/predis": "^1.1", "pugx/shortid-php": "^0.5", + "ramsey/uuid": "^3.9", "shlinkio/shlink-common": "^2.7.0", "shlinkio/shlink-event-dispatcher": "^1.3", "shlinkio/shlink-installer": "^4.2.0", diff --git a/config/autoload/middleware-pipeline.global.php b/config/autoload/middleware-pipeline.global.php index 2ace0700..45abf30e 100644 --- a/config/autoload/middleware-pipeline.global.php +++ b/config/autoload/middleware-pipeline.global.php @@ -7,6 +7,7 @@ namespace Shlinkio\Shlink; use Laminas\Stratigility\Middleware\ErrorHandler; use Mezzio; use Mezzio\ProblemDetails; +use PhpMiddleware\RequestId\RequestIdMiddleware; return [ @@ -21,6 +22,7 @@ return [ 'path' => '/rest', 'middleware' => [ Rest\Middleware\CrossDomainMiddleware::class, + RequestIdMiddleware::class, ProblemDetails\ProblemDetailsMiddleware::class, ], ], diff --git a/config/autoload/request_id.global.php b/config/autoload/request_id.global.php new file mode 100644 index 00000000..87d1c72f --- /dev/null +++ b/config/autoload/request_id.global.php @@ -0,0 +1,33 @@ + [ + 'allow_override' => true, + 'header_name' => 'X-Request-Id', + ], + + 'dependencies' => [ + 'factories' => [ + RequestId\Generator\RamseyUuid4StaticGenerator::class => InvokableFactory::class, + RequestId\RequestIdProviderFactory::class => ConfigAbstractFactory::class, + RequestId\RequestIdMiddleware::class => ConfigAbstractFactory::class, + ], + ], + + ConfigAbstractFactory::class => [ + RequestId\RequestIdProviderFactory::class => [ + RequestId\Generator\RamseyUuid4StaticGenerator::class, + 'config.request_id.allow_override', + 'config.request_id.header_name', + ], + RequestId\RequestIdMiddleware::class => [RequestId\RequestIdProviderFactory::class], + ], + +]; diff --git a/module/Core/src/Options/AppOptions.php b/module/Core/src/Options/AppOptions.php index aa51b871..66d76126 100644 --- a/module/Core/src/Options/AppOptions.php +++ b/module/Core/src/Options/AppOptions.php @@ -5,14 +5,11 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Options; use Laminas\Stdlib\AbstractOptions; -use Shlinkio\Shlink\Common\Util\StringUtilsTrait; use function sprintf; class AppOptions extends AbstractOptions { - use StringUtilsTrait; - private string $name = ''; private string $version = '1.0'; private ?string $disableTrackParam = null; diff --git a/module/Rest/src/Entity/ApiKey.php b/module/Rest/src/Entity/ApiKey.php index 8c6d3aeb..f23d22e1 100644 --- a/module/Rest/src/Entity/ApiKey.php +++ b/module/Rest/src/Entity/ApiKey.php @@ -5,20 +5,18 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Rest\Entity; use Cake\Chronos\Chronos; +use Ramsey\Uuid\Uuid; use Shlinkio\Shlink\Common\Entity\AbstractEntity; -use Shlinkio\Shlink\Common\Util\StringUtilsTrait; class ApiKey extends AbstractEntity { - use StringUtilsTrait; - private string $key; private ?Chronos $expirationDate; private bool $enabled; public function __construct(?Chronos $expirationDate = null) { - $this->key = $this->generateV4Uuid(); + $this->key = Uuid::uuid4()->toString(); $this->expirationDate = $expirationDate; $this->enabled = true; } @@ -30,11 +28,7 @@ class ApiKey extends AbstractEntity public function isExpired(): bool { - if ($this->expirationDate === null) { - return false; - } - - return $this->expirationDate->lt(Chronos::now()); + return $this->expirationDate !== null && $this->expirationDate->lt(Chronos::now()); } public function isEnabled(): bool