chore: complete update
This commit is contained in:
60
src/Framework/Http/RequestIdGenerator.php
Normal file
60
src/Framework/Http/RequestIdGenerator.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Framework\Http;
|
||||
|
||||
use App\Framework\Attributes\Singleton;
|
||||
|
||||
/**
|
||||
* Service zur Verwaltung der Request-ID für den aktuellen Request.
|
||||
* Nutzt HMAC-Signierung, um die Integrität der IDs zu gewährleisten.
|
||||
*/
|
||||
#[Singleton]
|
||||
final class RequestIdGenerator
|
||||
{
|
||||
private const string REQUEST_ID_HEADER = 'X-Request-ID';
|
||||
|
||||
private ?RequestId $requestId = null;
|
||||
private string $secret;
|
||||
|
||||
/**
|
||||
* Initialisiert den RequestIdGenerator mit einem optionalen Secret
|
||||
*/
|
||||
public function __construct(string $secret = '')
|
||||
{
|
||||
// Secret über eine Umgebungsvariable beziehen, falls nicht angegeben
|
||||
$this->secret = $secret ?: ($_ENV['APP_SECRET'] ?? 'default-secret-change-me');
|
||||
}
|
||||
|
||||
/**
|
||||
* Generiert eine neue Request-ID oder validiert und verwendet eine bestehende
|
||||
*/
|
||||
public function generate(): RequestId
|
||||
{
|
||||
if ($this->requestId === null) {
|
||||
// Prüfen, ob eine Request-ID im Header vorhanden ist
|
||||
$headerRequestId = $_SERVER[str_replace('-', '_', 'HTTP_' . self::REQUEST_ID_HEADER)] ?? null;
|
||||
|
||||
// Neue RequestId erstellen (validiert automatisch die Header-ID, falls vorhanden)
|
||||
$this->requestId = new RequestId($headerRequestId, $this->secret);
|
||||
}
|
||||
|
||||
return $this->requestId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die aktuelle Request-ID zurück oder null, wenn noch keine generiert wurde
|
||||
*/
|
||||
public function getCurrentId(): ?RequestId
|
||||
{
|
||||
return $this->requestId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt den Header-Namen für die Request-ID zurück
|
||||
*/
|
||||
public static function getHeaderName(): string
|
||||
{
|
||||
return self::REQUEST_ID_HEADER;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user