From 62f751d886b4b9d7ba65526db9b6ca0809be4827 Mon Sep 17 00:00:00 2001 From: aynsix Date: Wed, 17 Nov 2021 17:55:10 +0300 Subject: [PATCH] add user.created webhook, merge user type --- .../Controller/Root/DeveloperController.php | 5 ++-- .../Subscriber/WebhookUserEventSubscriber.php | 19 +++++++++++-- .../Phrasea/Model/Entities/WebhookEvent.php | 7 +++-- .../Phrasea/Webhook/EventProcessorFactory.php | 4 ++- .../Processor/UserDeletedProcessorFactory.php | 24 ---------------- .../Webhook/Processor/UserProcessor.php | 28 +++++++++++++++++++ .../Processor/UserProcessorFactory.php | 15 ++++++++++ .../WebhookEventRepositoryTest.php | 2 +- .../Webhook/EventProcessorFactoryTest.php | 4 +++ 9 files changed, 75 insertions(+), 33 deletions(-) delete mode 100644 lib/Alchemy/Phrasea/Webhook/Processor/UserDeletedProcessorFactory.php create mode 100644 lib/Alchemy/Phrasea/Webhook/Processor/UserProcessor.php create mode 100644 lib/Alchemy/Phrasea/Webhook/Processor/UserProcessorFactory.php diff --git a/lib/Alchemy/Phrasea/Controller/Root/DeveloperController.php b/lib/Alchemy/Phrasea/Controller/Root/DeveloperController.php index 90be0bfa94..72d487f75a 100644 --- a/lib/Alchemy/Phrasea/Controller/Root/DeveloperController.php +++ b/lib/Alchemy/Phrasea/Controller/Root/DeveloperController.php @@ -356,8 +356,9 @@ class DeveloperController extends Controller WebhookEvent::RECORD_SUBDEF_CREATED => $this->app->trans('developers:: subdef created for a record'), WebhookEvent::RECORD_SUBDEF_FAILED => $this->app->trans('developers:: subdef creation failed for a record'), ], - WebhookEvent::USER_DELETED_TYPE => [ - WebhookEvent::USER_DELETED => $this->app->trans('developers:: user deleted on phraseanet') + WebhookEvent::USER_TYPE => [ + WebhookEvent::USER_CREATED => $this->app->trans('developers:: new user created'), + WebhookEvent::USER_DELETED => $this->app->trans('developers:: user deleted on phraseanet') ], WebhookEvent::USER_REGISTRATION_TYPE => [ WebhookEvent::USER_REGISTRATION_GRANTED => $this->app->trans('developers:: user registration granted on phraseanet'), diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php index 74c1c6c23a..82d49d54be 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php @@ -12,6 +12,7 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Application; +use Alchemy\Phrasea\Core\Event\User\CreatedEvent; use Alchemy\Phrasea\Core\Event\User\DeletedEvent; use Alchemy\Phrasea\Core\Event\User\UserEvents; use Alchemy\Phrasea\Model\Entities\WebhookEvent; @@ -41,17 +42,31 @@ class WebhookUserEventSubscriber implements EventSubscriberInterface /** @var WebhookEventManipulator $manipulator */ $manipulator = $this->app['manipulator.webhook-event']; - $manipulator->create(WebhookEvent::USER_DELETED, WebhookEvent::USER_DELETED_TYPE, [ + $manipulator->create(WebhookEvent::USER_DELETED, WebhookEvent::USER_TYPE, [ 'user_id' => $event->getUserId(), 'email' => $event->getEmailAddress(), 'login' => $event->getLogin() ], $event->getGrantedBaseIds()); } + public function onUserCreated(CreatedEvent $event) + { + /** @var WebhookEventManipulator $manipulator */ + $manipulator = $this->app['manipulator.webhook-event']; + + $user = $event->getUser(); + $manipulator->create(WebhookEvent::USER_CREATED, WebhookEvent::USER_TYPE, [ + 'user_id' => $user->getId(), + 'email' => $user->getEmail(), + 'login' => $user->getLogin() + ], []); + } + public static function getSubscribedEvents() { return [ - UserEvents::DELETED => 'onUserDeleted' + UserEvents::DELETED => 'onUserDeleted', + UserEvents::CREATED => 'onUserCreated' ]; } } diff --git a/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php b/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php index eeb34392cb..d9c7767808 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php +++ b/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php @@ -18,9 +18,6 @@ class WebhookEvent const USER_REGISTRATION_REJECTED = 'user.registration.rejected'; const USER_REGISTRATION_TYPE = 'user.registration'; - const USER_DELETED = 'user.deleted'; - const USER_DELETED_TYPE = 'user.deleted'; - const RECORD_SUBDEF_CREATED = 'record.subdef.created'; const RECORD_SUBDEF_FAILED = 'record.subdef.creation_failed'; const RECORD_SUBDEFS_CREATED = 'record.subdefs.created'; @@ -31,6 +28,10 @@ class WebhookEvent const ORDER_DELIVERED = 'order.delivered'; const ORDER_DENIED = 'order.denied'; + const USER_TYPE = 'user'; + const USER_CREATED = 'user.created'; + const USER_DELETED = 'user.deleted'; + // const use only as name and type of a webhook const RECORD_TYPE = 'record'; const RECORD_CREATED = 'record.created'; diff --git a/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php b/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php index ac549874ad..9a59e78d77 100644 --- a/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php +++ b/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php @@ -12,6 +12,7 @@ use Alchemy\Phrasea\Webhook\Processor\ProcessorFactory; use Alchemy\Phrasea\Webhook\Processor\ProcessorInterface; use Alchemy\Phrasea\Webhook\Processor\RecordEventProcessor; use Alchemy\Phrasea\Webhook\Processor\UserDeletedProcessorFactory; +use Alchemy\Phrasea\Webhook\Processor\UserProcessorFactory; use Alchemy\Phrasea\Webhook\Processor\UserRegistrationProcessorFactory; use Alchemy\Phrasea\Webhook\Processor\SubdefEventProcessor; @@ -31,7 +32,8 @@ class EventProcessorFactory $this->registerFactory(WebhookEvent::FEED_ENTRY_TYPE, new FeedEntryProcessorFactory($app)); $this->registerFactory(WebhookEvent::USER_REGISTRATION_TYPE, new UserRegistrationProcessorFactory($app)); $this->registerFactory(WebhookEvent::ORDER_TYPE, new OrderNotificationProcessorFactory($app)); - $this->registerFactory(WebhookEvent::USER_DELETED_TYPE, new UserDeletedProcessorFactory()); + + $this->registerFactory(WebhookEvent::USER_TYPE, new UserProcessorFactory()); $this->registerCallableFactory(WebhookEvent::RECORD_SUBDEF_TYPE, function () { return new SubdefEventProcessor(); }); diff --git a/lib/Alchemy/Phrasea/Webhook/Processor/UserDeletedProcessorFactory.php b/lib/Alchemy/Phrasea/Webhook/Processor/UserDeletedProcessorFactory.php deleted file mode 100644 index 4dfacf6554..0000000000 --- a/lib/Alchemy/Phrasea/Webhook/Processor/UserDeletedProcessorFactory.php +++ /dev/null @@ -1,24 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Alchemy\Phrasea\Webhook\Processor; - -class UserDeletedProcessorFactory implements ProcessorFactory -{ - - /** - * @return ProcessorInterface - */ - public function createProcessor() - { - return new UserDeletedProcessor(); - } -} diff --git a/lib/Alchemy/Phrasea/Webhook/Processor/UserProcessor.php b/lib/Alchemy/Phrasea/Webhook/Processor/UserProcessor.php new file mode 100644 index 0000000000..5de1e3d20e --- /dev/null +++ b/lib/Alchemy/Phrasea/Webhook/Processor/UserProcessor.php @@ -0,0 +1,28 @@ +getData(); + + if (! isset($data['user_id'])) { + return null; + } + + return array( + 'event' => $event->getName(), + 'user' => [ + 'id' => $data['user_id'], + 'email' => $data['email'], + 'login' => $data['login'], + ], + 'time' => $data['time'] + ); + } +} \ No newline at end of file diff --git a/lib/Alchemy/Phrasea/Webhook/Processor/UserProcessorFactory.php b/lib/Alchemy/Phrasea/Webhook/Processor/UserProcessorFactory.php new file mode 100644 index 0000000000..355d4c9329 --- /dev/null +++ b/lib/Alchemy/Phrasea/Webhook/Processor/UserProcessorFactory.php @@ -0,0 +1,15 @@ +getRepository('Phraseanet:WebhookEvent')->findUnprocessedEvents(); // I have no clue as to why this magic number is here, probably best to discard test - $this->assertCount(48, $events); + $this->assertCount(55, $events); } } diff --git a/tests/Alchemy/Tests/Phrasea/Webhook/EventProcessorFactoryTest.php b/tests/Alchemy/Tests/Phrasea/Webhook/EventProcessorFactoryTest.php index 4f067093ca..13a6a0ba8c 100644 --- a/tests/Alchemy/Tests/Phrasea/Webhook/EventProcessorFactoryTest.php +++ b/tests/Alchemy/Tests/Phrasea/Webhook/EventProcessorFactoryTest.php @@ -36,6 +36,10 @@ class EventProcessorFactoryTest extends \PhraseanetTestCase { return [ [WebhookEvent::FEED_ENTRY_TYPE, 'Alchemy\Phrasea\Webhook\Processor\FeedEntryProcessor'], + [WebhookEvent::RECORD_TYPE, 'Alchemy\Phrasea\Webhook\Processor\RecordEventProcessor'], + [WebhookEvent::RECORD_SUBDEF_TYPE, 'Alchemy\Phrasea\Webhook\Processor\SubdefEventProcessor'], + [WebhookEvent::ORDER_TYPE, 'Alchemy\Phrasea\Webhook\Processor\OrderNotificationProcessor'], + [WebhookEvent::USER_TYPE, 'Alchemy\Phrasea\Webhook\Processor\UserProcessor'] ]; } }