Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
CheckLocale
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
1 / 1
 process
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
5
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Api;
6
7use Celema\Core\Exception\HttpBadRequest;
8use Cosray\Locales;
9use Override;
10use Psr\Http\Message\ResponseInterface as Response;
11use Psr\Http\Message\ServerRequestInterface as Request;
12use Psr\Http\Server\MiddlewareInterface as Middleware;
13use Psr\Http\Server\RequestHandlerInterface as Handler;
14
15/** The page negotiation falls back to the default locale; an API client asked for a specific one. */
16final class CheckLocale implements Middleware
17{
18    #[Override]
19    public function process(Request $request, Handler $handler): Response
20    {
21        $locale = $request->getQueryParams()['locale'] ?? null;
22        $locales = $request->getAttribute('locales');
23
24        if ($locale !== null && $locales instanceof Locales && (!is_string($locale) || !$locales->exists($locale))) {
25            throw new HttpBadRequest($request, payload: ['message' => 'Unknown locale.']);
26        }
27
28        return $handler->handle($request);
29    }
30}