22
33namespace PhpMiddleware \RequestId ;
44
5- use PhpMiddleware \RequestId \Exception \InvalidRequestId ;
6- use PhpMiddleware \RequestId \Exception \MissingRequestId ;
75use PhpMiddleware \RequestId \Exception \NotGenerated ;
8- use PhpMiddleware \RequestId \Generator \GeneratorInterface ;
9- use PhpMiddleware \RequestId \OverridePolicy \OverridePolicyInterface ;
10- use PhpMiddleware \RequestId \RequestIdProviderInterface ;
6+ use PhpMiddleware \RequestId \RequestIdProviderFactoryInterface as RequestIdProviderFactory ;
117use Psr \Http \Message \ResponseInterface ;
128use Psr \Http \Message \ServerRequestInterface ;
139
14- class RequestIdMiddleware implements RequestIdProviderInterface
10+ final class RequestIdMiddleware implements RequestIdProviderInterface
1511{
16- const DEFAULT_HEADER_REQUEST_ID = 'X-Request-Id ' ;
12+ const DEFAULT_RESPONSE_HEADER = 'X-Request-Id ' ;
1713 const ATTRIBUTE_NAME = 'request-id ' ;
1814
1915 /**
20- * @var GeneratorInterface
16+ * @var RequestIdProviderFactory
2117 */
22- protected $ generator ;
23-
24- /**
25- * @var bool|OverridePolicyInterface
26- */
27- protected $ allowOverride ;
18+ protected $ requestIdProviderFactory ;
2819
2920 /**
3021 * @var mixed
@@ -37,27 +28,15 @@ class RequestIdMiddleware implements RequestIdProviderInterface
3728 protected $ responseHeader ;
3829
3930 /**
40- *
41- * @var string
42- */
43- protected $ requestHeader ;
44-
45- /**
46- * @param GeneratorInterface $generator
47- * @param bool|OverridePolicyInterface $allowOverride
31+ * @param RequestIdProviderFactory $requestIdProviderFactory
4832 * @param string $responseHeader
49- * @param string $requestHeader
5033 */
5134 public function __construct (
52- GeneratorInterface $ generator ,
53- $ allowOverride = true ,
54- $ responseHeader = self ::DEFAULT_HEADER_REQUEST_ID ,
55- $ requestHeader = self ::DEFAULT_HEADER_REQUEST_ID
35+ RequestIdProviderFactory $ requestIdProviderFactory ,
36+ $ responseHeader = self ::DEFAULT_RESPONSE_HEADER
5637 ) {
57- $ this ->generator = $ generator ;
58- $ this ->allowOverride = $ allowOverride ;
38+ $ this ->requestIdProviderFactory = $ requestIdProviderFactory ;
5939 $ this ->responseHeader = $ responseHeader ;
60- $ this ->requestHeader = $ requestHeader ;
6140 }
6241
6342 /**
@@ -69,7 +48,10 @@ public function __construct(
6948 */
7049 public function __invoke (ServerRequestInterface $ request , ResponseInterface $ response , callable $ next )
7150 {
72- $ this ->requestId = $ this ->getRequestIdFromRequest ($ request );
51+ $ requestIdProvider = $ this ->requestIdProviderFactory ->create ($ request );
52+
53+ $ this ->requestId = $ requestIdProvider ->getRequestId ();
54+
7355 $ requestWithAttribute = $ request ->withAttribute (self ::ATTRIBUTE_NAME , $ this ->requestId );
7456
7557 $ nextResponse = $ next ($ requestWithAttribute , $ response );
@@ -92,49 +74,4 @@ public function getRequestId()
9274 }
9375 return $ this ->requestId ;
9476 }
95-
96- /**
97- * @param ServerRequestInterface $request
98- *
99- * @return mixed
100- *
101- * @throws MissingRequestId
102- * @throws NotGenerated
103- */
104- protected function getRequestIdFromRequest (ServerRequestInterface $ request )
105- {
106- if ($ this ->isPossibleToGetFromRequest ($ request )) {
107- $ requestId = $ request ->getHeaderLine ($ this ->requestHeader );
108-
109- if (empty ($ requestId )) {
110- throw new MissingRequestId (sprintf ('Missing request id in "%s" request header ' , $ this ->requestHeader ));
111- }
112- } else {
113- $ requestId = $ this ->generator ->generateRequestId ();
114-
115- if (empty ($ requestId )) {
116- throw new InvalidRequestId ('Generator return empty value ' );
117- }
118- if (!is_string ($ requestId )) {
119- throw new InvalidRequestId ('Request id is not a string ' );
120- }
121- }
122- return $ requestId ;
123- }
124-
125- /**
126- * @param ServerRequestInterface $request
127- *
128- * @return bool
129- */
130- protected function isPossibleToGetFromRequest (ServerRequestInterface $ request )
131- {
132- if ($ this ->allowOverride instanceof OverridePolicyInterface) {
133- $ allowOverride = $ this ->allowOverride ->isAllowToOverride ($ request );
134- } else {
135- $ allowOverride = $ this ->allowOverride ;
136- }
137-
138- return $ allowOverride === true && $ request ->hasHeader ($ this ->requestHeader );
139- }
14077}
0 commit comments