Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
digitalascetic/base-user / DependencyInjection / DigitalAsceticBaseUserExtension.php
Size: Mime:
<?php

namespace DigitalAscetic\BaseUserBundle\DependencyInjection;

use DigitalAscetic\BaseUserBundle\Security\UserChecker;
use DigitalAscetic\BaseUserBundle\Security\UserProvider;
use DigitalAscetic\BaseUserBundle\Service\ResetPasswordService;
use DigitalAscetic\BaseUserBundle\Service\UserPasswordEncoderService;
use DigitalAscetic\BaseUserBundle\Service\UserService;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Reference;

class DigitalAsceticBaseUserExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new XmlFileLoader(
            $container,
            new FileLocator(__DIR__ . '/../../config')
        );

        $loader->load('services.xml');

        $config = $this->processConfiguration(new Configuration(), $configs);

        $userClass = $config['user_class'];
        $firewallName = $config['firewall_name'];
        $userEnabled = $config['user_enabled'];
        $retryTTL = $config['retry_reset_password_ttl'];

        $container->setParameter('digital_ascetic_base_user.firewall_name', $firewallName);

        $passEncoderService = new Definition(UserPasswordEncoderService::class);
        $passEncoderService->addArgument(new Reference('security.password_hasher'));
        $passEncoderService->addArgument($userClass);
        $container->setDefinition(UserPasswordEncoderService::SERVICE_NAME, $passEncoderService);
        $container->setAlias(UserPasswordEncoderService::class, UserPasswordEncoderService::SERVICE_NAME);

        $userService = new Definition(UserService::class);
        $userService->addArgument(new Reference('doctrine.orm.entity_manager'));
        $userService->addArgument(new Reference('security.password_hasher'));
        $userService->addArgument($userClass);
        $userService->addArgument($userEnabled);
        $userService->setPublic(false);
        $container->setDefinition(UserService::SERVICE_NAME, $userService);
        $container->setAlias(UserService::class, UserService::SERVICE_NAME);

        $resetService = new Definition(ResetPasswordService::class);
        $resetService->addArgument(new Reference('doctrine.orm.entity_manager'));
        $resetService->addArgument(new Reference('event_dispatcher'));
        $resetService->addArgument(new Reference(UserPasswordEncoderService::SERVICE_NAME));
        $resetService->addArgument($userClass);
        $resetService->addArgument($retryTTL);
        $container->setDefinition(ResetPasswordService::SERVICE_NAME, $resetService);
        $container->setAlias(ResetPasswordService::class, ResetPasswordService::SERVICE_NAME);

        $userProvider = new Definition(UserProvider::class);
        $userProvider->addArgument(new Reference(UserService::SERVICE_NAME));
        $container->setDefinition(UserProvider::SERVICE_NAME, $userProvider);
        $container->setAlias(UserProvider::class, UserProvider::SERVICE_NAME);

        $userChecker = new Definition(UserChecker::class);
        $userChecker->addArgument(new Reference('security.user_checker'));

        if ($firewallName) {
            $userChecker->addTag('security.user_checker.' . $firewallName);
        }

        $container->setDefinition(UserChecker::SERVICE_NAME, $userChecker);
        $container->setAlias(UserChecker::class, UserChecker::SERVICE_NAME);
    }
}