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

JWTGenerator::generateAssertion()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 8
nc 1
nop 4
dl 0
loc 12
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 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