Author: Fabien Potencier (fabien@symfony.com)
 /**
  * @param \Symfony\Component\HttpFoundation\Request $request
  * @throws \InvalidArgumentException if cannot manage the Request
  * @return \Symfony\Component\HttpFoundation\Response|SamlSpInfo
  */
 public function manage(Request $request)
 {
     if (false == $this->supports($request)) {
         throw new \InvalidArgumentException('Unsupported request');
     }
     $serviceInfo = $this->serviceInfoCollection->findByAS($request->query->get('as'));
     if (!$serviceInfo) {
         return new RedirectResponse($this->httpUtils->generateUri($request, $request->attributes->get('discovery_path')));
     }
     $serviceInfo->getSpProvider()->setRequest($request);
     $spED = $serviceInfo->getSpProvider()->getEntityDescriptor();
     $idpED = $serviceInfo->getIdpProvider()->getEntityDescriptor();
     $spMeta = $serviceInfo->getSpMetaProvider()->getSpMeta();
     $builder = new AuthnRequestBuilder($spED, $idpED, $spMeta);
     $message = $builder->build();
     if ($serviceInfo->getSpSigningProvider()->isEnabled()) {
         $message->sign($serviceInfo->getSpSigningProvider()->getCertificate(), $serviceInfo->getSpSigningProvider()->getPrivateKey());
     }
     $binding = $this->bindingManager->instantiate($spMeta->getAuthnRequestBinding());
     $bindingResponse = $binding->send($message);
     if ($bindingResponse instanceof \AerialShip\LightSaml\Binding\RedirectResponse) {
         $result = new RedirectResponse($bindingResponse->getDestination());
     } else {
         if ($bindingResponse instanceof \AerialShip\LightSaml\Binding\PostResponse) {
             $result = new Response($bindingResponse->render());
         } else {
             throw new \RuntimeException('Unrecognized binding response ' . get_class($bindingResponse));
         }
     }
     $state = new RequestState();
     $state->setId($message->getID());
     $state->setDestination($serviceInfo->getIdpProvider()->getEntityDescriptor()->getEntityID());
     $this->requestStore->set($state);
     return $result;
 }
Beispiel #2
0
 /**
  * @expectedException \RuntimeException
  */
 public function testCheckRequestPathWithRouterLoadingException()
 {
     $router = $this->getMock('Symfony\\Component\\Routing\\RouterInterface');
     $router->expects($this->any())->method('match')->will($this->throwException(new \RuntimeException()));
     $utils = new HttpUtils($router);
     $utils->checkRequestPath($this->getRequest(), 'foobar');
 }
Beispiel #3
0
 public function testCheckRequestPath()
 {
     $utils = new HttpUtils($this->getUrlGenerator());
     $this->assertTrue($utils->checkRequestPath($this->getRequest(), '/'));
     $this->assertFalse($utils->checkRequestPath($this->getRequest(), '/foo'));
     $this->assertFalse($utils->checkRequestPath($this->getRequest(), 'foobar'));
     $this->assertTrue($utils->checkRequestPath($this->getRequest('/foo/bar'), 'foobar'));
 }
 function it_clears_cart_session_after_logging_out_and_return_default_handler_response(ChannelContextInterface $channelContext, ChannelInterface $channel, HttpUtils $httpUtils, Request $request, Response $response, SessionInterface $session)
 {
     $channelContext->getChannel()->willReturn($channel);
     $channel->getCode()->willReturn('WEB_US');
     $session->remove('_sylius.cart.WEB_US')->shouldBeCalled();
     $httpUtils->createRedirectResponse($request, '/')->willReturn($response);
     $this->onLogoutSuccess($request)->shouldReturn($response);
 }
 /**
  * Gets the appropriate resource owner for a request.
  *
  * @param Request $request
  *
  * @return null|array
  */
 public function getResourceOwnerByRequest(Request $request)
 {
     foreach ($this->resourceOwners as $name => $checkPath) {
         if ($this->httpUtils->checkRequestPath($request, $checkPath)) {
             return array($this->getResourceOwnerByName($name), $checkPath);
         }
     }
 }
 /**
  * @param \Symfony\Component\HttpFoundation\Request $request
  * @return bool
  */
 public function supports(Request $request)
 {
     if ($this->httpUtils->checkRequestPath($request, $request->attributes->get('failure_path'))) {
         return false;
     }
     $token = $this->securityContext->getToken();
     $result = $token != null && $token->isAuthenticated() && $token instanceof SamlSpToken && $token->getSamlSpInfo() != null && $token->getSamlSpInfo()->getAuthnStatement() != null;
     return $result;
 }
 /**
  * {@inheritDoc}
  */
 public function start(Request $request, AuthenticationException $authException = null)
 {
     // redirect to the login url if there are several resource owners
     if (null === $this->resourceOwner) {
         return $this->httpUtils->createRedirectResponse($request, $this->loginPath);
     }
     // otherwise start authentication
     $authorizationUrl = $this->resourceOwner->getAuthorizationUrl($this->httpUtils->createRequest($request, $this->checkPath)->getUri());
     return $this->httpUtils->createRedirectResponse($request, $authorizationUrl);
 }
 /**
  * {@inheritDoc}
  */
 public function start(Request $request, AuthenticationException $authException = null)
 {
     if (!$this->httpUtils->checkRequestPath($request, $this->checkPath)) {
         if ($this->httpUtils->checkRequestPath($request, $this->loginPath)) {
             $request->getSession()->remove('_security.target_path');
         }
         $authorizationUrl = $this->oauthProvider->getAuthorizationUrl($request);
         return $this->httpUtils->createRedirectResponse($request, $authorizationUrl);
     }
     throw $authException;
 }
 public function onKernelException(GetResponseForExceptionEvent $event)
 {
     $exception = $event->getException();
     if (!$exception instanceof TermsNotAgreedException) {
         return;
     }
     $route = 'tos_agree';
     $request = $event->getRequest();
     $request->getSession()->set('tos_continue_url', $request->getRequestUri());
     $response = $this->httpUtils->createRedirectResponse($request, $route);
     $event->setResponse($response);
 }
 /**
  * {@inheritDoc}
  */
 public function start(Request $request, AuthenticationException $authException = null)
 {
     if ($this->useForward) {
         $subRequest = $this->httpUtils->createRequest($request, $this->loginPath);
         $response = $this->httpKernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
         if (200 === $response->getStatusCode()) {
             $response->headers->set('X-Status-Code', 401);
         }
         return $response;
     }
     return $this->httpUtils->createRedirectResponse($request, $this->loginPath);
 }
 public function onAuthenticationSuccess(Request $request, TokenInterface $token)
 {
     $this->logger->debug('After login');
     $path = $this->defaultPath;
     if ($request->getSession()->has('order')) {
         $this->logger->debug('Order to authenticate');
         $request->getSession()->get('order')->authenticateWith($token->getUser());
         $path = $this->orderNextStepRoute;
     }
     $this->logger->debug("Redirect to {$path}");
     return $this->httpUtils->createRedirectResponse($request, $path);
 }
 /**
  * @param \Symfony\Component\HttpFoundation\Request $request
  * @throws \Symfony\Component\Process\Exception\RuntimeException
  * @return \Symfony\Component\HttpFoundation\Response|SamlSpInfo
  */
 function manage(Request $request)
 {
     $serviceInfo = $this->serviceInfoCollection->findByAS($request->query->get('as'));
     if (!$serviceInfo) {
         return $this->httpUtils->createRedirectResponse($request, $request->attributes->get('discovery_path') . '?type=metadata');
     }
     $serviceInfo->getSpProvider()->setRequest($request);
     $ed = $serviceInfo->getSpProvider()->getEntityDescriptor();
     $context = new SerializationContext();
     $ed->getXml($context->getDocument(), $context);
     $result = new Response($context->getDocument()->saveXML());
     $result->headers->set('Content-Type', 'application/samlmetadata+xml');
     return $result;
 }
Beispiel #13
0
 public function testCheckRequestPath()
 {
     $utils = new HttpUtils($this->getRouter());
     $this->assertTrue($utils->checkRequestPath($this->getRequest(), '/'));
     $this->assertFalse($utils->checkRequestPath($this->getRequest(), '/foo'));
     $router = $this->getMock('Symfony\\Component\\Routing\\RouterInterface');
     $router->expects($this->any())->method('match')->will($this->returnValue(array()));
     $utils = new HttpUtils($router);
     $this->assertFalse($utils->checkRequestPath($this->getRequest(), 'foobar'));
     $router = $this->getMock('Symfony\\Component\\Routing\\RouterInterface');
     $router->expects($this->any())->method('match')->will($this->returnValue(array('_route' => 'foobar')));
     $utils = new HttpUtils($router);
     $this->assertTrue($utils->checkRequestPath($this->getRequest('/foo/bar'), 'foobar'));
 }
 protected function getPath(Request $request)
 {
     $type = $request->query->get('type');
     switch ($type) {
         case 'metadata':
             $path = $request->attributes->get('metadata_path');
             break;
         case 'logout':
             $path = $request->attributes->get('logout_path');
             break;
         default:
             $path = $request->attributes->get('login_path');
     }
     $path = $this->httpUtils->generateUri($request, $path);
     return $path;
 }
 /**
  * @param Request $request
  * @param string  $name
  *
  * @return string
  */
 public function getLoginUrl(Request $request, $name)
 {
     // Just to check that this resource owner exists
     $this->getResourceOwner($name);
     $request->attributes->set('service', $name);
     return $this->httpUtils->generateUri($request, 'hwi_oauth_service_redirect');
 }
 /**
  * {@inheritdoc}
  */
 public function onAuthenticationSuccess(Request $request, TokenInterface $token)
 {
     $username = $token->getUsername();
     $returnUrl = $this->determineTargetUrl($request);
     $token = $this->tokenRepository->create($username, $returnUrl);
     $query = http_build_query(['application' => $this->applicationName, 'token' => $token->getId()]);
     $url = $this->authenticateUrl . '?' . $query;
     return $this->httpUtils->createRedirectResponse($request, $url);
 }
Beispiel #17
0
 /**
  * @param Request $request
  * @param string  $name
  *
  * @return string
  */
 public function getLoginUrl(Request $request, $name, $url)
 {
     // Just to check that this resource owner exists
     $this->getResourceOwner($name);
     $request->attributes->set('service', $name);
     $session = new Session();
     // définit et récupère des attributs de session
     $session->set('name', $url);
     return $this->httpUtils->generateUri($request, 'hwi_oauth_service_redirect');
 }
 /**
  * @param string $path
  * @return string
  * @throws \RuntimeException
  */
 protected function buildPath($path)
 {
     if (isset($this->config['base_url']) && $this->config['base_url']) {
         return $this->config['base_url'] . $path;
     } else {
         if (!$this->request) {
             throw new \RuntimeException('Request not set');
         }
         return $this->httpUtils->generateUri($this->request, $path);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function start(Request $request, AuthenticationException $authException = null)
 {
     $returnUrl = $request->getSchemeAndHttpHost() . $request->getRequestUri();
     $url = $this->loginUrl . '?' . http_build_query(['application' => $this->applicationName, 'returnUrl' => $returnUrl, 'loginUrl' => $this->httpUtils->generateUri($request, $this->loginPath)]);
     return $this->httpUtils->createRedirectResponse($request, $url);
 }
 /**
  * Constructor.
  *
  * @param UrlGeneratorInterface                       $urlGenerator A UrlGeneratorInterface instance
  * @param UrlMatcherInterface|RequestMatcherInterface $urlMatcher   The URL or Request matcher
  *
  * @throws \InvalidArgumentException
  */
 public function __construct(UrlGeneratorInterface $urlGenerator = null, $urlMatcher = null)
 {
     parent::__construct($urlGenerator, $urlMatcher);
     $this->urlMatcher = $urlMatcher;
 }
Beispiel #21
0
 /**
  * @expectedException \LogicException
  * @expectedExceptionMessage You must provide a UrlGeneratorInterface instance to be able to use routes.
  */
 public function testUrlGeneratorIsRequiredToGenerateUrl()
 {
     $utils = new HttpUtils();
     $utils->generateUri(new Request(), 'route_name');
 }
 public function start(Request $request, AuthenticationException $authenticationException = null)
 {
     $this->registerIntent($request);
     $this->registerRequestedScopeService->registerRequestedScope($request);
     return $this->httpUtils->createRedirectResponse($request, 'fos_user_security_login');
 }
 /**
  * Starts the authentication scheme.
  *
  * @param Request $request The request that resulted in an AuthenticationException
  * @param AuthenticationException $authException The exception that started the authentication process
  *
  * @return Response
  */
 public function start(Request $request, AuthenticationException $authException = null)
 {
     return $this->httpUtils->createRedirectResponse($request, $this->loginPath);
 }
Beispiel #24
0
 /**
  * @param Request $request
  * @return \Symfony\Component\HttpFoundation\RedirectResponse
  */
 protected function getLogoutRedirectResponse(Request $request)
 {
     return $this->httpUtils->createRedirectResponse($request, $request->attributes->get('local_logout_path'));
 }
 /**
  * @param \Symfony\Component\HttpFoundation\Request $request
  * @return bool
  */
 public function supports(Request $request)
 {
     return $this->httpUtils->checkRequestPath($request, $request->attributes->get('oauth_callback_path'));
 }
Beispiel #26
0
 public function checkRequestPath(Request $request, $path)
 {
     return parent::checkRequestPath($request, $this->analyzeLink($path));
 }