Initial commit: CloudOps infrastructure platform
This commit is contained in:
@@ -0,0 +1,273 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'menu' => [
|
||||
'admin' => [
|
||||
'mautic.user_management' => [
|
||||
'id' => 'mautic_user_management_root',
|
||||
'priority' => 17,
|
||||
'access' => ['user:users:view', 'user:roles:view'],
|
||||
],
|
||||
'mautic.user.users' => [
|
||||
'access' => 'user:users:view',
|
||||
'route' => 'mautic_user_index',
|
||||
'parent' => 'mautic.user_management',
|
||||
'iconClass' => 'ri-user-settings-line',
|
||||
],
|
||||
'mautic.user.roles' => [
|
||||
'access' => 'user:roles:view',
|
||||
'route' => 'mautic_role_index',
|
||||
'parent' => 'mautic.user_management',
|
||||
'iconClass' => 'ri-shield-user-line',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'routes' => [
|
||||
'main' => [
|
||||
'login' => [
|
||||
'path' => '/login',
|
||||
'controller' => 'Mautic\UserBundle\Controller\SecurityController::loginAction',
|
||||
],
|
||||
'mautic_user_logincheck' => [
|
||||
'path' => '/login_check',
|
||||
'controller' => 'Mautic\UserBundle\Controller\SecurityController::loginCheckAction',
|
||||
],
|
||||
'mautic_user_logout' => [
|
||||
'path' => '/logout',
|
||||
],
|
||||
'mautic_sso_login' => [
|
||||
'path' => '/sso_login/{integration}',
|
||||
'controller' => 'Mautic\UserBundle\Controller\SecurityController::ssoLoginAction',
|
||||
],
|
||||
'mautic_sso_login_check' => [
|
||||
'path' => '/sso_login_check/{integration}',
|
||||
'controller' => 'Mautic\UserBundle\Controller\SecurityController::ssoLoginCheckAction',
|
||||
],
|
||||
'lightsaml_sp.login' => [
|
||||
'path' => '/saml/login',
|
||||
'controller' => 'LightSaml\SpBundle\Controller\DefaultController::loginAction',
|
||||
],
|
||||
'lightsaml_sp.login_check' => [
|
||||
'path' => '/saml/login_check',
|
||||
],
|
||||
'mautic_user_index' => [
|
||||
'path' => '/users/{page}',
|
||||
'controller' => 'Mautic\UserBundle\Controller\UserController::indexAction',
|
||||
],
|
||||
'mautic_user_action' => [
|
||||
'path' => '/users/{objectAction}/{objectId}',
|
||||
'controller' => 'Mautic\UserBundle\Controller\UserController::executeAction',
|
||||
],
|
||||
'mautic_role_index' => [
|
||||
'path' => '/roles/{page}',
|
||||
'controller' => 'Mautic\UserBundle\Controller\RoleController::indexAction',
|
||||
],
|
||||
'mautic_role_action' => [
|
||||
'path' => '/roles/{objectAction}/{objectId}',
|
||||
'controller' => 'Mautic\UserBundle\Controller\RoleController::executeAction',
|
||||
],
|
||||
'mautic_user_account' => [
|
||||
'path' => '/account',
|
||||
'controller' => 'Mautic\UserBundle\Controller\ProfileController::indexAction',
|
||||
],
|
||||
],
|
||||
|
||||
'api' => [
|
||||
'mautic_api_usersstandard' => [
|
||||
'standard_entity' => true,
|
||||
'name' => 'users',
|
||||
'path' => '/users',
|
||||
'controller' => Mautic\UserBundle\Controller\Api\UserApiController::class,
|
||||
],
|
||||
'mautic_api_getself' => [
|
||||
'path' => '/users/self',
|
||||
'controller' => 'Mautic\UserBundle\Controller\Api\UserApiController::getSelfAction',
|
||||
],
|
||||
'mautic_api_checkpermission' => [
|
||||
'path' => '/users/{id}/permissioncheck',
|
||||
'controller' => 'Mautic\UserBundle\Controller\Api\UserApiController::isGrantedAction',
|
||||
'method' => 'POST',
|
||||
],
|
||||
'mautic_api_getuserroles' => [
|
||||
'path' => '/users/list/roles',
|
||||
'controller' => 'Mautic\UserBundle\Controller\Api\UserApiController::getRolesAction',
|
||||
],
|
||||
'mautic_api_rolesstandard' => [
|
||||
'standard_entity' => true,
|
||||
'name' => 'roles',
|
||||
'path' => '/roles',
|
||||
'controller' => Mautic\UserBundle\Controller\Api\RoleApiController::class,
|
||||
],
|
||||
],
|
||||
'public' => [
|
||||
'mautic_user_passwordreset' => [
|
||||
'path' => '/passwordreset',
|
||||
'controller' => 'Mautic\UserBundle\Controller\PublicController::passwordResetAction',
|
||||
],
|
||||
'mautic_user_passwordresetconfirm' => [
|
||||
'path' => '/passwordresetconfirm',
|
||||
'controller' => 'Mautic\UserBundle\Controller\PublicController::passwordResetConfirmAction',
|
||||
],
|
||||
'lightsaml_sp.metadata' => [
|
||||
'path' => '/saml/metadata.xml',
|
||||
'controller' => 'LightSaml\SpBundle\Controller\DefaultController::metadataAction',
|
||||
],
|
||||
'lightsaml_sp.discovery' => [
|
||||
'path' => '/saml/discovery',
|
||||
'controller' => 'LightSaml\SpBundle\Controller\DefaultController::discoveryAction',
|
||||
],
|
||||
'mautic_saml_login_retry' => [
|
||||
'path' => '/saml/login_retry',
|
||||
'controller' => 'Mautic\UserBundle\Controller\SecurityController::samlLoginRetryAction',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'services' => [
|
||||
'other' => [
|
||||
// Authentication
|
||||
'mautic.user.manager' => [
|
||||
'class' => Doctrine\ORM\EntityManager::class,
|
||||
'arguments' => Mautic\UserBundle\Entity\User::class,
|
||||
'factory' => ['@doctrine', 'getManagerForClass'],
|
||||
],
|
||||
'mautic.permission.manager' => [
|
||||
'class' => Doctrine\ORM\EntityManager::class,
|
||||
'arguments' => Mautic\UserBundle\Entity\Permission::class,
|
||||
'factory' => ['@doctrine', 'getManagerForClass'],
|
||||
],
|
||||
'mautic.user.provider' => [
|
||||
'class' => Mautic\UserBundle\Security\Provider\UserProvider::class,
|
||||
'arguments' => [
|
||||
'mautic.user.repository',
|
||||
'mautic.permission.repository',
|
||||
'event_dispatcher',
|
||||
'security.password_hasher',
|
||||
],
|
||||
],
|
||||
'mautic.security.authentication_handler' => [
|
||||
'class' => Mautic\UserBundle\Security\Authentication\AuthenticationHandler::class,
|
||||
'arguments' => [
|
||||
'router',
|
||||
],
|
||||
],
|
||||
'mautic.security.logout_handler' => [
|
||||
'class' => Mautic\UserBundle\EventListener\LogoutListener::class,
|
||||
'tagArguments' => [
|
||||
'event' => Symfony\Component\Security\Http\Event\LogoutEvent::class,
|
||||
],
|
||||
'tag' => 'kernel.event_listener',
|
||||
'arguments' => [
|
||||
'mautic.user.model.user',
|
||||
'event_dispatcher',
|
||||
'mautic.helper.user',
|
||||
],
|
||||
],
|
||||
|
||||
// SAML
|
||||
'mautic.security.saml.credential_store' => [
|
||||
'class' => Mautic\UserBundle\Security\SAML\Store\CredentialsStore::class,
|
||||
'arguments' => [
|
||||
'mautic.helper.core_parameters',
|
||||
'%mautic.saml_idp_entity_id%',
|
||||
],
|
||||
'tag' => 'lightsaml.own_credential_store',
|
||||
],
|
||||
|
||||
'mautic.security.saml.trust_store' => [
|
||||
'class' => Mautic\UserBundle\Security\SAML\Store\TrustOptionsStore::class,
|
||||
'arguments' => [
|
||||
'mautic.helper.core_parameters',
|
||||
'%mautic.saml_idp_entity_id%',
|
||||
],
|
||||
'tag' => 'lightsaml.trust_options_store',
|
||||
],
|
||||
|
||||
'mautic.security.saml.entity_descriptor_provider' => [
|
||||
'class' => LightSaml\Builder\EntityDescriptor\SimpleEntityDescriptorBuilder::class,
|
||||
'factory' => [Mautic\UserBundle\Security\SAML\EntityDescriptorProviderFactory::class, 'build'],
|
||||
'arguments' => [
|
||||
'%lightsaml.own.entity_id%',
|
||||
'router',
|
||||
'%lightsaml.route.login_check%',
|
||||
'lightsaml.own.credential_store',
|
||||
],
|
||||
],
|
||||
|
||||
'mautic.security.saml.entity_descriptor_store' => [
|
||||
'class' => Mautic\UserBundle\Security\SAML\Store\EntityDescriptorStore::class,
|
||||
'arguments' => [
|
||||
'mautic.helper.core_parameters',
|
||||
],
|
||||
'tag' => 'lightsaml.idp_entity_store',
|
||||
],
|
||||
|
||||
'mautic.security.saml.id_store' => [
|
||||
'class' => Mautic\UserBundle\Security\SAML\Store\IdStore::class,
|
||||
'arguments' => [
|
||||
'doctrine.orm.entity_manager',
|
||||
'lightsaml.system.time_provider',
|
||||
],
|
||||
],
|
||||
|
||||
'mautic.security.saml.username_mapper' => [
|
||||
'class' => Mautic\UserBundle\Security\SAML\User\UserMapper::class,
|
||||
'arguments' => [
|
||||
[
|
||||
'email' => '%mautic.saml_idp_email_attribute%',
|
||||
'username' => '%mautic.saml_idp_username_attribute%',
|
||||
'firstname' => '%mautic.saml_idp_firstname_attribute%',
|
||||
'lastname' => '%mautic.saml_idp_lastname_attribute%',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'mautic.security.saml.user_creator' => [
|
||||
'class' => Mautic\UserBundle\Security\SAML\User\UserCreator::class,
|
||||
'arguments' => [
|
||||
'doctrine.orm.entity_manager',
|
||||
'mautic.security.saml.username_mapper',
|
||||
'mautic.user.model.user',
|
||||
'security.password_hasher',
|
||||
'%mautic.saml_idp_default_role%',
|
||||
],
|
||||
],
|
||||
'mautic.security.user_token_setter' => [
|
||||
'class' => Mautic\UserBundle\Security\UserTokenSetter::class,
|
||||
'arguments' => ['mautic.user.model.user', 'security.token_storage'],
|
||||
],
|
||||
'mautic.user.model.user_token_service' => [
|
||||
'class' => Mautic\UserBundle\Model\UserToken\UserTokenService::class,
|
||||
'arguments' => [
|
||||
'mautic.helper.random',
|
||||
'mautic.user.repository.user_token',
|
||||
],
|
||||
],
|
||||
],
|
||||
'fixtures' => [
|
||||
'mautic.user.fixture.role' => [
|
||||
'class' => Mautic\UserBundle\DataFixtures\ORM\LoadRoleData::class,
|
||||
'tag' => Doctrine\Bundle\FixturesBundle\DependencyInjection\CompilerPass\FixturesCompilerPass::FIXTURE_TAG,
|
||||
'arguments' => ['mautic.user.model.role'],
|
||||
],
|
||||
'mautic.user.fixture.user' => [
|
||||
'class' => Mautic\UserBundle\DataFixtures\ORM\LoadUserData::class,
|
||||
'tag' => Doctrine\Bundle\FixturesBundle\DependencyInjection\CompilerPass\FixturesCompilerPass::FIXTURE_TAG,
|
||||
'arguments' => ['security.password_hasher'],
|
||||
],
|
||||
],
|
||||
],
|
||||
'parameters' => [
|
||||
'saml_idp_metadata' => '',
|
||||
'saml_idp_entity_id' => '',
|
||||
'saml_idp_own_certificate' => '',
|
||||
'saml_idp_own_private_key' => '',
|
||||
'saml_idp_own_password' => '',
|
||||
'saml_idp_email_attribute' => '',
|
||||
'saml_idp_username_attribute' => '',
|
||||
'saml_idp_firstname_attribute' => '',
|
||||
'saml_idp_lastname_attribute' => '',
|
||||
'saml_idp_default_role' => '',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Mautic\CoreBundle\DependencyInjection\MauticCoreExtension;
|
||||
use Mautic\UserBundle\EventListener\ApiUserSubscriber;
|
||||
use Mautic\UserBundle\Security\Authentication\Token\Permissions\TokenPermissions;
|
||||
use Mautic\UserBundle\Security\Authenticator\PluginAuthenticator;
|
||||
use Mautic\UserBundle\Security\Authenticator\SsoAuthenticator;
|
||||
use Mautic\UserBundle\Security\EntryPoint\MainEntryPoint;
|
||||
|
||||
use function Symfony\Component\DependencyInjection\Loader\Configurator\abstract_arg;
|
||||
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
|
||||
|
||||
return function (ContainerConfigurator $configurator): void {
|
||||
$services = $configurator->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
|
||||
]);
|
||||
};
|
||||
Reference in New Issue
Block a user