Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
1 / 1 |
| CheckLocale | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
5 | |
100.00% |
1 / 1 |
| process | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
5 | |||
| 1 | <?php |
| 2 | |
| 3 | declare(strict_types=1); |
| 4 | |
| 5 | namespace Cosray\Api; |
| 6 | |
| 7 | use Celema\Core\Exception\HttpBadRequest; |
| 8 | use Cosray\Locales; |
| 9 | use Override; |
| 10 | use Psr\Http\Message\ResponseInterface as Response; |
| 11 | use Psr\Http\Message\ServerRequestInterface as Request; |
| 12 | use Psr\Http\Server\MiddlewareInterface as Middleware; |
| 13 | use 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. */ |
| 16 | final 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 | } |