Initial commit: CloudOps infrastructure platform

This commit is contained in:
root
2026-04-09 19:58:57 +02:00
commit 1166a52f26
7762 changed files with 839452 additions and 0 deletions

View File

@@ -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' => '',
],
];

View File

@@ -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
]);
};