Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
GuestOnlyMiddleware
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
2 / 2
3
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%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5/** @license For full copyright and license information, please see the LICENSE.md file. */
6
7namespace App\Modules\User\Presentation\Middleware;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11use Psr\Http\Message\ResponseFactoryInterface;
12use Psr\Http\Message\ResponseInterface;
13use Psr\Http\Message\ServerRequestInterface;
14use Psr\Http\Server\MiddlewareInterface;
15use Psr\Http\Server\RequestHandlerInterface;
16use Yiisoft\User\CurrentUser;
17
18/**
19 * Access Control Middleware for Guest Only Routes.
20 *
21 * Redirects authenticated users to /dashboard when attempting to access /login.
22 *
23 * @package App\Modules\User\Presentation\Middleware
24 */
25final readonly class GuestOnlyMiddleware implements MiddlewareInterface
26{
27    /**
28     * GuestOnlyMiddleware constructor.
29     *
30     * @param CurrentUser $currentUser Current identity user service instance.
31     * @param ResponseFactoryInterface $responseFactory PSR-7 Response factory.
32     */
33    public function __construct(
34        private CurrentUser $currentUser,
35        private ResponseFactoryInterface $responseFactory
36    ) {
37    }
38
39    /**
40     * {@inheritdoc}
41     */
42    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
43    {
44        if (!$this->currentUser->isGuest()) {
45            $response = $this->responseFactory->createResponse(302);
46            return $response->withHeader('Location', '/dashboard');
47        }
48
49        return $handler->handle($request);
50    }
51}