Code development platform for open source projects from the European Union institutions

Verified Commit f54bb7de authored by Pol Dellaiera's avatar Pol Dellaiera
Browse files

refactor: Rewrite bundle for Symfony 5.4 and 6.0.

- Use Authenticator instead of Guard
- Use Badge instead of UserProvider
parent 61f02a5f
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -26,10 +26,12 @@ final class Token
                        'at' => JWT::encode(
                            (array) json_decode($request->getContent(), true) +
                            ['sub' => uniqid('user_'), 'active' => true],
                            uniqid()
                            uniqid(),
                            'HS256'
                        ),
                    ],
                    uniqid()
                    uniqid(),
                    'HS256'
                ),
            ],
            200
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ namespace EcPhp\EuLoginApiAuthenticationBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
final class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder(): TreeBuilder
    {
+1 −19
Original line number Diff line number Diff line
@@ -13,11 +13,10 @@ namespace EcPhp\EuLoginApiAuthenticationBundle\DependencyInjection;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;

class EuLoginApiAuthenticationExtension extends Extension implements PrependExtensionInterface
final class EuLoginApiAuthenticationExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container): void
    {
@@ -30,21 +29,4 @@ class EuLoginApiAuthenticationExtension extends Extension implements PrependExte
        $loader = new PhpFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
        $loader->load('services.php');
    }

    public function prepend(ContainerBuilder $container)
    {
        // Configure the symfony/security bundle
        // Add the API Gateway user provider.
        $container
            ->loadFromExtension(
                'security',
                [
                    'providers' => [
                        'eu_login_api_authentication' => [
                            'id' => 'eu_login_api_authentication.user_provider',
                        ],
                    ],
                ]
            );
    }
}
+21 −33
Original line number Diff line number Diff line
@@ -11,50 +11,38 @@ declare(strict_types=1);

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

use EcPhp\EuLoginApiAuthenticationBundle\Security\Core\User\EuLoginApiAuthenticationUserProvider;
use EcPhp\EuLoginApiAuthenticationBundle\Security\EuLoginApiAuthenticationGuardAuthenticator;
use EcPhp\EuLoginApiAuthenticationBundle\Security\EuLoginApiAuthenticationAuthenticator;
use EcPhp\EuLoginApiAuthenticationBundle\Service\EuLoginApiCredentials;
use EcPhp\EuLoginApiAuthenticationBundle\Service\EuLoginApiCredentialsInterface;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;

return static function (ContainerConfigurator $container) {
    $container
        ->services()
        ->set(PsrHttpFactory::class)
        ->autowire(true)
        ->autoconfigure(true);

    $container
        ->services()
    $services = $container
        ->services();

    $services
        ->defaults()
        ->autoconfigure(true)
        ->autowire(true);

    $services
        ->set(PsrHttpFactory::class);

    $services
        ->alias(HttpMessageFactoryInterface::class, PsrHttpFactory::class);

    $container
        ->services()
        ->set('eu_login_api_authentication.guard', EuLoginApiAuthenticationGuardAuthenticator::class)
        ->autowire(true)
        ->autoconfigure(true);
    $services
        ->set('eu_login_api_authentication.authenticator', EuLoginApiAuthenticationAuthenticator::class);

    $container
        ->services()
    $services
        ->set('eu_login_api_authentication.service', EuLoginApiCredentials::class)
        ->arg('$configuration', '%eu_login_api_authentication%')
        ->autowire(true)
        ->autoconfigure(true);

    $container
        ->services()
        ->set('eu_login_api_authentication.user_provider', EuLoginApiAuthenticationUserProvider::class)
        ->autowire(true)
        ->autoconfigure(true);

    $container
        ->services()
        ->arg('$configuration', '%eu_login_api_authentication%');

    $services
        ->alias(EuLoginApiCredentialsInterface::class, 'eu_login_api_authentication.service');

    $container
        ->services()->load('EcPhp\\EuLoginApiAuthenticationBundle\\Controller\\', __DIR__ . '/../../Controller')
        ->autowire(true)
        ->autoconfigure(true)
    $services
        ->load('EcPhp\\EuLoginApiAuthenticationBundle\\Controller\\', __DIR__ . '/../../Controller')
        ->tag('controller.service_arguments');
};
+16 −13
Original line number Diff line number Diff line
@@ -13,27 +13,25 @@ namespace EcPhp\EuLoginApiAuthenticationBundle\Security\Core\User;

final class EuLoginApiAuthenticationUser implements EuLoginApiAuthenticationUserInterface
{
    private string $identifier;

    /**
     * The user storage.
     *
     * @var array<mixed>
     */
    private array $storage;

    private string $sub;
    private array $payload;

    /**
     * @param array<mixed> $data
     * @param array<mixed> $payload
     */
    public function __construct(string $username, array $data = [])
    public function __construct(string $identifier, array $payload = [])
    {
        $this->storage = $data;
        $this->sub = $username;
        $this->payload = $payload;
        $this->identifier = $identifier;
    }

    public static function createFromPayload($username, array $payload)
    public static function createFromPayload($identifier, array $payload)
    {
        return new self($username, $payload);
        return new self($identifier, $payload);
    }

    public function eraseCredentials(): void
@@ -70,9 +68,14 @@ final class EuLoginApiAuthenticationUser implements EuLoginApiAuthenticationUser
        return null;
    }

    public function getUserIdentifier(): string
    {
        return $this->identifier;
    }

    public function getUsername(): string
    {
        return $this->sub;
        return $this->identifier;
    }

    /**
@@ -82,6 +85,6 @@ final class EuLoginApiAuthenticationUser implements EuLoginApiAuthenticationUser
     */
    private function getStorage(): array
    {
        return $this->storage;
        return $this->payload;
    }
}
Loading