diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeIdentEntity.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeIdentEntity.php index bb7a6b7ff4..9d263141f7 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeIdentEntity.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeIdentEntity.php @@ -28,7 +28,8 @@ class CompositeIdentEntity implements UserInterface /** @Column(type="string") */ public $name; - public function __construct($id1, $id2, $name) { + public function __construct($id1, $id2, $name) + { $this->id1 = $id1; $this->id2 = $id2; $this->name = $name; diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeStringIdentEntity.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeStringIdentEntity.php index a9491eefd2..43c71f6e80 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeStringIdentEntity.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/CompositeStringIdentEntity.php @@ -27,7 +27,8 @@ class CompositeStringIdentEntity /** @Column(type="string") */ public $name; - public function __construct($id1, $id2, $name) { + public function __construct($id1, $id2, $name) + { $this->id1 = $id1; $this->id2 = $id2; $this->name = $name; diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/NoToStringSingleIdentEntity.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/NoToStringSingleIdentEntity.php index e62cb558e1..a5ecb3da27 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/NoToStringSingleIdentEntity.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/NoToStringSingleIdentEntity.php @@ -24,7 +24,8 @@ class NoToStringSingleIdentEntity /** @Column(type="string", nullable=true) */ public $name; - public function __construct($id, $name) { + public function __construct($id, $name) + { $this->id = $id; $this->name = $name; } diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/SingleStringIdentEntity.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/SingleStringIdentEntity.php index 88276e4223..50f53b790e 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/SingleStringIdentEntity.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/SingleStringIdentEntity.php @@ -24,7 +24,8 @@ class SingleStringIdentEntity /** @Column(type="string") */ public $name; - public function __construct($id, $name) { + public function __construct($id, $name) + { $this->id = $id; $this->name = $name; } diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/Fixtures/StubFilesystemLoader.php b/src/Symfony/Bridge/Twig/Tests/Extension/Fixtures/StubFilesystemLoader.php index 7d94bffbb0..36c61cd6cc 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/Fixtures/StubFilesystemLoader.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/Fixtures/StubFilesystemLoader.php @@ -13,7 +13,8 @@ namespace Symfony\Bridge\Twig\Tests\Extension\Fixtures; // Preventing autoloader throwing E_FATAL when Twig is now available if (!class_exists('Twig_Environment')) { - class StubFilesystemLoader { + class StubFilesystemLoader + { } } else { class StubFilesystemLoader extends \Twig_Loader_Filesystem diff --git a/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php b/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php index 5b1dd47c3d..c626ec62ad 100644 --- a/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php +++ b/src/Symfony/Component/Config/Tests/Resource/DirectoryResourceTest.php @@ -34,7 +34,8 @@ class DirectoryResourceTest extends \PHPUnit_Framework_TestCase $this->removeDirectory($this->directory); } - protected function removeDirectory($directory) { + protected function removeDirectory($directory) + { $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory), \RecursiveIteratorIterator::CHILD_FIRST); foreach ($iterator as $path) { if (preg_match('#/\.\.?$#', $path->__toString())) { diff --git a/src/Symfony/Component/HttpFoundation/ServerBag.php b/src/Symfony/Component/HttpFoundation/ServerBag.php index 6a077f4b8d..9afb6012bd 100644 --- a/src/Symfony/Component/HttpFoundation/ServerBag.php +++ b/src/Symfony/Component/HttpFoundation/ServerBag.php @@ -16,6 +16,7 @@ namespace Symfony\Component\HttpFoundation; * * @author Fabien Potencier * @author Bulat Shakirzyanov + * @author Robert Kiss */ class ServerBag extends ParameterBag { @@ -37,10 +38,41 @@ class ServerBag extends ParameterBag } } - // PHP_AUTH_USER/PHP_AUTH_PW if (isset($this->parameters['PHP_AUTH_USER'])) { - $pass = isset($this->parameters['PHP_AUTH_PW']) ? $this->parameters['PHP_AUTH_PW'] : ''; - $headers['AUTHORIZATION'] = 'Basic '.base64_encode($this->parameters['PHP_AUTH_USER'].':'.$pass); + $headers['PHP_AUTH_USER'] = $this->parameters['PHP_AUTH_USER']; + $headers['PHP_AUTH_PW'] = isset($this->parameters['PHP_AUTH_PW']) ? $this->parameters['PHP_AUTH_PW'] : ''; + } else { + /* + * php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default + * For this workaround to work, add this line to your .htaccess file: + * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + * + * A sample .htaccess file: + * RewriteEngine On + * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + * RewriteCond %{REQUEST_FILENAME} !-f + * RewriteRule ^(.*)$ app.php [QSA,L] + */ + + $authorizationHeader = null; + if (isset($this->parameters['HTTP_AUTHORIZATION'])) { + $authorizationHeader = $this->parameters['HTTP_AUTHORIZATION']; + } elseif (isset($this->parameters['REDIRECT_HTTP_AUTHORIZATION'])) { + $authorizationHeader = $this->parameters['REDIRECT_HTTP_AUTHORIZATION']; + } + + // Decode AUTHORIZATION header into PHP_AUTH_USER and PHP_AUTH_PW + if (null !== $authorizationHeader) { + $exploded = explode(':', base64_decode(substr($authorizationHeader, 6))); + if (count($exploded) == 2) { + list($headers['PHP_AUTH_USER'], $headers['PHP_AUTH_PW']) = $exploded; + } + } + } + + // PHP_AUTH_USER/PHP_AUTH_PW + if (isset($headers['PHP_AUTH_USER'])) { + $headers['AUTHORIZATION'] = 'Basic '.base64_encode($headers['PHP_AUTH_USER'].':'.$headers['PHP_AUTH_PW']); } return $headers; diff --git a/src/Symfony/Component/HttpFoundation/Tests/ServerBagTest.php b/src/Symfony/Component/HttpFoundation/Tests/ServerBagTest.php index b99ad1ce8d..9c0afb6565 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/ServerBagTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/ServerBagTest.php @@ -40,6 +40,8 @@ class ServerBagTest extends \PHPUnit_Framework_TestCase 'CONTENT_LENGTH' => '0', 'ETAG' => 'asdf', 'AUTHORIZATION' => 'Basic '.base64_encode('foo:bar'), + 'PHP_AUTH_USER' => 'foo', + 'PHP_AUTH_PW' => 'bar', ), $bag->getHeaders()); } @@ -47,6 +49,43 @@ class ServerBagTest extends \PHPUnit_Framework_TestCase { $bag = new ServerBag(array('PHP_AUTH_USER' => 'foo')); - $this->assertEquals(array('AUTHORIZATION' => 'Basic '.base64_encode('foo:')), $bag->getHeaders()); + $this->assertEquals(array( + 'AUTHORIZATION' => 'Basic '.base64_encode('foo:'), + 'PHP_AUTH_USER' => 'foo', + 'PHP_AUTH_PW' => '' + ), $bag->getHeaders()); + } + + public function testHttpBasicAuthWithPhpCgi() + { + $bag = new ServerBag(array('HTTP_AUTHORIZATION' => 'Basic '.base64_encode('foo:bar'))); + + $this->assertEquals(array( + 'AUTHORIZATION' => 'Basic '.base64_encode('foo:bar'), + 'PHP_AUTH_USER' => 'foo', + 'PHP_AUTH_PW' => 'bar' + ), $bag->getHeaders()); + } + + public function testHttpBasicAuthWithPhpCgiRedirect() + { + $bag = new ServerBag(array('REDIRECT_HTTP_AUTHORIZATION' => 'Basic '.base64_encode('foo:bar'))); + + $this->assertEquals(array( + 'AUTHORIZATION' => 'Basic '.base64_encode('foo:bar'), + 'PHP_AUTH_USER' => 'foo', + 'PHP_AUTH_PW' => 'bar' + ), $bag->getHeaders()); + } + + public function testHttpBasicAuthWithPhpCgiEmptyPassword() + { + $bag = new ServerBag(array('HTTP_AUTHORIZATION' => 'Basic '.base64_encode('foo:'))); + + $this->assertEquals(array( + 'AUTHORIZATION' => 'Basic '.base64_encode('foo:'), + 'PHP_AUTH_USER' => 'foo', + 'PHP_AUTH_PW' => '' + ), $bag->getHeaders()); } } diff --git a/src/Symfony/Component/Locale/Resources/data/update-data.php b/src/Symfony/Component/Locale/Resources/data/update-data.php index aa79d421ec..69f511aec0 100644 --- a/src/Symfony/Component/Locale/Resources/data/update-data.php +++ b/src/Symfony/Component/Locale/Resources/data/update-data.php @@ -125,7 +125,8 @@ function get_data($index, $dataDir, $locale = 'en', $constraint = null) return $data; } -function create_stub_datafile($locale, $target, $data) { +function create_stub_datafile($locale, $target, $data) +{ $template = <<