From e72179e6b449861d81d2ac138bf895af790556ad Mon Sep 17 00:00:00 2001 From: freezy Date: Mon, 19 May 2014 17:10:34 +0200 Subject: [PATCH] Added normalize headers to 2.1 needed by lucadegasperi/oauth2-server-laravel --- src/League/OAuth2/Server/Util/Request.php | 41 +++++++++++++++++++++-- tests/util/RequestTest.php | 14 ++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/League/OAuth2/Server/Util/Request.php b/src/League/OAuth2/Server/Util/Request.php index 9f66a9209..aacc9feae 100644 --- a/src/League/OAuth2/Server/Util/Request.php +++ b/src/League/OAuth2/Server/Util/Request.php @@ -39,6 +39,8 @@ public function __construct(array $get = array(), array $post = array(), array $ if (empty($headers)) { $this->headers = $this->readHeaders(); + } else { + $this->headers = $this->normalizeHeaders($headers); } } @@ -88,8 +90,8 @@ protected function readHeaders() } } - return $headers; - } + return $this->normalizeHeaders($headers); + } protected function getPropertyValue($property, $index = null, $default = null) { @@ -106,4 +108,39 @@ protected function getPropertyValue($property, $index = null, $default = null) return $this->{$property}[$index]; } + + /** + * Takes all of the headers and normalizes them in a canonical form. + * + * @param array $headers The request headers. + * @return array An arry of headers with the header name normalized + */ + protected function normalizeHeaders(array $headers) + { + $normalized = array(); + foreach ($headers as $key => $value) { + $normalized[ucfirst($this->normalizeKey($key))] = $value; + } + + return $normalized; + } + + /** + * Transform header name into canonical form + * + * Taken from the Slim codebase... + * + * @param string $key + * @return string + */ + protected function normalizeKey($key) + { + $key = strtolower($key); + $key = str_replace(array('-', '_'), ' ', $key); + $key = preg_replace('#^http #', '', $key); + $key = ucwords($key); + $key = str_replace(' ', '-', $key); + + return $key; + } } \ No newline at end of file diff --git a/tests/util/RequestTest.php b/tests/util/RequestTest.php index 1b4f144b8..eef8ccfd4 100644 --- a/tests/util/RequestTest.php +++ b/tests/util/RequestTest.php @@ -59,6 +59,20 @@ function test_header() $this->assertEquals(array('Host' => 'foobar.com'), $this->request->header()); } + function test_canonical_header() + { + $request = new League\OAuth2\Server\Util\Request( + array('foo' => 'bar'), + array('foo' => 'bar'), + array('foo' => 'bar'), + array('foo' => 'bar'), + array('HTTP_HOST' => 'foobar.com'), + array('authorization' => 'Bearer ajdfkljadslfjasdlkj') + ); + + $this->assertEquals('Bearer ajdfkljadslfjasdlkj', $request->header('Authorization')); + } + /** * @expectedException InvalidArgumentException */