diff -r 000000000000 -r 7f95f8617b0b vendor/symfony/src/Symfony/Component/Security/Http/Firewall.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/src/Symfony/Component/Security/Http/Firewall.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Security\Http; + +use Symfony\Component\HttpKernel\HttpKernelInterface; +use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; + +/** + * Firewall uses a FirewallMap to register security listeners for the given + * request. + * + * It allows for different security strategies within the same application + * (a Basic authentication for the /api, and a web based authentication for + * everything else for instance). + * + * @author Fabien Potencier + */ +class Firewall +{ + private $map; + private $dispatcher; + + /** + * Constructor. + * + * @param FirewallMap $map A FirewallMap instance + * @param EventDispatcherInterface $dispatcher An EventDispatcherInterface instance + */ + public function __construct(FirewallMapInterface $map, EventDispatcherInterface $dispatcher) + { + $this->map = $map; + $this->dispatcher = $dispatcher; + } + + /** + * Handles security. + * + * @param GetResponseEvent $event An GetResponseEvent instance + */ + public function onKernelRequest(GetResponseEvent $event) + { + if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { + return; + } + + // register listeners for this firewall + list($listeners, $exception) = $this->map->getListeners($event->getRequest()); + if (null !== $exception) { + $exception->register($this->dispatcher); + } + + // initiate the listener chain + foreach ($listeners as $listener) { + $response = $listener->handle($event); + + if ($event->hasResponse()) { + break; + } + } + } +}