diff --git a/src/DependencyInjection/DbpKeycloakExtension.php b/src/DependencyInjection/DbpKeycloakExtension.php index ff02908744a723c667a75edff460397e44a4b40c..cd5e56c9f32ce3703061cd71fe560f51f4e5b797 100644 --- a/src/DependencyInjection/DbpKeycloakExtension.php +++ b/src/DependencyInjection/DbpKeycloakExtension.php @@ -7,10 +7,11 @@ namespace DBP\API\KeycloakBundle\DependencyInjection; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension; -class DbpKeycloakExtension extends ConfigurableExtension +class DbpKeycloakExtension extends ConfigurableExtension implements PrependExtensionInterface { public function loadInternal(array $mergedConfig, ContainerBuilder $container) { @@ -25,7 +26,26 @@ class DbpKeycloakExtension extends ConfigurableExtension $certCacheDef->addTag('cache.pool'); $definition = $container->getDefinition('DBP\API\KeycloakBundle\Keycloak\KeycloakBearerUserProvider'); - $definition->addMethodCall('setConfig', [$mergedConfig['keycloak'] ?? []]); + $definition->addMethodCall('setConfig', [$mergedConfig]); $definition->addMethodCall('setCertCache', [$certCacheDef]); } + + public function prepend(ContainerBuilder $container) + { + $config = $container->getExtensionConfig($this->getAlias())[0]; + $this->extendArrayParameter($container, 'dbp_api.twig_globals', [ + 'keycloak_server_url' => $config['server_url'] ?? '', + 'keycloak_realm' => $config['realm'] ?? '', + 'keycloak_frontend_client_id' => $config['frontend_client_id'] ?? '', + ]); + } + + private function extendArrayParameter(ContainerBuilder $container, string $parameter, array $values) + { + if (!$container->hasParameter($parameter)) { + $container->setParameter($parameter, []); + } + $oldValues = $container->getParameter($parameter); + $container->setParameter($parameter, array_merge($oldValues, $values)); + } }