22
33namespace PhpMiddleware \RequestId ;
44
5- use PhpMiddleware \RequestId \Exception \InvalidRequestId ;
6- use PhpMiddleware \RequestId \Exception \MissingRequestId ;
75use PhpMiddleware \RequestId \Exception \NotGenerated ;
86use PhpMiddleware \RequestId \Generator \GeneratorInterface ;
97use PhpMiddleware \RequestId \OverridePolicy \OverridePolicyInterface ;
10- use PhpMiddleware \RequestId \RequestIdProviderInterface ;
118use Psr \Http \Message \ResponseInterface ;
129use Psr \Http \Message \ServerRequestInterface ;
1310
1411class RequestIdMiddleware implements RequestIdProviderInterface
1512{
16- const DEFAULT_HEADER_REQUEST_ID = 'X-Request-Id ' ;
1713 const ATTRIBUTE_NAME = 'request-id ' ;
1814
1915 /**
20- * @var GeneratorInterface
16+ * @var RequestIdProviderFactoryInterface
2117 */
22- protected $ generator ;
18+ protected $ requestIdProviderFactory ;
2319
24- /**
25- * @var bool|OverridePolicyInterface
26- */
27- protected $ allowOverride ;
2820
2921 /**
3022 * @var mixed
@@ -36,28 +28,16 @@ class RequestIdMiddleware implements RequestIdProviderInterface
3628 */
3729 protected $ responseHeader ;
3830
39- /**
40- *
41- * @var string
42- */
43- protected $ requestHeader ;
4431
4532 /**
4633 * @param GeneratorInterface $generator
4734 * @param bool|OverridePolicyInterface $allowOverride
4835 * @param string $responseHeader
4936 * @param string $requestHeader
5037 */
51- public function __construct (
52- GeneratorInterface $ generator ,
53- $ allowOverride = true ,
54- $ responseHeader = self ::DEFAULT_HEADER_REQUEST_ID ,
55- $ requestHeader = self ::DEFAULT_HEADER_REQUEST_ID
56- ) {
57- $ this ->generator = $ generator ;
58- $ this ->allowOverride = $ allowOverride ;
38+ public function __construct (RequestIdProviderFactoryInterface $ requestIdProviderFactory , $ responseHeader = RequestIdProviderInterface::DEFAULT_HEADER_REQUEST_ID ) {
39+ $ this ->requestIdProviderFactory = $ requestIdProviderFactory ;
5940 $ this ->responseHeader = $ responseHeader ;
60- $ this ->requestHeader = $ requestHeader ;
6141 }
6242
6343 /**
@@ -69,7 +49,11 @@ public function __construct(
6949 */
7050 public function __invoke (ServerRequestInterface $ request , ResponseInterface $ response , callable $ next )
7151 {
72- $ this ->requestId = $ this ->getRequestIdFromRequest ($ request );
52+ /** @var RequestIdProviderInterface $requestIdProvider */
53+ $ requestIdProvider = $ this ->requestIdProviderFactory ->create ($ request );
54+
55+ $ this ->requestId = $ requestIdProvider ->getRequestId ();
56+
7357 $ requestWithAttribute = $ request ->withAttribute (self ::ATTRIBUTE_NAME , $ this ->requestId );
7458
7559 $ nextResponse = $ next ($ requestWithAttribute , $ response );
@@ -92,49 +76,4 @@ public function getRequestId()
9276 }
9377 return $ this ->requestId ;
9478 }
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- }
14079}
0 commit comments