[HttpFoundation] Support user and password in url

This commit is contained in:
stealth35 2011-09-12 13:01:04 +02:00
parent b99bb1e31b
commit aecfd0a891
2 changed files with 61 additions and 1 deletions

View File

@ -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;
}
/**

View File

@ -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());
}
/**