*/ class LoginListener implements IEventListener { /** @var IRequest */ private $request; /** @var ITimeFactory */ private $timeFactory; /** @var LoginClassifier */ private $loginClassifier; /** @var LoginDataCollector */ private $loginDataCollector; public function __construct(IRequest $request, ITimeFactory $timeFactory, LoginClassifier $loginClassifier, LoginDataCollector $loginDataCollector) { $this->request = $request; $this->timeFactory = $timeFactory; $this->loginDataCollector = $loginDataCollector; $this->loginClassifier = $loginClassifier; } public function handle(Event $event): void { if (!($event instanceof PostLoginEvent)) { // Unrelated return; } $this->handleClassification($event); $this->handleDataCollection($event); } private function handleClassification(PostLoginEvent $event): void { if ($event->isTokenLogin()) { // We don't care about those return; } $this->loginClassifier->process( $event->getUid(), $this->request->getRemoteAddress() ); } private function handleDataCollection(PostLoginEvent $event): void { $this->loginDataCollector->collectSuccessfulLogin( $event->getUid(), $this->request->getRemoteAddress(), $this->timeFactory->getTime() ); } }