securityConfig = $securityConfig; $this->passwordResetRequestEventFactory = $passwordResetRequestEventFactory; $this->passwordResetRequestEventCollectionFactory = $passwordResetRequestEventCollectionFactory; $this->securityCheckers = $securityCheckers; $this->eventManager = $eventManager; $this->dateTime = $dateTime; $this->remoteAddress = $remoteAddress; foreach ($this->securityCheckers as $checker) { if (!($checker instanceof SecurityCheckerInterface)) { throw new \Magento\Framework\Exception\LocalizedException( __('Incorrect Security Checker class. It has to implement SecurityCheckerInterface') ); } } } /** * Perform security check * * @param int $requestType * @param string|null $accountReference * @param int|null $longIp * @return $this * @throws SecurityViolationException * @since 100.1.0 */ public function performSecurityCheck($requestType, $accountReference = null, $longIp = null) { if (null === $longIp) { $longIp = $this->remoteAddress->getRemoteAddress(); } foreach ($this->securityCheckers as $checker) { $checker->check($requestType, $accountReference, $longIp); } $this->createNewPasswordResetRequestEventRecord($requestType, $accountReference, $longIp); return $this; } /** * Clean expired Admin Sessions * * @return $this * @since 100.1.0 */ public function cleanExpiredRecords() { $this->passwordResetRequestEventCollectionFactory->create()->deleteRecordsOlderThen( $this->dateTime->gmtTimestamp() - self::SECURITY_CONTROL_RECORDS_LIFE_TIME ); return $this; } /** * Create new password reset request record * * @param int $requestType * @param string|null $accountReference * @param int $longIp * @return PasswordResetRequestEvent * @since 100.1.0 */ protected function createNewPasswordResetRequestEventRecord($requestType, $accountReference, $longIp) { /** @var \Magento\Security\Model\PasswordResetRequestEventFactory $passwordResetRequestEvent */ $passwordResetRequestEvent = $this->passwordResetRequestEventFactory->create(); $passwordResetRequestEvent->setRequestType($requestType) ->setAccountReference($accountReference) ->setIp($longIp) ->save(); return $passwordResetRequestEvent; } }