diff --git a/eZ/Bundle/EzPublishCoreBundle/Routing/DefaultRouter.php b/eZ/Bundle/EzPublishCoreBundle/Routing/DefaultRouter.php index 414ab9b4ec9..d31426a5b6b 100644 --- a/eZ/Bundle/EzPublishCoreBundle/Routing/DefaultRouter.php +++ b/eZ/Bundle/EzPublishCoreBundle/Routing/DefaultRouter.php @@ -164,7 +164,14 @@ public function getContextBySimplifiedRequest(SimplifiedRequest $simplifiedReque } if ($simplifiedRequest->port) { - $context->setHttpPort($simplifiedRequest->port); + switch ($simplifiedRequest->scheme) { + case 'https': + $context->setHttpsPort($simplifiedRequest->port); + break; + default: + $context->setHttpPort($simplifiedRequest->port); + break; + } } if ($simplifiedRequest->host) { diff --git a/eZ/Bundle/EzPublishCoreBundle/Tests/Routing/DefaultRouterTest.php b/eZ/Bundle/EzPublishCoreBundle/Tests/Routing/DefaultRouterTest.php index a0845071cb2..f76250d7397 100644 --- a/eZ/Bundle/EzPublishCoreBundle/Tests/Routing/DefaultRouterTest.php +++ b/eZ/Bundle/EzPublishCoreBundle/Tests/Routing/DefaultRouterTest.php @@ -281,4 +281,60 @@ public function testGenerateReverseSiteAccessMatch() $router->generate($routeName, array('siteaccess' => $siteAccessName), DefaultRouter::ABSOLUTE_PATH) ); } + + /** + * @dataProvider providerGetContextBySimplifiedRequest + * + * @param string $uri + */ + public function testGetContextBySimplifiedRequest($uri) + { + $this->getExpectedRequestContext($uri); + + $router = new DefaultRouter($this->container, 'foo', [], $this->requestContext); + + self::assertEquals( + $this->getExpectedRequestContext($uri), + $router->getContextBySimplifiedRequest(SimplifiedRequest::fromUrl($uri)) + ); + } + + /** + * Data provider for testGetContextBySimplifiedRequest. + * + * @see testGetContextBySimplifiedRequest + * + * @return array + */ + public function providerGetContextBySimplifiedRequest() + { + return [ + ['/foo/bar'], + ['http://ezpublish.dev/foo/bar'], + ['http://ezpublish.dev:8080/foo/bar'], + ['https://ezpublish.dev/secured'], + ['https://ezpublish.dev:445/secured'], + ['http://ezpublish.dev:8080/foo/root_folder/bar/baz'], + ]; + } + + private function getExpectedRequestContext($uri) + { + $requestContext = new RequestContext(); + $uriComponents = parse_url($uri); + if (isset($uriComponents['host'])) { + $requestContext->setHost($uriComponents['host']); + $requestContext->setScheme($uriComponents['scheme']); + if (isset($uriComponents['port']) && $uriComponents['scheme'] === 'http') { + $requestContext->setHttpPort($uriComponents['port']); + } elseif (isset($uriComponents['port']) && $uriComponents['scheme'] === 'https') { + $requestContext->setHttpsPort($uriComponents['port']); + } + } + if (isset($uriComponents['path'])) { + $requestContext->setPathInfo($uriComponents['path']); + } + + return $requestContext; + } } diff --git a/eZ/Publish/Core/MVC/Symfony/Routing/Generator.php b/eZ/Publish/Core/MVC/Symfony/Routing/Generator.php index baf595b9900..d7aab18b919 100644 --- a/eZ/Publish/Core/MVC/Symfony/Routing/Generator.php +++ b/eZ/Publish/Core/MVC/Symfony/Routing/Generator.php @@ -161,7 +161,14 @@ private function getContextBySimplifiedRequest(SimplifiedRequest $simplifiedRequ } if ($simplifiedRequest->port) { - $context->setHttpPort($simplifiedRequest->port); + switch ($simplifiedRequest->scheme) { + case 'https': + $context->setHttpsPort($simplifiedRequest->port); + break; + default: + $context->setHttpPort($simplifiedRequest->port); + break; + } } if ($simplifiedRequest->host) {