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

GuzzleJWTMiddleware::createToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 3
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
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