services() ->defaults() ->autowire() ->autoconfigure() ->public(); $excludes = [ ]; $services->load('Mautic\\UserBundle\\', '../') ->exclude('../{'.implode(',', array_merge(MauticCoreExtension::DEFAULT_EXCLUDES, $excludes)).'}'); $services->load('Mautic\\UserBundle\\Entity\\', '../Entity/*Repository.php') ->tag(Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG); $services->set(Mautic\UserBundle\ApiPlatform\UserProcessor::class) ->args([ service('api_platform.doctrine.orm.state.persist_processor'), service('security.user_password_hasher'), ]) ->tag('api_platform.state_processor'); $services->set('security.authenticator.mautic_sso', SsoAuthenticator::class) ->abstract() ->args([ '$httpUtils' => service('security.http_utils'), '$userProvider' => abstract_arg('user provider'), '$successHandler' => abstract_arg('authentication success handler'), '$failureHandler' => abstract_arg('authentication failure handler'), '$options' => abstract_arg('options'), ]); $services->set('security.authenticator.mautic_api', PluginAuthenticator::class) ->abstract() ->args([ '$oAuth2' => service('fos_oauth_server.server'), ]); $services->set(Mautic\UserBundle\Security\SAML\Helper::class); $services->set('security.token.permissions', TokenPermissions::class); $services->load('Mautic\\UserBundle\\Security\\EntryPoint\\', '../Security/EntryPoint/*.php'); $services->load('Mautic\\UserBundle\\Security\\Authentication\\Token\\Permissions\\', '../Security/Authentication/Token/Permissions/*.php'); $services->alias(Mautic\UserBundle\Entity\UserTokenRepositoryInterface::class, Mautic\UserBundle\Entity\UserTokenRepository::class); $services->alias('mautic.user.model.role', Mautic\UserBundle\Model\RoleModel::class); $services->alias('mautic.user.model.user', Mautic\UserBundle\Model\UserModel::class); $services->alias('mautic.user.repository.user_token', Mautic\UserBundle\Entity\UserTokenRepository::class); $services->alias('mautic.user.repository', Mautic\UserBundle\Entity\UserRepository::class); $services->alias('mautic.permission.repository', Mautic\UserBundle\Entity\PermissionRepository::class); $services->alias('mautic.user.model.password_strength_estimator', Mautic\UserBundle\Model\PasswordStrengthEstimatorModel::class); $services->get(Mautic\UserBundle\Form\Validator\Constraints\NotWeakValidator::class)->tag('validator.constraint_validator'); $services->load('Mautic\\UserBundle\\Security\\SAML\Store\\Request\\', '../Security/SAML/Store/Request/*.php'); $services->get(Mautic\UserBundle\Security\SAML\Store\Request\RequestStateStore::class) ->arg('$prefix', '%lightsaml.store.request_session_prefix%') ->arg('$suffix', '%lightsaml.store.request_session_sufix%'); $services->get(MainEntryPoint::class)->arg('$samlEnabled', '%env(MAUTIC_SAML_ENABLED)%'); $services->get(ApiUserSubscriber::class)->arg('$userProvider', service('security.user_providers')); // Below are fixes for autowiring of SAML SpBundle. $services->alias(LightSaml\SymfonyBridgeBundle\Bridge\Container\BuildContainer::class, 'lightsaml.container.build'); $services->load('LightSaml\\SpBundle\\Controller\\', '%kernel.project_dir%/vendor/javer/sp-bundle/src/LightSaml/SpBundle/Controller/*.php') ->tag('controller.service_arguments'); // Decorate the form_login class to ensure no user enumeration can // happen via timing attacks. $services->set('mautic.security.authenticator.form_login.decorator', Mautic\UserBundle\Security\TimingSafeFormLoginAuthenticator::class) ->decorate('security.authenticator.form_login.main') ->args([ service('.inner'), service('mautic.user.provider'), service('security.password_hasher_factory'), [], // This will be replaced by the compiler pass ]); };