Passed
Pull Request — master (#126)
by Anatoly
06:03 queued 19s
created

Base64DecodingMiddleware   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 24
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 7
c 2
b 0
f 0
dl 0
loc 24
ccs 9
cts 9
cp 1
rs 10
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A process() 0 14 2
1
<?php
2
3
/**
4
 * It's free open-source software released under the MIT License.
5
 *
6
 * @author Anatoly Nekhay <[email protected]>
7
 * @copyright Copyright (c) 2018, Anatoly Nekhay
8
 * @license https://github.com/sunrise-php/http-router/blob/master/LICENSE
9
 * @link https://github.com/sunrise-php/http-router
10
 */
11
12
declare(strict_types=1);
13
14
namespace Sunrise\Http\Router\Middleware;
15
16
use Psr\Http\Message\ResponseInterface;
17
use Psr\Http\Message\ServerRequestInterface;
18
use Psr\Http\Message\StreamFactoryInterface;
19
use Psr\Http\Server\MiddlewareInterface;
20
use Psr\Http\Server\RequestHandlerInterface;
21
22
/**
23
 * @since 3.2.0
24
 */
25
final class Base64DecodingMiddleware implements MiddlewareInterface
26
{
27 1
    public function __construct(
28
        private readonly StreamFactoryInterface $streamFactory,
29
    ) {
30 1
    }
31
32
    /**
33
     * @inheritDoc
34
     */
35 1
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
36
    {
37
        // https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Encoding
38 1
        if ($request->getHeaderLine('Content-Encoding') === 'base64') {
39
            /** @var resource $resource */
40 1
            $resource = $request->getBody()->detach();
41
            // https://www.php.net/manual/en/filters.convert.php
42 1
            \stream_filter_append($resource, 'convert.base64-decode');
43
44 1
            $body = $this->streamFactory->createStreamFromResource($resource);
45 1
            $request = $request->withBody($body);
46
        }
47
48 1
        return $handler->handle($request);
49
    }
50
}
51