Merge pull request #12165 from appwrite/fix/CLO-4280-getheader-string-coerce

fix: coerce non-string header values in Request::getHeader
This commit is contained in:
Damodar Lohani
2026-04-28 10:43:40 +05:45
committed by GitHub
2 changed files with 36 additions and 1 deletions
+5 -1
View File
@@ -209,7 +209,11 @@ class Request extends UtopiaRequest
public function getHeader(string $key, string $default = ''): string
{
$headers = $this->getHeaders();
return $headers[$key] ?? $default;
$value = $headers[$key] ?? $default;
if (\is_array($value)) {
$value = $value[0] ?? $default;
}
return \is_string($value) ? $value : $default;
}
/**
+31
View File
@@ -161,6 +161,37 @@ class RequestTest extends TestCase
$this->assertSame($secondRoute, $secondRequest->getRoute());
}
public function testGetHeaderReturnsStringValue(): void
{
$this->request->addHeader('referer', 'https://example.com');
$this->assertSame('https://example.com', $this->request->getHeader('referer'));
}
public function testGetHeaderReturnsDefaultWhenMissing(): void
{
$this->assertSame('', $this->request->getHeader('referer'));
$this->assertSame('fallback', $this->request->getHeader('referer', 'fallback'));
}
public function testGetHeaderCoercesArrayToFirstElement(): void
{
$swoole = new SwooleRequest();
$swoole->header = ['referer' => ['https://a.example', 'https://b.example']];
$request = new Request($swoole);
$this->assertSame('https://a.example', $request->getHeader('referer'));
}
public function testGetHeaderReturnsDefaultWhenValueNotString(): void
{
$swoole = new SwooleRequest();
$swoole->header = ['referer' => 123];
$request = new Request($swoole);
$this->assertSame('fallback', $request->getHeader('referer', 'fallback'));
}
/**
* Helper to attach a route with multiple SDK methods to the request.
*/