27
27
final class TraceableFirewallListener extends FirewallListener implements ResetInterface
28
28
{
29
29
private array $ wrappedListeners = [];
30
- private array $ authenticatorsInfo = [] ;
30
+ private ? TraceableAuthenticatorManagerListener $ authenticatorManagerListener = null ;
31
31
32
32
public function getWrappedListeners (): array
33
33
{
@@ -39,62 +39,60 @@ public function getWrappedListeners(): array
39
39
40
40
public function getAuthenticatorsInfo (): array
41
41
{
42
- return $ this ->authenticatorsInfo ;
42
+ return $ this ->authenticatorManagerListener ?->getAuthenticatorsInfo() ?? [] ;
43
43
}
44
44
45
45
public function reset (): void
46
46
{
47
47
$ this ->wrappedListeners = [];
48
- $ this ->authenticatorsInfo = [] ;
48
+ $ this ->authenticatorManagerListener = null ;
49
49
}
50
50
51
51
protected function callListeners (RequestEvent $ event , iterable $ listeners ): void
52
52
{
53
- $ wrappedListeners = [];
54
- $ authenticatorManagerListener = null ;
55
-
53
+ $ requestListeners = [];
56
54
foreach ($ listeners as $ listener ) {
57
55
if ($ listener instanceof LazyFirewallContext) {
58
- \Closure::bind (function () use (&$ wrappedListeners , &$ authenticatorManagerListener ) {
59
- $ listeners = [];
56
+ $ contextWrappedListeners = [];
57
+ $ contextAuthenticatorManagerListener = null ;
58
+
59
+ \Closure::bind (function () use (&$ contextWrappedListeners , &$ contextAuthenticatorManagerListener ) {
60
60
foreach ($ this ->listeners as $ listener ) {
61
- if (!$ authenticatorManagerListener && $ listener instanceof TraceableAuthenticatorManagerListener) {
62
- $ authenticatorManagerListener = $ listener ;
63
- }
64
- if ($ listener instanceof FirewallListenerInterface) {
65
- $ listener = new WrappedLazyListener ($ listener );
66
- $ listeners [] = $ listener ;
67
- $ wrappedListeners [] = $ listener ;
68
- } else {
69
- $ listeners [] = function (RequestEvent $ event ) use ($ listener , &$ wrappedListeners ) {
70
- $ wrappedListener = new WrappedListener ($ listener );
71
- $ wrappedListener ($ event );
72
- $ wrappedListeners [] = $ wrappedListener ;
73
- };
61
+ if ($ listener instanceof TraceableAuthenticatorManagerListener) {
62
+ $ contextAuthenticatorManagerListener ??= $ listener ;
74
63
}
64
+ $ contextWrappedListeners [] = $ listener instanceof FirewallListenerInterface
65
+ ? new WrappedLazyListener ($ listener )
66
+ : new WrappedListener ($ listener )
67
+ ;
75
68
}
76
- $ this ->listeners = $ listeners ;
69
+ $ this ->listeners = $ contextWrappedListeners ;
77
70
}, $ listener , FirewallContext::class)();
78
71
79
- $ listener ($ event );
72
+ $ this ->authenticatorManagerListener ??= $ contextAuthenticatorManagerListener ;
73
+ $ this ->wrappedListeners = array_merge ($ this ->wrappedListeners , $ contextWrappedListeners );
74
+
75
+ $ requestListeners [] = $ listener ;
80
76
} else {
81
- $ wrappedListener = $ listener instanceof FirewallListenerInterface ? new WrappedLazyListener ($ listener ) : new WrappedListener ($ listener );
82
- $ wrappedListener ($ event );
83
- $ this ->wrappedListeners [] = $ wrappedListener ;
84
- if (!$ authenticatorManagerListener && $ listener instanceof TraceableAuthenticatorManagerListener) {
85
- $ authenticatorManagerListener = $ listener ;
77
+ if ($ listener instanceof TraceableAuthenticatorManagerListener) {
78
+ $ this ->authenticatorManagerListener ??= $ listener ;
86
79
}
87
- }
80
+ $ wrappedListener = $ listener instanceof FirewallListenerInterface
81
+ ? new WrappedLazyListener ($ listener )
82
+ : new WrappedListener ($ listener )
83
+ ;
84
+ $ this ->wrappedListeners [] = $ wrappedListener ;
88
85
89
- if ($ event ->hasResponse ()) {
90
- break ;
86
+ $ requestListeners [] = $ wrappedListener ;
91
87
}
92
88
}
93
89
94
- $ this ->wrappedListeners = array_merge ($ this ->wrappedListeners , $ wrappedListeners );
90
+ foreach ($ requestListeners as $ listener ) {
91
+ $ listener ($ event );
95
92
96
- if ($ authenticatorManagerListener ) {
97
- $ this ->authenticatorsInfo = $ authenticatorManagerListener ->getAuthenticatorsInfo ();
93
+ if ($ event ->hasResponse ()) {
94
+ break ;
95
+ }
98
96
}
99
97
}
100
98
}
0 commit comments