/**
  * 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));
 }
示例#3
0
 /**
  * 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');
     }
 }
示例#4
0
 public function testSetTargetUrl()
 {
     $response = new RedirectResponse('foo.bar');
     $response->setTargetUrl('baz.beep');
     $this->assertEquals('baz.beep', $response->getTargetUrl());
 }
示例#5
-1
 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;
 }