Completed
Push — master ( bd8278...a640c0 )
by Andrii
15:21
created

AuthMiddleware   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 5
lcom 0
cbo 1
dl 0
loc 34
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A process() 0 6 1
authenticate() 0 1 ?
A getAccessToken() 0 4 1
A getBearerToken() 0 9 2
A getParam() 0 4 1
1
<?php
2
3
namespace hiapi\Core\Auth;
4
5
use Psr\Http\Message\ResponseInterface;
6
use Psr\Http\Message\ServerRequestInterface;
7
use Psr\Http\Server\MiddlewareInterface;
8
use Psr\Http\Server\RequestHandlerInterface;
9
10
abstract class AuthMiddleware implements MiddlewareInterface
11
{
12
    /**
13
     * @inheritDoc
14
     */
15
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
16
    {
17
        $this->authenticate($request);
18
19
        return $handler->handle($request);
20
    }
21
22
    abstract public function authenticate(ServerRequestInterface $request);
23
24
    protected function getAccessToken(ServerRequestInterface $request): ?string
25
    {
26
        return $this->getBearerToken($request) ?? $this->getParam($request, 'access_token');
27
    }
28
29
    protected function getBearerToken(ServerRequestInterface $request): ?string
30
    {
31
        $header = $request->getHeader('Authorization');
32
        if (preg_match('/^Bearer\s+([a-fA-F0-9]{30,50})$/', $header, $matches)) {
33
            return $matches[1];
34
        }
35
36
        return null;
37
    }
38
39
    public function getParam(ServerRequestInterface $request, string $name): ?string
40
    {
41
        return $request->getParsedBody()[$name] ?? $request->getQueryParams()[$name] ?? null;
42
    }
43
}
44