From aecfd0a8917370edd237120352749141ffa85362 Mon Sep 17 00:00:00 2001 From: stealth35 Date: Mon, 12 Sep 2011 13:01:04 +0200 Subject: [PATCH] [HttpFoundation] Support user and password in url --- .../Component/HttpFoundation/Request.php | 43 ++++++++++++++++++- .../Component/HttpFoundation/RequestTest.php | 19 ++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 83b878b6fe..47252742a3 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -213,6 +213,14 @@ class Request $defaults['HTTP_HOST'] = $defaults['HTTP_HOST'].':'.$components['port']; } + if (isset($components['user'])) { + $defaults['PHP_AUTH_USER'] = $components['user']; + } + + if (isset($components['pass'])) { + $defaults['PHP_AUTH_PW'] = $components['pass']; + } + if (!isset($components['path'])) { $components['path'] = ''; } @@ -571,6 +579,26 @@ class Request return $this->headers->get('X-Forwarded-Port') ?: $this->server->get('SERVER_PORT'); } + /** + * Returns the user. + * + * @return string|null + */ + public function getUser() + { + return $this->server->get('PHP_AUTH_USER'); + } + + /** + * Returns the password. + * + * @return string|null + */ + public function getPassword() + { + return $this->server->get('PHP_AUTH_PW'); + } + /** * Returns the HTTP host being requested. * @@ -624,7 +652,20 @@ class Request $qs = '?'.$qs; } - return $this->getScheme().'://'.$this->getHttpHost().$this->getBaseUrl().$this->getPathInfo().$qs; + $auth = ''; + if ($user = $this->getUser()) { + $auth = $user; + } + + if ($pass = $this->getPassword()) { + $auth .= ":$pass"; + } + + if ('' !== $auth) { + $auth .= '@'; + } + + return $this->getScheme().'://'.$auth.$this->getHttpHost().$this->getBaseUrl().$this->getPathInfo().$qs; } /** diff --git a/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php b/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php index d53b8c33d1..5638ab2ec8 100644 --- a/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php +++ b/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php @@ -128,6 +128,25 @@ class RequestTest extends \PHPUnit_Framework_TestCase $this->assertEquals('test.com:90', $request->getHttpHost()); $this->assertFalse($request->isSecure()); + $request = Request::create('http://test:test@test.com'); + $this->assertEquals('http://test:test@test.com/', $request->getUri()); + $this->assertEquals('/', $request->getPathInfo()); + $this->assertEquals('', $request->getQueryString()); + $this->assertEquals(80, $request->getPort()); + $this->assertEquals('test.com', $request->getHttpHost()); + $this->assertEquals('test', $request->getUser()); + $this->assertEquals('test', $request->getPassword()); + $this->assertFalse($request->isSecure()); + + $request = Request::create('http://testnopass@test.com'); + $this->assertEquals('http://testnopass@test.com/', $request->getUri()); + $this->assertEquals('/', $request->getPathInfo()); + $this->assertEquals('', $request->getQueryString()); + $this->assertEquals(80, $request->getPort()); + $this->assertEquals('test.com', $request->getHttpHost()); + $this->assertEquals('testnopass', $request->getUser()); + $this->assertNull($request->getPassword()); + $this->assertFalse($request->isSecure()); } /**