Passed
Push — master ( ea520a...3ac64b )
by Bukashk0zzz
03:30 queued 13s
created

GuzzleJWTMiddleware   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 41
rs 10
c 0
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A createToken() 0 8 1
A authTokenMiddleware() 0 9 1
1
<?php declare(strict_types = 1);
2
3
namespace AtlassianConnectBundle\Service;
4
5
use Firebase\JWT\JWT;
6
use GuzzleHttp\Middleware;
7
use GuzzleHttp\Psr7\Request;
8
use Psr\Http\Message\RequestInterface;
9
10
/**
11
 * Class GuzzleJWTMiddleware
12
 */
13
class GuzzleJWTMiddleware
14
{
15
    /**
16
     * JWT Authentication middleware for Guzzle
17
     *
18
     * @param string $issuer Add-on key in most cases
19
     * @param string $secret Shared secret
20
     *
21
     * @return callable
22
     */
23
    public static function authTokenMiddleware(string $issuer, string $secret): callable
24
    {
25
        return Middleware::mapRequest(
26
            function (RequestInterface $request) use ($issuer, $secret) {
27
                return new Request(
28
                    $request->getMethod(),
29
                    $request->getUri(),
30
                    \array_merge($request->getHeaders(), ['Authorization' => 'JWT '.static::createToken($request, $issuer, $secret)]),
31
                    $request->getBody()
32
                );
33
            }
34
        );
35
    }
36
37
    /**
38
     * Create JWT token used by Atlassian REST API request
39
     *
40
     * @param RequestInterface $request
41
     * @param string           $issuer  Key of the add-on
42
     * @param string           $secret  Shared secret of the Tenant
43
     *
44
     * @return string
45
     */
46
    private static function createToken(RequestInterface $request, string $issuer, string $secret): string
47
    {
48
        return JWT::encode([
49
            'iss' => $issuer,
50
            'iat' => \time(),
51
            'exp' => \strtotime('+1 day'),
52
            'qsh' => QSHGenerator::generate((string) $request->getUri(), $request->getMethod()),
53
        ], $secret);
54
    }
55
}
56