Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
LogoutUrlContextBuilder
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 process
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace Apie\ApieBundle\ContextBuilders;
4
5use Apie\Core\Context\ApieContext;
6use Apie\Core\ContextBuilders\ContextBuilderInterface;
7use Apie\Core\ContextConstants;
8use Symfony\Bundle\SecurityBundle\Security;
9use Symfony\Component\HttpFoundation\RequestStack;
10use Symfony\Component\Security\Http\Logout\LogoutUrlGenerator;
11
12class LogoutUrlContextBuilder implements ContextBuilderInterface
13{
14
15    public function __construct(
16        private Security $security,
17        private LogoutUrlGenerator $logoutUrlGenerator,
18        private RequestStack $requestStack
19    ) {
20    }
21
22    public function process(ApieContext $context): ApieContext
23    {
24        $firewall = null;
25        $masterRequest = $this->requestStack->getMainRequest();
26
27        try {
28            if ($masterRequest) {
29                $firewall = $this->security->getFirewallConfig($masterRequest)?->getName();
30            }
31            return $context->withContext(ContextConstants::LOGOUT_URL, $this->logoutUrlGenerator->getLogoutUrl($firewall));
32        } catch (\LogicException) {
33            return $context;
34        }
35    }
36}