Passed
Push — master ( 87ca50...75acc7 )
by Max van der
05:30
created

OAuth2Middleware::handle()   B

Complexity

Conditions 2
Paths 1

Size

Total Lines 37
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 19
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 37
ccs 19
cts 19
cp 1
rs 8.8571
c 0
b 0
f 0
cc 2
eloc 19
nc 1
nop 3
crap 2
1
<?php
2
3
4
namespace Mvdstam\Oauth2ServerLaravel\Http\Middleware;
5
6
7
use Closure;
8
use League\OAuth2\Server\Exception\OAuthServerException;
9
use League\OAuth2\Server\Middleware\ResourceServerMiddleware;
10
use Psr\Http\Message\ResponseInterface;
11
use Psr\Http\Message\ServerRequestInterface;
12
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
13
use Symfony\Component\HttpFoundation\Request;
14
use Symfony\Component\HttpFoundation\Response;
15
16
class OAuth2Middleware extends ResourceServerMiddleware
17
{
18
19
    /**
20
     * @param $request
21
     * @param Closure $next
22
     * @param string $scopes
23
     * @return Response
24
     */
25 7
    public function handle(/** @noinspection PhpUnusedParameterInspection */
26
        $request, Closure $next, $scopes = '')
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
27
    {
28 7
        return $this->convertToSymfonyResponse(
29 7
            $this(app(ServerRequestInterface::class), app(ResponseInterface::class), function(ServerRequestInterface $request, ResponseInterface $response) use ($next, $scopes) {
30 5
                $tokenScopes = explode(',', $request->getAttribute('oauth_scopes'));
31 5
                $routeScopes = explode('+', $scopes);
32
33
                /*
34
                 * Check if all scopes necessary for this route are present in
35
                 * the current token.
36
                 */
37 5
                if (array_diff($routeScopes, $tokenScopes)) {
38 1
                    return OAuthServerException::invalidScope(implode(' ', $tokenScopes))
39 1
                            ->generateHttpResponse($response);
40
                }
41
42
                // Store request in container
43 4
                app()->instance(ServerRequestInterface::class, $request);
44
45
                /*
46
                 * Normalize request and continue normal operation
47
                 */
48 4
                return $next(
49 4
                    \Illuminate\Http\Request::createFromBase(Request::create(
50 4
                        $request->getUri(),
51 4
                        $request->getMethod(),
52 4
                        $request->getQueryParams(),
53 4
                        $request->getCookieParams(),
54 4
                        $request->getUploadedFiles(),
55 4
                        $request->getServerParams(),
56 4
                        $request->getBody()
57
                    ))
58
                );
59 7
            })
60
        );
61
    }
62
63
    /**
64
     * Normalizes response objects to regular Symfony Response classes
65
     *
66
     * @param mixed $response
67
     * @return Response
68
     */
69 7
    protected function convertToSymfonyResponse($response)
70
    {
71 7
        if ( ! $response instanceof Response) {
72 4
            $response = (new HttpFoundationFactory)->createResponse($response);
73
        }
74
75 7
        return $response;
76
    }
77
78
}
79