From 234ce5f956bd9208a3f5806df758d7cb03e1ecdc Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Wed, 21 Jul 2021 11:18:07 +0200
Subject: [PATCH] Inject a dbp_api.twig_globals parameter which the core bundle
 can use

We still depend on some keycloak vars in the api docs template, and I'm not sure
how to handle this in a separate bundle atm.
---
 .../DbpKeycloakExtension.php                  | 24 +++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/DependencyInjection/DbpKeycloakExtension.php b/src/DependencyInjection/DbpKeycloakExtension.php
index ff02908..cd5e56c 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));
+    }
 }
-- 
GitLab