diff --git a/src/GlobalState.php b/src/GlobalState.php index 9303149..86d26b3 100644 --- a/src/GlobalState.php +++ b/src/GlobalState.php @@ -35,6 +35,13 @@ public static function enrichServerVars(Request $request): array $server['REQUEST_METHOD'] = $request->method; $server['HTTP_USER_AGENT'] = ''; + $parts = \parse_url($request->uri); + + if (isset($parts['host'])) { + $server['HTTP_HOST'] = isset($parts['port']) + ? $parts['host'] . ':' . $parts['port'] + : $parts['host']; + } foreach ($request->headers as $key => $value) { $key = \strtoupper(\str_replace('-', '_', $key)); diff --git a/tests/Unit/GlobalStateTest.php b/tests/Unit/GlobalStateTest.php new file mode 100644 index 0000000..5ca36d5 --- /dev/null +++ b/tests/Unit/GlobalStateTest.php @@ -0,0 +1,71 @@ +}> + */ + public static function enrichServerVarsDataProvider(): iterable + { + yield [ + new Request(), + [ + 'REQUEST_URI' => 'http://localhost', + 'REMOTE_ADDR' => '127.0.0.1', + 'REQUEST_METHOD' => 'GET', + 'HTTP_USER_AGENT' => '', + 'HTTP_HOST' => 'localhost', + ], + ]; + + yield [ + new Request(uri: 'https://roadrunner.dev'), + [ + 'REQUEST_URI' => 'https://roadrunner.dev', + 'REMOTE_ADDR' => '127.0.0.1', + 'REQUEST_METHOD' => 'GET', + 'HTTP_USER_AGENT' => '', + 'HTTP_HOST' => 'roadrunner.dev', + ], + ]; + + yield [ + new Request(uri: 'https://roadrunner.dev:8080'), + [ + 'REQUEST_URI' => 'https://roadrunner.dev:8080', + 'REMOTE_ADDR' => '127.0.0.1', + 'REQUEST_METHOD' => 'GET', + 'HTTP_USER_AGENT' => '', + 'HTTP_HOST' => 'roadrunner.dev:8080', + ], + ]; + } + + /** + * @param array $expected + */ + #[DataProvider('enrichServerVarsDataProvider')] + public function testEnrichServerVars(Request $request, array $expected): void + { + $_SERVER = []; + + $server = GlobalState::enrichServerVars($request); + + $this->assertArrayHasKey('REQUEST_TIME', $server); + $this->assertArrayHasKey('REQUEST_TIME_FLOAT', $server); + + unset($server['REQUEST_TIME']); + unset($server['REQUEST_TIME_FLOAT']); + + $this->assertEquals($server, $expected); + } +} diff --git a/tests/Unit/PSR7WorkerTest.php b/tests/Unit/PSR7WorkerTest.php index 70d002e..52f8f7d 100644 --- a/tests/Unit/PSR7WorkerTest.php +++ b/tests/Unit/PSR7WorkerTest.php @@ -44,6 +44,7 @@ public function testStateServerLeak(): void 'HTTP_USER_AGENT' => '', 'CONTENT_TYPE' => 'application/html', 'HTTP_CONNECTION' => 'keep-alive', + 'HTTP_HOST' => 'localhost', ], ], [ @@ -56,6 +57,7 @@ public function testStateServerLeak(): void 'REQUEST_METHOD' => 'GET', 'HTTP_USER_AGENT' => '', 'CONTENT_TYPE' => 'application/json', + 'HTTP_HOST' => 'localhost', ], ], ];