Completed
Push — master ( e587d1...f31d1c )
by André
43:39 queued 30:17
created

RestLogoutHandler::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the RestLogoutHandler class.
5
 *
6
 * @copyright Copyright (C) 1999-2014 eZ Systems AS. All rights reserved.
7
 * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2
8
 */
9
namespace eZ\Publish\Core\REST\Server\Security;
10
11
use eZ\Publish\Core\MVC\ConfigResolverInterface;
12
use Symfony\Component\HttpFoundation\Request;
13
use Symfony\Component\HttpFoundation\Response;
14
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
15
use Symfony\Component\Security\Http\Logout\LogoutHandlerInterface;
16
17
/**
18
 * Logout handler used by REST session based logout.
19
 * It forces session cookie clearing.
20
 */
21
class RestLogoutHandler implements LogoutHandlerInterface
22
{
23
    /**
24
     * @var \eZ\Publish\Core\MVC\ConfigResolverInterface
25
     */
26
    private $configResolver;
27
28
    /**
29
     * @param \eZ\Publish\Core\MVC\ConfigResolverInterface $configResolver
30
     */
31
    public function __construct(ConfigResolverInterface $configResolver)
32
    {
33
        $this->configResolver = $configResolver;
34
    }
35
36
    /**
37
     * @param \Symfony\Component\HttpFoundation\Request $request
38
     * @param \Symfony\Component\HttpFoundation\Response $response
39
     * @param \Symfony\Component\Security\Core\Authentication\Token\TokenInterface $token
40
     */
41
    public function logout(Request $request, Response $response, TokenInterface $token)
42
    {
43
        if (!$request->attributes->get('is_rest_request')) {
44
            return;
45
        }
46
47
        $path = '/';
48
        $domain = null;
49
50
        $session = $this->configResolver->getParameter('session');
51
        if (array_key_exists('cookie_domain', $session)) {
52
            $domain = $session['cookie_domain'];
53
        }
54
        if (array_key_exists('cookie_path', $session)) {
55
            $path = $session['cookie_path'];
56
        }
57
58
        $response->headers->clearCookie($request->getSession()->getName(), $path, $domain);
59
    }
60
}
61