Skip to content

Commit 876c49f

Browse files
committed
Header Checker support added
1 parent 7c31d67 commit 876c49f

File tree

5 files changed

+127
-1
lines changed

5 files changed

+127
-1
lines changed

src/Bundle/Checker/DependencyInjection/Source/ClaimChecker.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
use Symfony\Component\DependencyInjection\Reference;
2323

2424
/**
25-
* Class JWSLoader.
25+
* Class ClaimChecker.
2626
*/
2727
final class ClaimChecker implements SourceInterface
2828
{
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/*
6+
* The MIT License (MIT)
7+
*
8+
* Copyright (c) 2014-2017 Spomky-Labs
9+
*
10+
* This software may be modified and distributed under the terms
11+
* of the MIT license. See the LICENSE file for details.
12+
*/
13+
14+
namespace Jose\Bundle\Checker\DependencyInjection\Source;
15+
16+
use Jose\Bundle\JoseFramework\DependencyInjection\Source\SourceInterface;
17+
use Jose\Component\Checker\HeaderCheckerManagerFactory;
18+
use Jose\Component\Signature\JWSLoader as JWSLoaderService;
19+
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
20+
use Symfony\Component\DependencyInjection\ContainerBuilder;
21+
use Symfony\Component\DependencyInjection\Definition;
22+
use Symfony\Component\DependencyInjection\Reference;
23+
24+
/**
25+
* Class HeaderChecker.
26+
*/
27+
final class HeaderChecker implements SourceInterface
28+
{
29+
/**
30+
* {@inheritdoc}
31+
*/
32+
public function name(): string
33+
{
34+
return 'header_checkers';
35+
}
36+
37+
/**
38+
* {@inheritdoc}
39+
*/
40+
public function load(array $configs, ContainerBuilder $container)
41+
{
42+
$this->createService($configs[$this->name()], $container);
43+
}
44+
45+
/**
46+
* {@inheritdoc}
47+
*/
48+
private function createService(array $config, ContainerBuilder $container)
49+
{
50+
foreach ($config as $name => $itemConfig) {
51+
$service_id = sprintf('jose.header_checker.%s', $name);
52+
$definition = new Definition(JWSLoaderService::class);
53+
$definition
54+
->setFactory([new Reference(HeaderCheckerManagerFactory::class), 'create'])
55+
->setArguments([
56+
$itemConfig['headers'],
57+
])
58+
->setPublic($itemConfig['is_public']);
59+
60+
$container->setDefinition($service_id, $definition);
61+
}
62+
}
63+
64+
/**
65+
* {@inheritdoc}
66+
*/
67+
public function getNodeDefinition(ArrayNodeDefinition $node)
68+
{
69+
$node
70+
->children()
71+
->arrayNode($this->name())
72+
->useAttributeAsKey('name')
73+
->prototype('array')
74+
->children()
75+
->booleanNode('is_public')
76+
->info('If true, the service will be public, else private.')
77+
->defaultTrue()
78+
->end()
79+
->arrayNode('headers')
80+
->useAttributeAsKey('name')
81+
->isRequired()
82+
->prototype('scalar')->end()
83+
->end()
84+
->end()
85+
->end()
86+
->end()
87+
->end();
88+
}
89+
90+
/**
91+
* {@inheritdoc}
92+
*/
93+
public function prepend(ContainerBuilder $container, array $config): ?array
94+
{
95+
return null;
96+
}
97+
}

src/Bundle/Checker/Resources/config/checkers.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@ services:
88
Jose\Component\Checker\ClaimCheckerManagerFactory: ~
99

1010
Jose\Component\Checker\ExpirationTimeChecker:
11+
public: false
1112
tags:
1213
- { name: 'jose.checker.header', alias: 'exp' }
1314
- { name: 'jose.checker.claim', alias: 'exp' }
1415

1516
Jose\Component\Checker\IssuedAtChecker:
17+
public: false
1618
tags:
1719
- { name: 'jose.checker.header', alias: 'iat' }
1820
- { name: 'jose.checker.claim', alias: 'iat' }
1921

2022
Jose\Component\Checker\NotBeforeChecker:
23+
public: false
2124
tags:
2225
- { name: 'jose.checker.header', alias: 'nbf' }
2326
- { name: 'jose.checker.claim', alias: 'nbf' }

src/Bundle/JoseFramework/DependencyInjection/JoseFrameworkExtension.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use Http\HttplugBundle\HttplugBundle;
1717
use Jose\Bundle\Checker\DependencyInjection\Source\ClaimChecker;
18+
use Jose\Bundle\Checker\DependencyInjection\Source\HeaderChecker;
1819
use Jose\Bundle\Encryption\DependencyInjection\Source\JWEBuilder;
1920
use Jose\Bundle\Encryption\DependencyInjection\Source\JWELoader;
2021
use Jose\Bundle\JoseFramework\DependencyInjection\Source\SourceInterface;
@@ -124,6 +125,9 @@ private function addDefaultSources()
124125
if (class_exists(ClaimChecker::class)) {
125126
$this->addSource(new ClaimChecker());
126127
}
128+
if (class_exists(HeaderChecker::class)) {
129+
$this->addSource(new HeaderChecker());
130+
}
127131
if (class_exists(JWSBuilder::class)) {
128132
$this->addSource(new JWSBuilder());
129133
}

src/Bundle/JoseFramework/Helper/ConfigurationHelper.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,28 @@ public static function addClaimChecker(ContainerBuilder $container, string $name
9191
self::updateJoseConfiguration($container, $config, 'claim_checkers');
9292
}
9393

94+
/**
95+
* @param ContainerBuilder $container
96+
* @param string $name
97+
* @param string[] $headerCheckers
98+
* @param bool $is_public
99+
*/
100+
public static function addHeaderChecker(ContainerBuilder $container, string $name, array $headerCheckers, bool $is_public = true)
101+
{
102+
$config = [
103+
self::BUNDLE_ALIAS => [
104+
'header_checkers' => [
105+
$name => [
106+
'is_public' => $is_public,
107+
'headers' => $headerCheckers,
108+
],
109+
],
110+
],
111+
];
112+
113+
self::updateJoseConfiguration($container, $config, 'header_checkers');
114+
}
115+
94116
/**
95117
* @param ContainerBuilder $container
96118
* @param string $name

0 commit comments

Comments
 (0)