Skip to content
Snippets Groups Projects
Select Git revision
  • 3faa7dd5ea373fedc6fb635e18118aa67b2c2d3d
  • main default
  • keycloak-deprecate
  • remove-jwt-easy
  • ci-update
  • v0.1.15
  • v0.1.14
  • v0.1.13
  • v0.1.12
  • v0.1.11
  • v0.1.10
  • v0.1.9
  • v0.1.8
  • v0.1.7
  • v0.1.6
  • v0.1.5
  • v0.1.4
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
21 results

DbpRelayAuthExtension.php

  • DbpRelayAuthExtension.php 2.31 KiB
    <?php
    
    declare(strict_types=1);
    
    namespace Dbp\Relay\AuthBundle\DependencyInjection;
    
    use Dbp\Relay\AuthBundle\Authenticator\BearerUserProvider;
    use Dbp\Relay\AuthBundle\OIDC\OIDProvider;
    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 DbpRelayAuthExtension extends ConfigurableExtension implements PrependExtensionInterface
    {
        public function loadInternal(array $mergedConfig, ContainerBuilder $container)
        {
            $loader = new YamlFileLoader(
                $container,
                new FileLocator(__DIR__.'/../Resources/config')
            );
            $loader->load('services.yaml');
    
            $cacheDef = $container->register('dbp_api.cache.auth.oid_provider', FilesystemAdapter::class);
            $cacheDef->setArguments(['core-keycloak-cert', 60, '%kernel.cache_dir%/dbp/auth-oid-provider']);
            $cacheDef->addTag('cache.pool');
    
            $definition = $container->getDefinition(BearerUserProvider::class);
            $definition->addMethodCall('setConfig', [$mergedConfig]);
    
            $definition = $container->getDefinition(OIDProvider::class);
            $definition->addMethodCall('setConfig', [$mergedConfig]);
            $definition->addMethodCall('setCache', [$cacheDef]);
        }
    
        public function prepend(ContainerBuilder $container)
        {
            $config = $container->getExtensionConfig($this->getAlias())[0];
            $this->extendArrayParameter($container, 'dbp_api.twig_globals', [
                'keycloak_server_url' => $config['frontend_keycloak_server'] ?? '',
                'keycloak_realm' => $config['frontend_keycloak_realm'] ?? '',
                'keycloak_frontend_client_id' => $config['frontend_keycloak_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));
        }
    }