From 8a741bb8cadc167e55e9a8527125714e83a17217 Mon Sep 17 00:00:00 2001 From: chadicus Date: Wed, 16 Sep 2015 16:27:43 -0400 Subject: [PATCH] Refactor @dschreck header issue changes --- src/MessageBridge.php | 45 ++++++++++++++++++++++++++----------- tests/MessageBridgeTest.php | 4 ++-- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/MessageBridge.php b/src/MessageBridge.php index afa5469..2e7b758 100644 --- a/src/MessageBridge.php +++ b/src/MessageBridge.php @@ -20,18 +20,6 @@ public static function newOauth2Request(\Slim\Http\Request $request) } } - $headers = $request->headers()->getIterator()->getArrayCopy(); - // Fixing bad headers from Slim - $badHeaders = ['Php-Auth-User','Php-Auth-Pw','Php-Auth-Digest','Auth-Type']; - $goodHeaders = ['PHP_AUTH_USER','PHP_AUTH_PW','PHP_AUTH_DIGEST','AUTH_TYPE']; - - foreach ($badHeaders as $key => $badHeaderName) { - if (array_key_exists($badHeaderName,$headers)) { - $headers[$goodHeaders[$key]] = $headers[$badHeaderName]; - unset($headers[$badHeaderName]); - } - } - return new \OAuth2\Request( $request->get(), $post, @@ -40,7 +28,7 @@ public static function newOauth2Request(\Slim\Http\Request $request) [], \Slim\Environment::getInstance()->getIterator()->getArrayCopy(), $request->getBody(), - $headers + self::cleanupHeaders($request->headers()) ); } @@ -61,4 +49,35 @@ public static function mapResponse(\OAuth2\ResponseInterface $oauth2Response, \S $slimResponse->status($oauth2Response->getStatusCode()); $slimResponse->setBody($oauth2Response->getResponseBody()); } + + /** + * Helper method to clean header keys. + * + * Slim will convert all headers to Camel-Case style. There are certain headers such as PHP_AUTH_USER that the + * OAuth2 library requires CAPS_CASE format. This method will adjust those headers as needed. + * + * @param Slim\Http\Headers $uncleanHeaders The headers to be cleaned. + * + * @return array The cleaned headers + */ + private static function cleanupHeaders(\Slim\Http\Headers $uncleanHeaders) + { + $cleanHeaders = []; + $headerMap = [ + 'Php-Auth-User' => 'PHP_AUTH_USER', + 'Php-Auth-Pw' => 'PHP_AUTH_PW', + 'Php-Auth-Digest' => 'PHP_AUTH_DIGEST', + 'Auth-Type' => 'AUTH_TYPE', + ]; + foreach ($uncleanHeaders as $key => $value) { + if (!array_key_exists($key, $headerMap)) { + $cleanHeaders[$key] = $value; + continue; + } + + $cleanHeaders[$headerMap[$key]] = $value; + } + + return $cleanHeaders; + } } diff --git a/tests/MessageBridgeTest.php b/tests/MessageBridgeTest.php index 0e0867b..42c39fb 100644 --- a/tests/MessageBridgeTest.php +++ b/tests/MessageBridgeTest.php @@ -163,8 +163,8 @@ public function newOAuth2RequestHeaderKeyNames() $this->assertSame('application/x-www-form-urlencoded', $oauth2Request->headers('Content-Type')); $this->assertSame('123', $oauth2Request->request('abc')); $this->assertSame('2', $oauth2Request->query('two')); - $this->assertSame('test_client_id',$oauth2Request->headers('PHP_AUTH_USER')); - $this->assertSame('test_secret',$oauth2Request->headers('PHP_AUTH_PW')); + $this->assertSame('test_client_id', $oauth2Request->headers('PHP_AUTH_USER')); + $this->assertSame('test_secret', $oauth2Request->headers('PHP_AUTH_PW')); $this->assertNull($oauth2Request->headers('Php-Auth-User')); $this->assertNull($oauth2Request->headers('Php-Auth-Pw'));