tagName = $tagName; } public function process(ContainerBuilder $container): void { $mfaProviderRegistryDefinition = $container->findDefinition(MfaProviderRegistry::class); $providers = []; foreach ($container->findTaggedServiceIds($this->tagName) as $id => $tags) { $definition = $container->findDefinition($id); if (!$definition->isAutoconfigured() || $definition->isAbstract()) { continue; } $definition->setPublic(true); foreach ($tags as $attributes) { $identifier = $attributes['identifier'] ?? $id; $providers[$identifier] = [ 'title' => $attributes['title'] ?? '', 'description' => $attributes['description'] ?? '', 'setupInstructions' => $attributes['setupInstructions'] ?? '', 'iconIdentifier' => $attributes['icon'] ?? '', 'isDefaultProviderAllowed' => (bool)($attributes['defaultProviderAllowed'] ?? true), 'before' => GeneralUtility::trimExplode(',', $attributes['before'] ?? '', true), 'after' => GeneralUtility::trimExplode(',', $attributes['after'] ?? '', true), 'serviceName' => $id, ]; } } foreach ((new DependencyOrderingService())->orderByDependencies($providers) as $identifier => $properties) { $manifest = new Definition(MfaProviderManifest::class); $manifest->setArguments([ $identifier, $properties['title'], $properties['description'], $properties['setupInstructions'], $properties['iconIdentifier'], $properties['isDefaultProviderAllowed'], $properties['serviceName'], new Reference(ContainerInterface::class), ]); $manifest->setShared(false); $mfaProviderRegistryDefinition->addMethodCall('registerProvider', [$manifest]); } } }