GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Branch master (f137da)
by Dmitri
01:44
created

DamaxApiAuthExtensionTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 172
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 172
rs 10
c 0
b 0
f 0
wmc 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Damax\Bundle\ApiAuthBundle\Tests\DependencyInjection;
6
7
use Damax\Bundle\ApiAuthBundle\DependencyInjection\DamaxApiAuthExtension;
8
use Damax\Bundle\ApiAuthBundle\Extractor\ChainExtractor;
9
use Damax\Bundle\ApiAuthBundle\Extractor\CookieExtractor;
10
use Damax\Bundle\ApiAuthBundle\Extractor\HeaderExtractor;
11
use Damax\Bundle\ApiAuthBundle\Extractor\QueryExtractor;
12
use Damax\Bundle\ApiAuthBundle\Jwt\Claims\OrganizationClaims;
13
use Damax\Bundle\ApiAuthBundle\Jwt\Claims\SecurityClaims;
14
use Damax\Bundle\ApiAuthBundle\Jwt\Claims\TimestampClaims;
15
use Damax\Bundle\ApiAuthBundle\Jwt\Lcobucci\Builder;
16
use Damax\Bundle\ApiAuthBundle\Jwt\Lcobucci\Parser;
17
use Damax\Bundle\ApiAuthBundle\Listener\ExceptionListener;
18
use Damax\Bundle\ApiAuthBundle\Security\ApiKey\Authenticator as ApiKeyAuthenticator;
19
use Damax\Bundle\ApiAuthBundle\Security\ApiKey\TokenUserProvider;
20
use Damax\Bundle\ApiAuthBundle\Security\Jwt\Authenticator as JwtAuthenticator;
21
use Lcobucci\JWT\Configuration;
22
use Lcobucci\JWT\Signer\Rsa\Sha256;
23
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
24
use Symfony\Component\DependencyInjection\Definition;
25
use Symfony\Component\HttpKernel\KernelEvents;
26
27
class DamaxApiAuthExtensionTest extends AbstractExtensionTestCase
28
{
29
    /**
30
     * @test
31
     */
32
    public function it_registers_api_key_services()
33
    {
34
        $this->load([
35
            'api_key' => [
36
                'tokens' => [
37
                    'foo' => 'bar',
38
                    'baz' => 'qux',
39
                ],
40
                'extractors' => [
41
                    ['type' => 'header', 'name' => 'X-Authorization', 'prefix' => 'KEY'],
42
                    ['type' => 'query', 'name' => 'api_key'],
43
                    ['type' => 'cookie', 'name' => 'api_key'],
44
                ],
45
            ],
46
        ]);
47
48
        $this->assertContainerBuilderHasService('damax.api_auth.api_key.user_provider', TokenUserProvider::class);
49
        $this->assertContainerBuilderHasServiceDefinitionWithArgument('damax.api_auth.api_key.user_provider', 0, [
50
            'foo' => 'bar',
51
            'baz' => 'qux',
52
        ]);
53
54
        $this->assertContainerBuilderHasService('damax.api_auth.api_key.authenticator', ApiKeyAuthenticator::class);
55
56
        /** @var Definition $extractors */
57
        $extractors = $this->container
58
            ->getDefinition('damax.api_auth.api_key.authenticator')
59
            ->getArgument(0)
60
        ;
61
        $this->assertEquals(ChainExtractor::class, $extractors->getClass());
62
63
        /** @var Definition[] $definitions */
64
        $definitions = $extractors->getArgument(0);
65
66
        // Header
67
        $this->assertEquals(HeaderExtractor::class, $definitions[0]->getClass());
68
        $this->assertEquals('X-Authorization', $definitions[0]->getArgument(0));
69
        $this->assertEquals('KEY', $definitions[0]->getArgument(1));
70
71
        // Query
72
        $this->assertEquals(QueryExtractor::class, $definitions[1]->getClass());
73
        $this->assertEquals('api_key', $definitions[1]->getArgument(0));
74
75
        // Cookie
76
        $this->assertEquals(CookieExtractor::class, $definitions[2]->getClass());
77
        $this->assertEquals('api_key', $definitions[2]->getArgument(0));
78
79
        $this->assertContainerBuilderHasServiceDefinitionWithTag(ExceptionListener::class, 'kernel.event_listener', [
80
            'event' => KernelEvents::EXCEPTION,
81
            'method' => 'onKernelException',
82
        ]);
83
    }
84
85
    /**
86
     * @test
87
     */
88
    public function it_registers_exception_formatting()
89
    {
90
        $this->load([]);
91
92
        $this->assertContainerBuilderHasServiceDefinitionWithTag(ExceptionListener::class, 'kernel.event_listener', [
93
            'event' => 'kernel.exception',
94
            'method' => 'onKernelException',
95
        ]);
96
    }
97
98
    /**
99
     * @test
100
     */
101
    public function it_does_not_register_exception_formatting()
102
    {
103
        $this->load(['format_exceptions' => false]);
104
105
        $this->assertEmpty($this->container->getDefinition(ExceptionListener::class)->getTags());
106
    }
107
108
    /**
109
     * @test
110
     */
111
    public function it_registers_jwt_services_with_symmetric_signer()
112
    {
113
        $key = tempnam(sys_get_temp_dir(), 'key_');
114
115
        $this->load([
116
            'jwt' => [
117
                'identity_claim' => 'username',
118
                'signer' => [
119
                    'type' => 'asymmetric',
120
                    'algorithm' => 'RS256',
121
                    'signing_key' => $key,
122
                    'verification_key' => $key,
123
                ],
124
                'parser' => [
125
                    'issuers' => ['damax', 'damax-api-auth-bundle'],
126
                    'audience' => 'symfony',
127
                ],
128
                'builder' => [
129
                    'issuer' => 'damax',
130
                    'audience' => 'zend',
131
                    'ttl' => 600,
132
                ],
133
            ],
134
        ]);
135
136
        $this->assertContainerBuilderHasService('damax.api_auth.jwt.authenticator', JwtAuthenticator::class);
137
        $this->assertContainerBuilderHasServiceDefinitionWithArgument('damax.api_auth.jwt.authenticator', 2, 'username');
138
139
        /** @var Definition $extractors */
140
        $extractors = $this->container
141
            ->getDefinition('damax.api_auth.jwt.authenticator')
142
            ->getArgument(0)
143
        ;
144
        $this->assertEquals(ChainExtractor::class, $extractors->getClass());
145
146
        /** @var Definition[] $definitions */
147
        $definitions = $extractors->getArgument(0);
148
149
        // Header
150
        $this->assertEquals(HeaderExtractor::class, $definitions[0]->getClass());
151
        $this->assertEquals('Authorization', $definitions[0]->getArgument(0));
152
        $this->assertEquals('Bearer', $definitions[0]->getArgument(1));
153
154
        /** @var Definition $parser */
155
        $parser = $this->container
156
            ->getDefinition('damax.api_auth.jwt.authenticator')
157
            ->getArgument(1)
158
        ;
159
        $this->assertEquals(Parser::class, $parser->getClass());
160
        $this->assertEquals(['damax', 'damax-api-auth-bundle'], $parser->getArgument(2));
161
        $this->assertEquals('symfony', $parser->getArgument(3));
162
163
        /** @var Definition $config */
164
        $config = $parser->getArgument(0);
165
        $this->assertEquals(Configuration::class, $config->getClass());
166
        $this->assertCount(3, $config->getArguments());
167
168
        /** @var Definition $signer */
169
        $signer = $config->getArgument(0);
170
        $this->assertEquals(Sha256::class, $signer->getClass());
171
172
        $this->assertContainerBuilderHasService('damax.api_auth.jwt.handler');
173
174
        /** @var Definition $builder */
175
        $builder = $this->container
176
            ->getDefinition('damax.api_auth.jwt.handler')
177
            ->getArgument(0)
178
        ;
179
        $this->assertEquals(Builder::class, $builder->getClass());
180
        $this->assertSame($config, $builder->getArgument(0));
181
182
        // Claims
183
        $this->assertContainerBuilderHasServiceDefinitionWithArgument(TimestampClaims::class, 0);
184
        $this->assertContainerBuilderHasServiceDefinitionWithArgument(TimestampClaims::class, 1, 600);
185
        $this->assertContainerBuilderHasServiceDefinitionWithTag(TimestampClaims::class, 'damax.api_auth.jwt_claims');
186
        $this->assertContainerBuilderHasServiceDefinitionWithArgument(OrganizationClaims::class, 0, 'damax');
187
        $this->assertContainerBuilderHasServiceDefinitionWithArgument(OrganizationClaims::class, 1, 'zend');
188
        $this->assertContainerBuilderHasServiceDefinitionWithTag(OrganizationClaims::class, 'damax.api_auth.jwt_claims');
189
        $this->assertContainerBuilderHasService(SecurityClaims::class);
190
        $this->assertContainerBuilderHasServiceDefinitionWithTag(SecurityClaims::class, 'damax.api_auth.jwt_claims');
191
192
        unlink($key);
193
    }
194
195
    protected function getContainerExtensions(): array
196
    {
197
        return [
198
            new DamaxApiAuthExtension(),
199
        ];
200
    }
201
}
202