getTargetUrl(), $response->getStatusCode(), $response->headers->allPreserveCase()); $safe_response->fromResponse($response); return $safe_response; } /** * Copies over the values from the given response. * * @param \Symfony\Component\HttpFoundation\RedirectResponse $response * The redirect reponse object. */ protected function fromResponse(RedirectResponse $response) { $this->setProtocolVersion($response->getProtocolVersion()); $this->setCharset($response->getCharset()); // Cookies are separate from other headers and have to be copied over // directly. foreach ($response->headers->getCookies() as $cookie) { $this->headers->setCookie($cookie); } } /** * {@inheritdoc} */ public function setTargetUrl($url) { if (!$this->isSafe($url)) { throw new \InvalidArgumentException(sprintf('It is not safe to redirect to %s', $url)); } return parent::setTargetUrl($url); } /** * Returns whether the URL is considered as safe to redirect to. * * @param string $url * The URL checked for safety. * * @return bool */ abstract protected function isSafe($url); }