Skip to content

Commit 3130452

Browse files
author
Florent Morselli
committed
feat(core): introduce interfaces for the main services
None of the main services of the library was final and none of them had an interface: they could neither be relied upon as closed, nor be decorated. They were left open only because the bundle extends them to dispatch events, which is also why the state of the JWS and JWE builders is protected instead of private. Every service now implements an interface - JWSBuilderInterface, JWSVerifierInterface, JWSLoaderInterface, JWEBuilderInterface, JWEDecrypterInterface, JWELoaderInterface, NestedTokenBuilderInterface, NestedTokenLoaderInterface, ClaimCheckerManagerInterface and HeaderCheckerManagerInterface - and the library type-hints those interfaces internally, so that a decorator can be injected anywhere a service is expected. Extending the concrete classes is deprecated: they carry the @Final annotation and their constructor raises a deprecation notice. The bundle gains a decorator for every event dispatching service and deprecates the inheritance based ones, which keep their class names, their service ids and their behaviour. Each service is now also aliased with its interface, so that "MyInterface $fooJwsBuilder" can be autowired the same way the concrete class already was. The event dispatching verifier and decrypter of the bundle used to drop the callable the loaders pass as a sixth argument to observe the discarded keys, so the reason of a failure was lost as soon as the bundle services were used. They forward it now, as the new decorators do.
1 parent ea8000d commit 3130452

60 files changed

Lines changed: 2957 additions & 73 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.ci-tools/phpstan-baseline.neon

Lines changed: 477 additions & 27 deletions
Large diffs are not rendered by default.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Jose\Bundle\JoseFramework\DependencyInjection\Source\Source;
88
use Jose\Bundle\JoseFramework\Services\ClaimCheckerManager;
99
use Jose\Bundle\JoseFramework\Services\ClaimCheckerManagerFactory;
10+
use Jose\Component\Checker\ClaimCheckerManagerInterface;
1011
use Override;
1112
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
1213
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -42,6 +43,11 @@ public function load(array $configs, ContainerBuilder $container): void
4243
ClaimCheckerManager::class,
4344
$name . 'ClaimCheckerManager'
4445
);
46+
$container->registerAliasForArgument(
47+
$service_id,
48+
ClaimCheckerManagerInterface::class,
49+
$name . 'ClaimCheckerManager'
50+
);
4551
}
4652
}
4753

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Jose\Bundle\JoseFramework\DependencyInjection\Source\Source;
88
use Jose\Bundle\JoseFramework\Services\HeaderCheckerManager;
99
use Jose\Bundle\JoseFramework\Services\HeaderCheckerManagerFactory;
10+
use Jose\Component\Checker\HeaderCheckerManagerInterface;
1011
use Override;
1112
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
1213
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -42,6 +43,11 @@ public function load(array $configs, ContainerBuilder $container): void
4243
HeaderCheckerManager::class,
4344
$name . 'HeaderCheckerManager'
4445
);
46+
$container->registerAliasForArgument(
47+
$service_id,
48+
HeaderCheckerManagerInterface::class,
49+
$name . 'HeaderCheckerManager'
50+
);
4551
}
4652
}
4753

src/Bundle/DependencyInjection/Source/Encryption/JWEBuilder.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Jose\Bundle\JoseFramework\Services\JWEBuilderFactory;
88
use Jose\Component\Encryption\JWEBuilder as JWEBuilderService;
9+
use Jose\Component\Encryption\JWEBuilderInterface;
910
use Override;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
@@ -36,6 +37,7 @@ public function load(array $configs, ContainerBuilder $container): void
3637
}
3738
$container->setDefinition($service_id, $definition);
3839
$container->registerAliasForArgument($service_id, JWEBuilderService::class, $name . 'JweBuilder');
40+
$container->registerAliasForArgument($service_id, JWEBuilderInterface::class, $name . 'JweBuilder');
3941
}
4042
}
4143
}

src/Bundle/DependencyInjection/Source/Encryption/JWEDecrypter.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Jose\Bundle\JoseFramework\Services\JWEDecrypterFactory;
88
use Jose\Component\Encryption\JWEDecrypter as JWEDecrypterService;
9+
use Jose\Component\Encryption\JWEDecrypterInterface;
910
use Override;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
@@ -36,6 +37,7 @@ public function load(array $configs, ContainerBuilder $container): void
3637
}
3738
$container->setDefinition($service_id, $definition);
3839
$container->registerAliasForArgument($service_id, JWEDecrypterService::class, $name . 'JweDecrypter');
40+
$container->registerAliasForArgument($service_id, JWEDecrypterInterface::class, $name . 'JweDecrypter');
3941
}
4042
}
4143
}

src/Bundle/DependencyInjection/Source/Encryption/JWELoader.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Jose\Bundle\JoseFramework\DependencyInjection\Source\Source;
88
use Jose\Bundle\JoseFramework\Services\JWELoaderFactory;
99
use Jose\Component\Encryption\JWELoader as JWELoaderService;
10+
use Jose\Component\Encryption\JWELoaderInterface;
1011
use Override;
1112
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
1213
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -43,6 +44,7 @@ public function load(array $configs, ContainerBuilder $container): void
4344

4445
$container->setDefinition($service_id, $definition);
4546
$container->registerAliasForArgument($service_id, JWELoaderService::class, $name . 'JweLoader');
47+
$container->registerAliasForArgument($service_id, JWELoaderInterface::class, $name . 'JweLoader');
4648
}
4749
}
4850

src/Bundle/DependencyInjection/Source/NestedToken/NestedTokenBuilder.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Jose\Bundle\JoseFramework\DependencyInjection\Source\Source;
88
use Jose\Bundle\JoseFramework\Services\NestedTokenBuilderFactory;
99
use Jose\Component\NestedToken\NestedTokenBuilder as NestedTokenBuilderService;
10+
use Jose\Component\NestedToken\NestedTokenBuilderInterface;
1011
use Override;
1112
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
1213
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -47,6 +48,11 @@ public function load(array $configs, ContainerBuilder $container): void
4748
NestedTokenBuilderService::class,
4849
$name . 'NestedTokenBuilder'
4950
);
51+
$container->registerAliasForArgument(
52+
$service_id,
53+
NestedTokenBuilderInterface::class,
54+
$name . 'NestedTokenBuilder'
55+
);
5056
}
5157
}
5258

src/Bundle/DependencyInjection/Source/NestedToken/NestedTokenLoader.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Jose\Bundle\JoseFramework\DependencyInjection\Source\Source;
88
use Jose\Bundle\JoseFramework\Services\NestedTokenLoaderFactory;
99
use Jose\Component\NestedToken\NestedTokenLoader as NestedTokenLoaderService;
10+
use Jose\Component\NestedToken\NestedTokenLoaderInterface;
1011
use Override;
1112
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
1213
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -49,6 +50,11 @@ public function load(array $configs, ContainerBuilder $container): void
4950
NestedTokenLoaderService::class,
5051
$name . 'NestedTokenLoader'
5152
);
53+
$container->registerAliasForArgument(
54+
$service_id,
55+
NestedTokenLoaderInterface::class,
56+
$name . 'NestedTokenLoader'
57+
);
5258
}
5359
}
5460

src/Bundle/DependencyInjection/Source/Signature/JWSBuilder.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Jose\Bundle\JoseFramework\Services\JWSBuilderFactory;
88
use Jose\Component\Signature\JWSBuilder as JWSBuilderService;
9+
use Jose\Component\Signature\JWSBuilderInterface;
910
use Override;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
1112
use Symfony\Component\DependencyInjection\Definition;
@@ -36,6 +37,7 @@ public function load(array $configs, ContainerBuilder $container): void
3637
}
3738
$container->setDefinition($service_id, $definition);
3839
$container->registerAliasForArgument($service_id, JWSBuilderService::class, $name . 'JwsBuilder');
40+
$container->registerAliasForArgument($service_id, JWSBuilderInterface::class, $name . 'JwsBuilder');
3941
}
4042
}
4143
}

src/Bundle/DependencyInjection/Source/Signature/JWSLoader.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Jose\Bundle\JoseFramework\DependencyInjection\Source\Source;
88
use Jose\Bundle\JoseFramework\Services\JWSLoaderFactory;
99
use Jose\Component\Signature\JWSLoader as JWSLoaderService;
10+
use Jose\Component\Signature\JWSLoaderInterface;
1011
use Override;
1112
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
1213
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -43,6 +44,7 @@ public function load(array $configs, ContainerBuilder $container): void
4344

4445
$container->setDefinition($service_id, $definition);
4546
$container->registerAliasForArgument($service_id, JWSLoaderService::class, $name . 'JwsLoader');
47+
$container->registerAliasForArgument($service_id, JWSLoaderInterface::class, $name . 'JwsLoader');
4648
}
4749
}
4850

0 commit comments

Comments
 (0)