diff --git a/composer.lock b/composer.lock index 2079642d6ff9f19d2d44f1cbf8eb1485deae238f..ac64c22b95348e0604833fa74df3e2a16e05debb 100644 --- a/composer.lock +++ b/composer.lock @@ -348,11 +348,11 @@ }, { "name": "dbp/relay-base-person-bundle", - "version": "v0.2.6", + "version": "v0.2.8", "source": { "type": "git", "url": "https://gitlab.tugraz.at/dbp/relay/dbp-relay-base-person-bundle", - "reference": "d0fbe7236914d9f5343366cd50d6903c41446758" + "reference": "8d145411476f522f867dbd7442f7a5fbd91e6f68" }, "require": { "api-platform/core": "^2.6.3", @@ -393,15 +393,15 @@ "license": [ "AGPL-3.0-or-later" ], - "time": "2022-11-24T08:50:01+00:00" + "time": "2022-11-30T12:35:39+00:00" }, { "name": "dbp/relay-core-bundle", - "version": "v0.1.61", + "version": "v0.1.63", "source": { "type": "git", "url": "https://gitlab.tugraz.at/dbp/relay/dbp-relay-core-bundle", - "reference": "996fc7d43361720e3749401fd0f005ed3d97404b" + "reference": "3c696f31a84b65cec38a975d4adaf64e3bc2fdcb" }, "require": { "api-platform/core": "^2.6.8 <2.7.0", @@ -465,7 +465,7 @@ "AGPL-3.0-or-later" ], "description": "The core bundle of the Relay API gateway", - "time": "2022-11-23T12:35:13+00:00" + "time": "2022-11-30T12:11:21+00:00" }, { "name": "doctrine/annotations", diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 24e185fa541c244b517c67bacb5743a47312c21a..1f94e8bb3d6979b96fd264a74f371fd20155e87d 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Dbp\Relay\BasePersonConnectorLdapBundle\DependencyInjection; +use Dbp\Relay\BasePersonConnectorLdapBundle\EventSubscriber\PersonPostEventSubscriber; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; @@ -20,29 +21,30 @@ class Configuration implements ConfigurationInterface $ldapBuilder = new TreeBuilder('ldap'); $ldapNode = $ldapBuilder->getRootNode() ->children() - ->scalarNode('host')->end() - ->scalarNode('base_dn')->end() - ->scalarNode('username')->end() - ->scalarNode('password')->end() - ->enumNode('encryption') - ->info('simple_tls uses port 636 and is sometimes referred to as "SSL", start_tls uses port 389 and is sometimes referred to as "TLS", plain means none') - ->values(['start_tls', 'simple_tls', 'plain']) - ->defaultValue('start_tls') - ->end() + ->scalarNode('host')->end() + ->scalarNode('base_dn')->end() + ->scalarNode('username')->end() + ->scalarNode('password')->end() + ->enumNode('encryption') + ->info('simple_tls uses port 636 and is sometimes referred to as "SSL", start_tls uses port 389 and is sometimes referred to as "TLS", plain means none') + ->values(['start_tls', 'simple_tls', 'plain']) + ->defaultValue('start_tls') + ->end() ->end(); $attributesBuilder = new TreeBuilder('attributes'); $attributesNode = $attributesBuilder->getRootNode() ->children() - ->scalarNode('identifier')->end() - ->scalarNode('given_name')->end() - ->scalarNode('family_name')->end() - ->scalarNode('email')->end() - ->scalarNode('birthday')->end() + ->scalarNode('identifier')->end() + ->scalarNode('given_name')->end() + ->scalarNode('family_name')->end() + ->scalarNode('email')->end() + ->scalarNode('birthday')->end() ->end(); - $ldapNode->append($attributesNode); + $ldapNode->append($attributesNode); $rootNode->append($ldapNode); + $rootNode->append(PersonPostEventSubscriber::getConfigNode()); return $treeBuilder; } diff --git a/src/DependencyInjection/DbpRelayBasePersonConnectorLdapExtension.php b/src/DependencyInjection/DbpRelayBasePersonConnectorLdapExtension.php index 8155ad0c53e69f81f857aeae10b350af1de1dc96..695787d3fac0e35717011e80638b8212ec705a5d 100644 --- a/src/DependencyInjection/DbpRelayBasePersonConnectorLdapExtension.php +++ b/src/DependencyInjection/DbpRelayBasePersonConnectorLdapExtension.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Dbp\Relay\BasePersonConnectorLdapBundle\DependencyInjection; +use Dbp\Relay\BasePersonConnectorLdapBundle\EventSubscriber\PersonPostEventSubscriber; +use Dbp\Relay\BasePersonConnectorLdapBundle\Service\LDAPApi; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -30,10 +32,13 @@ class DbpRelayBasePersonConnectorLdapExtension extends ConfigurableExtension $personCacheDef->addTag('cache.pool'); // Inject the config value into the UCardService service - $definition = $container->getDefinition('Dbp\Relay\BasePersonConnectorLdapBundle\Service\LDAPApi'); + $definition = $container->getDefinition(LDAPApi::class); $definition->addMethodCall('setConfig', [$mergedConfig]); $definition->addMethodCall('setLDAPCache', [$ldapCache, 360]); $definition->addMethodCall('setPersonCache', [$personCacheDef]); + + $postEventSubscriber = $container->getDefinition(PersonPostEventSubscriber::class); + $postEventSubscriber->addMethodCall('setConfig', [$mergedConfig]); } private function extendArrayParameter(ContainerBuilder $container, string $parameter, array $values) diff --git a/src/Event/PersonPreEvent.php b/src/Event/PersonPreEvent.php index fe7d76d2d9b9dfe10f3f6c12b93dcb8df0c9b9f5..93105a05238712a07d88f1e6ceaa14d4313486d5 100644 --- a/src/Event/PersonPreEvent.php +++ b/src/Event/PersonPreEvent.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Dbp\Relay\BasePersonConnectorLdapBundle\Event; -use Dbp\Relay\CoreBundle\LocalData\LocalDataAwarePreEvent; +use Dbp\Relay\CoreBundle\LocalData\LocalDataPreEvent; -class PersonPreEvent extends LocalDataAwarePreEvent +class PersonPreEvent extends LocalDataPreEvent { public const NAME = 'dbp.relay.base_person_connector_ldap_bundle.person_event.pre'; } diff --git a/src/EventSubscriber/PersonPostEventSubscriber.php b/src/EventSubscriber/PersonPostEventSubscriber.php new file mode 100644 index 0000000000000000000000000000000000000000..1deebde2277bf3cee745905f15f41fea90e851a6 --- /dev/null +++ b/src/EventSubscriber/PersonPostEventSubscriber.php @@ -0,0 +1,16 @@ +<?php + +declare(strict_types=1); + +namespace Dbp\Relay\BasePersonConnectorLdapBundle\EventSubscriber; + +use Dbp\Relay\BasePersonBundle\Event\PersonProviderPostEvent; +use Dbp\Relay\CoreBundle\LocalData\AbstractLocalDataPostEventSubscriber; + +class PersonPostEventSubscriber extends AbstractLocalDataPostEventSubscriber +{ + public static function getSubscribedEventName(): string + { + return PersonProviderPostEvent::NAME; + } +} diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index c5bd7a0945820ac9352b038d092caa681269cda1..89f2868c3ae1539755d5fa1958a338e354352ff7 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -4,5 +4,9 @@ services: autowire: true autoconfigure: true + Dbp\Relay\BasePersonConnectorLdapBundle\EventSubscriber\PersonPostEventSubscriber: + autowire: true + autoconfigure: true + Dbp\Relay\BasePersonBundle\API\PersonProviderInterface: '@Dbp\Relay\BasePersonConnectorLdapBundle\Service\LDAPPersonProvider' diff --git a/src/Service/LDAPApi.php b/src/Service/LDAPApi.php index a1638ce14e0e3510d03bbf1944255b5dbff944f5..b0174d83583f298dea550e092961c86dd303c472 100644 --- a/src/Service/LDAPApi.php +++ b/src/Service/LDAPApi.php @@ -22,7 +22,7 @@ use Dbp\Relay\BasePersonConnectorLdapBundle\Event\PersonUserItemPreEvent; use Dbp\Relay\CoreBundle\API\UserSessionInterface; use Dbp\Relay\CoreBundle\Exception\ApiError; use Dbp\Relay\CoreBundle\Helpers\Tools as CoreTools; -use Dbp\Relay\CoreBundle\LocalData\LocalDataAwareEventDispatcher; +use Dbp\Relay\CoreBundle\LocalData\LocalDataEventDispatcher; use Psr\Cache\CacheItemPoolInterface; use Psr\Container\ContainerInterface; use Psr\Log\LoggerAwareInterface; @@ -66,7 +66,7 @@ class LDAPApi implements LoggerAwareInterface, ServiceSubscriberInterface private $birthdayAttributeName; - /** @var LocalDataAwareEventDispatcher */ + /** @var LocalDataEventDispatcher */ private $eventDispatcher; public function __construct(ContainerInterface $locator, EventDispatcherInterface $dispatcher) @@ -76,7 +76,7 @@ class LDAPApi implements LoggerAwareInterface, ServiceSubscriberInterface $this->currentPerson = null; $this->locator = $locator; $this->deploymentEnv = 'production'; - $this->eventDispatcher = new LocalDataAwareEventDispatcher(Person::class, $dispatcher); + $this->eventDispatcher = new LocalDataEventDispatcher(Person::class, $dispatcher); } public function setConfig(array $config) @@ -312,10 +312,10 @@ class LDAPApi implements LoggerAwareInterface, ServiceSubscriberInterface } } - $postEvent = new PersonProviderPostEvent($attributes, $person); + $postEvent = new PersonProviderPostEvent($person, $attributes); $this->eventDispatcher->dispatch($postEvent, PersonProviderPostEvent::NAME); - return $postEvent->getEntity(); + return $person; } /** diff --git a/src/TestUtils/PersonFromUserItemSubscriber.php b/src/TestUtils/PersonFromUserItemSubscriber.php index d771d62b13970a3dcb3b23d7a62252ec35f587b3..0c5acadd5561a4fc7bb62532e551c84e41e86992 100644 --- a/src/TestUtils/PersonFromUserItemSubscriber.php +++ b/src/TestUtils/PersonFromUserItemSubscriber.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Dbp\Relay\BasePersonConnectorLdapBundle\TestUtils; +use Dbp\Relay\BasePersonBundle\Entity\Person; use Dbp\Relay\BasePersonBundle\Event\PersonProviderPostEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -19,6 +20,8 @@ class PersonFromUserItemSubscriber implements EventSubscriberInterface public function onPost(PersonProviderPostEvent $event) { $person = $event->getEntity(); - $person->setExtraData('test', 'my-test-string'); + if ($person instanceof Person) { + $person->setExtraData('test', 'my-test-string'); + } } } diff --git a/tests/PersonTest.php b/tests/PersonTest.php index 62e9c0b8b3a5896d001ce4a5f4e98975e36b66a8..95ef315a135a68ef9760bd79883acf1e1f22cb8c 100644 --- a/tests/PersonTest.php +++ b/tests/PersonTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tugraz\Relay\TugrazBundle\Tests; +namespace Dbp\Relay\BasePersonConnectorLdapBundle\Tests; use Adldap\Connections\ConnectionInterface; use Adldap\Models\User as AdldapUser;