Passed
Push — master ( 4e7124...f00156 )
by Bukashk0zzz
05:29
created

JWTGenerator   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A generate() 0 10 1
A generateAssertion() 0 12 1
1
<?php declare(strict_types = 1);
2
3
namespace AtlassianConnectBundle\Service;
4
5
use Firebase\JWT\JWT;
6
use Psr\Http\Message\RequestInterface;
7
8
/**
9
 * Class JWTGenerator
10
 */
11
class JWTGenerator
12
{
13
    /**
14
     * Create JWT token used by Atlassian REST API request
15
     *
16
     * @param RequestInterface $request
17
     * @param string           $issuer  Key of the add-on
18
     * @param string           $secret  Shared secret of the Tenant
19
     *
20
     * @return string
21
     */
22
    public static function generate(RequestInterface $request, string $issuer, string $secret): string
23
    {
24
        $data = [
25
            'iss' => $issuer,
26
            'iat' => \time(),
27
            'exp' => \strtotime('+1 day'),
28
            'qsh' => QSHGenerator::generate((string) $request->getUri(), $request->getMethod()),
29
        ];
30
31
        return JWT::encode($data, $secret);
32
    }
33
34
    /**
35
     * @param string $secret
36
     * @param string $oauthClientId
37
     * @param string $baseUrl
38
     * @param string $user
39
     *
40
     * @return string
41
     */
42
    public static function generateAssertion(string $secret, string $oauthClientId, string $baseUrl, string $user): string
43
    {
44
        $data = [
45
            'iss' => 'urn:atlassian:connect:clientid:'.$oauthClientId,
46
            'sub' => 'urn:atlassian:connect:userkey:'.$user,
47
            'iat' => \time(),
48
            'exp' => \strtotime('+1 minutes'),
49
            'tnt' => $baseUrl,
50
            'aud' => 'https://auth.atlassian.io',
51
        ];
52
53
        return JWT::encode($data, $secret);
54
    }
55
}
56