* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpFoundation\Tests; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\ServerBag; /** * ServerBagTest. * * @author Bulat Shakirzyanov */ class ServerBagTest extends TestCase { public function testShouldExtractHeadersFromServerArray() { $server = array( 'SOME_SERVER_VARIABLE' => 'value', 'SOME_SERVER_VARIABLE2' => 'value', 'ROOT' => 'value', 'HTTP_CONTENT_TYPE' => 'text/html', 'HTTP_CONTENT_LENGTH' => '0', 'HTTP_ETAG' => 'asdf', 'PHP_AUTH_USER' => 'foo', 'PHP_AUTH_PW' => 'bar', ); $bag = new ServerBag($server); $this->assertEquals(array( 'CONTENT_TYPE' => 'text/html', 'CONTENT_LENGTH' => '0', 'ETAG' => 'asdf', 'AUTHORIZATION' => 'Basic '.base64_encode('foo:bar'), 'PHP_AUTH_USER' => 'foo', 'PHP_AUTH_PW' => 'bar', ), $bag->getHeaders()); } public function testHttpPasswordIsOptional() { $bag = new ServerBag(array('PHP_AUTH_USER' => 'foo')); $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 testHttpBasicAuthWithPhpCgiBogus() { $bag = new ServerBag(array('HTTP_AUTHORIZATION' => 'Basic_'.base64_encode('foo:bar'))); // Username and passwords should not be set as the header is bogus $headers = $bag->getHeaders(); $this->assertArrayNotHasKey('PHP_AUTH_USER', $headers); $this->assertArrayNotHasKey('PHP_AUTH_PW', $headers); } public function testHttpBasicAuthWithPhpCgiRedirect() { $bag = new ServerBag(array('REDIRECT_HTTP_AUTHORIZATION' => 'Basic '.base64_encode('username:pass:word'))); $this->assertEquals(array( 'AUTHORIZATION' => 'Basic '.base64_encode('username:pass:word'), 'PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pass:word', ), $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()); } public function testHttpDigestAuthWithPhpCgi() { $digest = 'Digest username="foo", realm="acme", nonce="'.md5('secret').'", uri="/protected, qop="auth"'; $bag = new ServerBag(array('HTTP_AUTHORIZATION' => $digest)); $this->assertEquals(array( 'AUTHORIZATION' => $digest, 'PHP_AUTH_DIGEST' => $digest, ), $bag->getHeaders()); } public function testHttpDigestAuthWithPhpCgiBogus() { $digest = 'Digest_username="foo", realm="acme", nonce="'.md5('secret').'", uri="/protected, qop="auth"'; $bag = new ServerBag(array('HTTP_AUTHORIZATION' => $digest)); // Username and passwords should not be set as the header is bogus $headers = $bag->getHeaders(); $this->assertArrayNotHasKey('PHP_AUTH_USER', $headers); $this->assertArrayNotHasKey('PHP_AUTH_PW', $headers); } public function testHttpDigestAuthWithPhpCgiRedirect() { $digest = 'Digest username="foo", realm="acme", nonce="'.md5('secret').'", uri="/protected, qop="auth"'; $bag = new ServerBag(array('REDIRECT_HTTP_AUTHORIZATION' => $digest)); $this->assertEquals(array( 'AUTHORIZATION' => $digest, 'PHP_AUTH_DIGEST' => $digest, ), $bag->getHeaders()); } public function testOAuthBearerAuth() { $headerContent = 'Bearer L-yLEOr9zhmUYRkzN1jwwxwQ-PBNiKDc8dgfB4hTfvo'; $bag = new ServerBag(array('HTTP_AUTHORIZATION' => $headerContent)); $this->assertEquals(array( 'AUTHORIZATION' => $headerContent, ), $bag->getHeaders()); } public function testOAuthBearerAuthWithRedirect() { $headerContent = 'Bearer L-yLEOr9zhmUYRkzN1jwwxwQ-PBNiKDc8dgfB4hTfvo'; $bag = new ServerBag(array('REDIRECT_HTTP_AUTHORIZATION' => $headerContent)); $this->assertEquals(array( 'AUTHORIZATION' => $headerContent, ), $bag->getHeaders()); } /** * @see https://github.com/symfony/symfony/issues/17345 */ public function testItDoesNotOverwriteTheAuthorizationHeaderIfItIsAlreadySet() { $headerContent = 'Bearer L-yLEOr9zhmUYRkzN1jwwxwQ-PBNiKDc8dgfB4hTfvo'; $bag = new ServerBag(array('PHP_AUTH_USER' => 'foo', 'HTTP_AUTHORIZATION' => $headerContent)); $this->assertEquals(array( 'AUTHORIZATION' => $headerContent, 'PHP_AUTH_USER' => 'foo', 'PHP_AUTH_PW' => '', ), $bag->getHeaders()); } } __halt_compiler();----SIGNATURE:----kWp6eq0r6qCwZx/xwwijKK6ql/QnBCwTNTnjqLMFCTclqfj+jxkVWsJVTyadCkgWRzrs+6NU4NUhcX3Yn+uZOU+KP3FGo6I5n1Sx7o67Ev16hyXpuXLlVduU1e2R59aMHhXI9UcpHJbl70/J9YKRdFkyq8ffyRsxU3cijqD4EUArCu4UWuCYw1ubZvqsyYAz2GK+LMoLn1aBP8A1IyUadP+9GYLStEXCTRov1WP26KGOGsxXRDjM4i/ztlYIKCrt7vygsyX/SBSUfwebzxAB3Ox/P6f71pCXXp0hKCR9OdnBobBVVOq4VL/YxmUqLbUGCnM1vVGYgWBLcgIOyodOOYUX6snpmBGhna4armfU7QxVDUJOikQcGrlAl2xogfqkVRdsBMgy6isTMiljkq3P/hOJoebxzKWnUf8GCPXIo7r9kCIGMYBfYtC2cOmo0UcZttNz+WHPxUY2QePvnVyNcfqAOuK+jWyi0w6sOyyI1IeRs+q9D4XjrrMop94r/Ra74oYYGzAkcCfFhj9H2stZ+iOS3sXW/Gq8MuKGbfKNdnWVL1w4ibp4i/wfOcsNZ/wjsQUV+9tBnvHNB0tZpmbL5cgI3AHgP2aKj88h8oFkJJi5LyHtSC8nRZfsaw69KhoecfukRqf8zn76bquXfvku+WwSN7trBMbPMeL7qnvNMXQ=----ATTACHMENT:----MjIzMzg2NjI5Nzk4NDY4MiAxMjM0MTkwMjAyOTMwNDE4IDM3NTQ0MzQxNzgyMjk0NjI=