2010-10-19 12:06:43 +01:00
|
|
|
<?php
|
|
|
|
|
2011-01-15 13:29:43 +00:00
|
|
|
/*
|
|
|
|
* This file is part of the Symfony package.
|
|
|
|
*
|
2011-03-06 11:40:06 +00:00
|
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
2011-01-15 13:29:43 +00:00
|
|
|
*
|
|
|
|
* For the full copyright and license information, please view the LICENSE
|
|
|
|
* file that was distributed with this source code.
|
|
|
|
*/
|
|
|
|
|
2011-01-26 20:34:11 +00:00
|
|
|
namespace Symfony\Component\Security\Http;
|
2010-10-19 12:06:43 +01:00
|
|
|
|
|
|
|
use Symfony\Component\HttpKernel\HttpKernelInterface;
|
2011-03-13 18:16:56 +00:00
|
|
|
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
|
|
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
2010-10-19 12:06:43 +01:00
|
|
|
|
|
|
|
/**
|
2010-10-23 09:42:49 +01:00
|
|
|
* Firewall uses a FirewallMap to register security listeners for the given
|
|
|
|
* request.
|
2010-10-19 12:06:43 +01:00
|
|
|
*
|
|
|
|
* It allows for different security strategies within the same application
|
2010-10-23 09:42:49 +01:00
|
|
|
* (a Basic authentication for the /api, and a web based authentication for
|
|
|
|
* everything else for instance).
|
2010-10-19 12:06:43 +01:00
|
|
|
*
|
2011-03-06 11:40:06 +00:00
|
|
|
* @author Fabien Potencier <fabien@symfony.com>
|
2010-10-19 12:06:43 +01:00
|
|
|
*/
|
|
|
|
class Firewall
|
|
|
|
{
|
2011-03-07 17:17:46 +00:00
|
|
|
private $map;
|
2011-03-13 18:16:56 +00:00
|
|
|
private $dispatcher;
|
2010-10-19 12:06:43 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
*
|
2011-04-23 16:05:44 +01:00
|
|
|
* @param FirewallMap $map A FirewallMap instance
|
|
|
|
* @param EventDispatcherInterface $dispatcher An EventDispatcherInterface instance
|
2010-10-19 12:06:43 +01:00
|
|
|
*/
|
2011-03-13 18:16:56 +00:00
|
|
|
public function __construct(FirewallMapInterface $map, EventDispatcherInterface $dispatcher)
|
2010-10-19 12:06:43 +01:00
|
|
|
{
|
|
|
|
$this->map = $map;
|
2011-03-13 18:16:56 +00:00
|
|
|
$this->dispatcher = $dispatcher;
|
2010-10-19 12:06:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handles security.
|
|
|
|
*
|
2011-03-13 18:16:56 +00:00
|
|
|
* @param GetResponseEvent $event An GetResponseEvent instance
|
2010-10-19 12:06:43 +01:00
|
|
|
*/
|
2011-06-21 15:34:33 +01:00
|
|
|
public function onKernelRequest(GetResponseEvent $event)
|
2010-10-19 12:06:43 +01:00
|
|
|
{
|
2011-03-13 18:16:56 +00:00
|
|
|
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
|
2010-10-19 12:06:43 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2010-12-03 17:47:54 +00:00
|
|
|
// register listeners for this firewall
|
2011-03-13 18:16:56 +00:00
|
|
|
list($listeners, $exception) = $this->map->getListeners($event->getRequest());
|
2010-10-19 12:06:43 +01:00
|
|
|
if (null !== $exception) {
|
2011-03-13 18:16:56 +00:00
|
|
|
$exception->register($this->dispatcher);
|
2010-10-19 12:06:43 +01:00
|
|
|
}
|
|
|
|
|
2010-12-03 17:47:54 +00:00
|
|
|
// initiate the listener chain
|
2011-03-11 00:43:22 +00:00
|
|
|
foreach ($listeners as $listener) {
|
2011-03-13 18:16:56 +00:00
|
|
|
$response = $listener->handle($event);
|
2010-10-19 12:06:43 +01:00
|
|
|
|
2011-03-13 18:16:56 +00:00
|
|
|
if ($event->hasResponse()) {
|
2011-03-13 17:10:39 +00:00
|
|
|
break;
|
2011-03-11 00:43:22 +00:00
|
|
|
}
|
2010-10-19 12:06:43 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|