/** * Copies an existing redirect response into a safe one. * * The safe one cannot accidentally redirect to an external URL, unless * actively wanted (see TrustedRedirectResponse). * * @param \Symfony\Component\HttpFoundation\RedirectResponse $response * The original redirect. * * @return static */ public static function createFromRedirectResponse(RedirectResponse $response) { $safe_response = new static($response->getTargetUrl(), $response->getStatusCode(), $response->headers->allPreserveCase()); $safe_response->setProtocolVersion($response->getProtocolVersion()); $safe_response->setCharset($response->getCharset()); return $safe_response; }
/** * @Route("/", name="fos_user_registration_register") */ public function registerAction(Request $request) { /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */ $userManager = $this->container->get('fos_user.user_manager'); /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */ $dispatcher = $this->container->get('event_dispatcher'); $user = $userManager->createUser(); $user->setEnabled(true); $event = new GetResponseUserEvent($user, $request); $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event); if (null !== $event->getResponse()) { return $event->getResponse(); } $admin = $this->container->get('sf.admin.loader')->getAdminByClass($user); $form = $this->createFrom($user, $admin); $event = new \Symforce\AdminBundle\Event\FormEvent($form, $request); $dispatcher->dispatch('sf.event.form', $event); if (null !== $event->getResponse()) { return $event->getResponse(); } if ('POST' === $request->getMethod()) { $form->bind($request); if ($form->isValid()) { $event = new FormEvent($form, $request); $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); $userManager->updateUser($user); if (null === ($response = $event->getResponse())) { $url = $this->container->get('router')->generate('fos_user_registration_confirmed'); $response = new RedirectResponse($url); } else { if ($this->container->getParameter('kernel.debug')) { if ($response instanceof RedirectResponse) { if ($response->getTargetUrl() === $this->container->get('router')->generate('fos_user_registration_check_email')) { return $this->checkEmailAction(); } } } } $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); return $response; } } return $this->container->get('templating')->renderResponse('SymforceUserBundle:Registration:register.html.twig', array('form' => $form->createView(), 'admin' => $admin)); }
/** * When redirecting to login page set the 'retreat' variable in the session. * This allows a redirect back to the current page after successful login. * * @param \Symfony\Component\HttpFoundation\Request $request * @param \Symfony\Component\HttpFoundation\RedirectResponse $response */ protected function handleLoginRetreat(Request $request, RedirectResponse $response) { $route = $request->attributes->get('_route'); if ($response->getTargetUrl() === $this->urlGenerator->generate('login') && $route !== 'logout') { $this->session->set('retreat', ['route' => $route, 'params' => $request->attributes->get('_route_params')]); } else { $this->session->remove('retreat'); } }
public function testSetTargetUrl() { $response = new RedirectResponse('foo.bar'); $response->setTargetUrl('baz.beep'); $this->assertEquals('baz.beep', $response->getTargetUrl()); }
protected function canBeRedirected(Request $request, RedirectResponse $response) { $targetRequest = Request::create($response->getTargetUrl()); $stripUrl = function ($path) { return preg_replace('/#.+$/', '', $path); }; $targetPath = $stripUrl($targetRequest->getBaseUrl() . $targetRequest->getPathInfo()); $currentPath = $stripUrl($request->getBaseUrl() . $request->getPathInfo()); return $targetPath !== $currentPath; }