Completed
Push — master ( 6812a9...b3ff48 )
by WEBEWEB
02:08
created

KernelEventListener::getUser()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 12
rs 9.8666
c 1
b 0
f 0
cc 4
nc 6
nop 0
1
<?php
2
3
/**
4
 * This file is part of the bootstrap-bundle package.
5
 *
6
 * (c) 2018 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Bundle\BootstrapBundle\EventListener;
13
14
use Symfony\Component\HttpFoundation\RedirectResponse;
15
use Symfony\Component\HttpFoundation\Request;
16
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
17
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
18
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
19
use Symfony\Component\Security\Core\User\UserInterface;
20
use WBW\Bundle\BootstrapBundle\Exception\BadUserRoleException;
21
use WBW\Bundle\BootstrapBundle\Manager\ProvidersManager;
22
23
/**
24
 * Kernel event listener.
25
 *
26
 * @author webeweb <https://github.com/webeweb/>
27
 * @package WBW\Bundle\BootstrapBundle\EventListener
28
 */
29
class KernelEventListener {
30
31
    /**
32
     * Service name.
33
     *
34
     * @var string
35
     */
36
    const SERVICE_NAME = "webeweb.bundle.bootstrapbundle.eventlistener.kernel";
37
38
    /**
39
     * Providers manager.
40
     *
41
     * @var ProvidersManager
42
     */
43
    private $providersManager;
44
45
    /**
46
     * Request.
47
     *
48
     * @var Request
49
     */
50
    private static $request;
51
52
    /**
53
     * Token storage.
54
     *
55
     * @var TokenStorageInterface
56
     */
57
    private $tokenStorage;
58
59
    /**
60
     * User.
61
     *
62
     * @var UserInterface
63
     */
64
    private $user;
65
66
    /**
67
     * Constructor.
68
     *
69
     * @param TokenStorageInterface $tokenStorage The token storage service.
70
     * @param ProvidersManager $providersManager The providers manager service.
71
     */
72
    public function __construct(TokenStorageInterface $tokenStorage, ProvidersManager $providersManager) {
73
        $this->setProvidersManager($providersManager);
74
        $this->setTokenStorage($tokenStorage);
75
    }
76
77
    /**
78
     * Get the providers manager.
79
     *
80
     * @return ProvidersManager Returns the providers manager.
81
     */
82
    public function getProvidersManager() {
83
        return $this->providersManager;
84
    }
85
86
    /**
87
     * Get the request.
88
     *
89
     * @return Request Returns the request.
90
     */
91
    public function getRequest() {
92
        return self::$request;
93
    }
94
95
    /**
96
     * Get the token storage.
97
     *
98
     * @return TokenStorageInterface Returns the token storage.
99
     */
100
    public function getTokenStorage() {
101
        return $this->tokenStorage;
102
    }
103
104
    /**
105
     * Get the current user.
106
     *
107
     * @return UserInterface Returns the current user in case of success, null otherwise.
108
     */
109
    public function getUser() {
110
        if (null === $this->user) {
111
            $token = $this->getTokenStorage()->getToken();
112
            if (null !== $token) {
113
                $this->user = $token->getUser();
114
            }
115
        }
116
        if (true === ($this->user instanceof UserInterface)) {
117
            return $this->user;
118
        }
119
        return null;
120
    }
121
122
    /**
123
     * On kernel exception.
124
     *
125
     * @param GetResponseForExceptionEvent $event The event.
126
     * @return Event Returns the event.
127
     */
128
    public function onKernelException(GetResponseForExceptionEvent $event) {
129
130
        // Get the exception.
131
        $ex = $event->getException();
132
133
        // Check the exception.
134
        if (true === ($ex instanceOf BadUserRoleException) && null !== $ex->getRedirect()) {
135
136
            // Set the response.
137
            $event->setResponse(new RedirectResponse($ex->getRedirect()));
138
        }
139
140
        // Return the event.
141
        return $event;
142
    }
143
144
    /**
145
     * On kernel request.
146
     *
147
     * @param GetResponseEvent $event The event.
148
     * @return void
149
     */
150
    public function onKernelRequest(GetResponseEvent $event) {
151
152
        // Initialize the request.
153
        $this->setRequest($event->getRequest());
154
155
        // Register the providers.
156
        $this->getProvidersManager()->register();
157
    }
158
159
    /**
160
     * Set the providers manager.
161
     *
162
     * @param ProvidersManager $providersManager The providers manager.
163
     * @return KernelEventListener Returns this kernel event listener.
164
     */
165
    protected function setProvidersManager(ProvidersManager $providersManager) {
166
        $this->providersManager = $providersManager;
167
        return $this;
168
    }
169
170
    /**
171
     * Set the request.
172
     *
173
     * @param Request $request The request.
174
     * @return KernelEventListener Returns this kernel event listener.
175
     */
176
    protected function setRequest(Request $request) {
0 ignored issues
show
Bug introduced by
You have injected the Request via parameter $request. This is generally not recommended as there might be multiple instances during a request cycle (f.e. when using sub-requests). Instead, it is recommended to inject the RequestStack and retrieve the current request each time you need it via getCurrentRequest().
Loading history...
177
        self::$request = $request;
178
        return $this;
179
    }
180
181
    /**
182
     * Set the token storage.
183
     *
184
     * @param TokenStorageInterface $tokenStorage The token storage.
185
     * @return KernelEventListener Returns this kernel event listener.
186
     */
187
    protected function setTokenStorage(TokenStorageInterface $tokenStorage) {
188
        $this->tokenStorage = $tokenStorage;
189
        return $this;
190
    }
191
192
}
193