From 5cf459704ffc55bdebd01f872985843005cbe2b3 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 21 Sep 2015 19:08:20 +0200 Subject: [PATCH 1/3] Avoid errors when generating the logout URL when there is no firewall key --- .../DataCollector/SecurityDataCollector.php | 24 ++++++++++++++----- .../Resources/config/collectors.xml | 1 + .../views/Collector/security.html.twig | 4 ++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php index ec2afa6345712..139ef80dadb5e 100644 --- a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php +++ b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php @@ -17,6 +17,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\DataCollector\DataCollector; use Symfony\Component\Security\Core\Role\RoleInterface; +use Symfony\Component\Security\Http\Logout\LogoutUrlGenerator; /** * SecurityDataCollector. @@ -27,6 +28,7 @@ class SecurityDataCollector extends DataCollector { private $tokenStorage; private $roleHierarchy; + private $logoutUrlGenerator; /** * Constructor. @@ -34,10 +36,11 @@ class SecurityDataCollector extends DataCollector * @param TokenStorageInterface|null $tokenStorage * @param RoleHierarchyInterface|null $roleHierarchy */ - public function __construct(TokenStorageInterface $tokenStorage = null, RoleHierarchyInterface $roleHierarchy = null) + public function __construct(TokenStorageInterface $tokenStorage = null, RoleHierarchyInterface $roleHierarchy = null, LogoutUrlGenerator $logoutUrlGenerator = null) { $this->tokenStorage = $tokenStorage; $this->roleHierarchy = $roleHierarchy; + $this->logoutUrlGenerator = $logoutUrlGenerator; } /** @@ -50,7 +53,7 @@ public function collect(Request $request, Response $response, \Exception $except 'enabled' => false, 'authenticated' => false, 'token_class' => null, - 'provider_key' => null, + 'logout_url' => null, 'user' => '', 'roles' => array(), 'inherited_roles' => array(), @@ -61,7 +64,7 @@ public function collect(Request $request, Response $response, \Exception $except 'enabled' => true, 'authenticated' => false, 'token_class' => null, - 'provider_key' => null, + 'logout_url' => null, 'user' => '', 'roles' => array(), 'inherited_roles' => array(), @@ -70,6 +73,7 @@ public function collect(Request $request, Response $response, \Exception $except } else { $inheritedRoles = array(); $assignedRoles = $token->getRoles(); + if (null !== $this->roleHierarchy) { $allRoles = $this->roleHierarchy->getReachableRoles($assignedRoles); foreach ($allRoles as $role) { @@ -78,11 +82,19 @@ public function collect(Request $request, Response $response, \Exception $except } } } + + try { + $logoutUrl = $this->logoutUrlGenerator->getLogoutPath(); + } catch(\Exception $e) { + // fail silently when the logout URL cannot be generated + $logoutUrl = null; + } + $this->data = array( 'enabled' => true, 'authenticated' => $token->isAuthenticated(), 'token_class' => get_class($token), - 'provider_key' => method_exists($token, 'getProviderKey') ? $token->getProviderKey() : null, + 'logout_url' => $logoutUrl, 'user' => $token->getUsername(), 'roles' => array_map(function (RoleInterface $role) { return $role->getRole();}, $assignedRoles), 'inherited_roles' => array_map(function (RoleInterface $role) { return $role->getRole(); }, $inheritedRoles), @@ -167,9 +179,9 @@ public function getTokenClass() * * @return string The provider key */ - public function getProviderKey() + public function getLogoutUrl() { - return $this->data['provider_key']; + return $this->data['logout_url']; } /** diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/collectors.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/collectors.xml index 8f6a608c6de8e..bfc236b8cf8ec 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/config/collectors.xml +++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/collectors.xml @@ -13,6 +13,7 @@ + diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/views/Collector/security.html.twig b/src/Symfony/Bundle/SecurityBundle/Resources/views/Collector/security.html.twig index f07f29c9315dc..dd724682d749e 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/views/Collector/security.html.twig +++ b/src/Symfony/Bundle/SecurityBundle/Resources/views/Collector/security.html.twig @@ -33,10 +33,10 @@ {{ collector.tokenClass|abbr_class }} {% endif %} - {% if collector.providerKey %} + {% if collector.logoutUrl %}
Actions - Logout + Logout
{% endif %} {% elseif collector.enabled %} From 1c56157a7fcbd4c23e7a05e8df4708a352a656bf Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 21 Sep 2015 19:43:24 +0200 Subject: [PATCH 2/3] Fixes --- .../SecurityBundle/DataCollector/SecurityDataCollector.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php index 139ef80dadb5e..53296633475a8 100644 --- a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php +++ b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php @@ -35,6 +35,7 @@ class SecurityDataCollector extends DataCollector * * @param TokenStorageInterface|null $tokenStorage * @param RoleHierarchyInterface|null $roleHierarchy + * @param LogoutUrlGenerator|null $logoutUrlGenerator */ public function __construct(TokenStorageInterface $tokenStorage = null, RoleHierarchyInterface $roleHierarchy = null, LogoutUrlGenerator $logoutUrlGenerator = null) { @@ -83,11 +84,13 @@ public function collect(Request $request, Response $response, \Exception $except } } + $logoutUrl = null; try { - $logoutUrl = $this->logoutUrlGenerator->getLogoutPath(); + if (null !== $this->logoutUrlGenerator) { + $logoutUrl = $this->logoutUrlGenerator->getLogoutPath(); + } } catch(\Exception $e) { // fail silently when the logout URL cannot be generated - $logoutUrl = null; } $this->data = array( From ba085cf6de396cd1a4c7c0f7794c4882c3e50918 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 21 Sep 2015 19:49:30 +0200 Subject: [PATCH 3/3] Fixed syntax issues --- .../SecurityBundle/DataCollector/SecurityDataCollector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php index 53296633475a8..7b3e111974ea5 100644 --- a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php +++ b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php @@ -35,7 +35,7 @@ class SecurityDataCollector extends DataCollector * * @param TokenStorageInterface|null $tokenStorage * @param RoleHierarchyInterface|null $roleHierarchy - * @param LogoutUrlGenerator|null $logoutUrlGenerator + * @param LogoutUrlGenerator|null $logoutUrlGenerator */ public function __construct(TokenStorageInterface $tokenStorage = null, RoleHierarchyInterface $roleHierarchy = null, LogoutUrlGenerator $logoutUrlGenerator = null) {