2
2
3
3
namespace PhpMiddleware \RequestId ;
4
4
5
- use PhpMiddleware \RequestId \Exception \InvalidRequestId ;
6
- use PhpMiddleware \RequestId \Exception \MissingRequestId ;
7
5
use 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 ;
11
7
use Psr \Http \Message \ResponseInterface ;
12
8
use Psr \Http \Message \ServerRequestInterface ;
13
9
14
- class RequestIdMiddleware implements RequestIdProviderInterface
10
+ final class RequestIdMiddleware implements RequestIdProviderInterface
15
11
{
16
- const DEFAULT_HEADER_REQUEST_ID = 'X-Request-Id ' ;
12
+ const DEFAULT_RESPONSE_HEADER = 'X-Request-Id ' ;
17
13
const ATTRIBUTE_NAME = 'request-id ' ;
18
14
19
15
/**
20
- * @var GeneratorInterface
16
+ * @var RequestIdProviderFactory
21
17
*/
22
- protected $ generator ;
23
-
24
- /**
25
- * @var bool|OverridePolicyInterface
26
- */
27
- protected $ allowOverride ;
18
+ protected $ requestIdProviderFactory ;
28
19
29
20
/**
30
21
* @var mixed
@@ -37,27 +28,15 @@ class RequestIdMiddleware implements RequestIdProviderInterface
37
28
protected $ responseHeader ;
38
29
39
30
/**
40
- *
41
- * @var string
42
- */
43
- protected $ requestHeader ;
44
-
45
- /**
46
- * @param GeneratorInterface $generator
47
- * @param bool|OverridePolicyInterface $allowOverride
31
+ * @param RequestIdProviderFactory $requestIdProviderFactory
48
32
* @param string $responseHeader
49
- * @param string $requestHeader
50
33
*/
51
34
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
56
37
) {
57
- $ this ->generator = $ generator ;
58
- $ this ->allowOverride = $ allowOverride ;
38
+ $ this ->requestIdProviderFactory = $ requestIdProviderFactory ;
59
39
$ this ->responseHeader = $ responseHeader ;
60
- $ this ->requestHeader = $ requestHeader ;
61
40
}
62
41
63
42
/**
@@ -69,7 +48,10 @@ public function __construct(
69
48
*/
70
49
public function __invoke (ServerRequestInterface $ request , ResponseInterface $ response , callable $ next )
71
50
{
72
- $ this ->requestId = $ this ->getRequestIdFromRequest ($ request );
51
+ $ requestIdProvider = $ this ->requestIdProviderFactory ->create ($ request );
52
+
53
+ $ this ->requestId = $ requestIdProvider ->getRequestId ();
54
+
73
55
$ requestWithAttribute = $ request ->withAttribute (self ::ATTRIBUTE_NAME , $ this ->requestId );
74
56
75
57
$ nextResponse = $ next ($ requestWithAttribute , $ response );
@@ -92,49 +74,4 @@ public function getRequestId()
92
74
}
93
75
return $ this ->requestId ;
94
76
}
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
- }
140
77
}
0 commit comments