return $request->
getUriForPath($this->
buildExitPath($targetUri));
} private function isImpersonatedUser(): bool
{ return $this->tokenStorage->
getToken() instanceof SwitchUserToken;
} private function buildExitPath(string
$targetUri = null
): string
{ if (null
=== ($request =
$this->requestStack->
getCurrentRequest()) || !
$this->
isImpersonatedUser()) { return '';
} if (null ===
$switchUserConfig =
$this->firewallMap->
getFirewallConfig($request)->
getSwitchUser()) { throw new \
LogicException('Unable to generate the impersonate exit URL without a firewall configured for the user switch.'
);
} $targetUri ??=
$request->
getRequestUri();
$targetUri .= (parse_url($targetUri, \PHP_URL_QUERY
) ? '&' : '?'
).
http_build_query([$switchUserConfig['parameter'
] => SwitchUserListener::EXIT_VALUE
], '', '&'
);