123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Captcha\Model\ResourceModel;
- /**
- * Log Attempts resource
- *
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Log extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
- {
- /**
- * Type Remote Address
- */
- const TYPE_REMOTE_ADDRESS = 1;
- /**
- * Type User Login Name
- */
- const TYPE_LOGIN = 2;
- /**
- * Core Date
- *
- * @var \Magento\Framework\Stdlib\DateTime\DateTime
- */
- protected $_coreDate;
- /**
- * @var \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress
- */
- protected $_remoteAddress;
- /**
- * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
- * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
- * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
- * @param string $connectionName
- */
- public function __construct(
- \Magento\Framework\Model\ResourceModel\Db\Context $context,
- \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
- \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
- $connectionName = null
- ) {
- $this->_coreDate = $coreDate;
- $this->_remoteAddress = $remoteAddress;
- parent::__construct($context, $connectionName);
- }
- /**
- * Define main table
- *
- * @return void
- */
- protected function _construct()
- {
- $this->_setMainTable('captcha_log');
- }
- /**
- * Save or Update count Attempts
- *
- * @param string|null $login
- * @return $this
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function logAttempt($login)
- {
- if ($login != null) {
- $this->getConnection()->insertOnDuplicate(
- $this->getMainTable(),
- [
- 'type' => self::TYPE_LOGIN,
- 'value' => $login,
- 'count' => 1,
- 'updated_at' => $this->_coreDate->gmtDate()
- ],
- ['count' => new \Zend\Db\Sql\Expression('count+1'), 'updated_at']
- );
- }
- $ip = $this->_remoteAddress->getRemoteAddress();
- if ($ip != null) {
- $this->getConnection()->insertOnDuplicate(
- $this->getMainTable(),
- [
- 'type' => self::TYPE_REMOTE_ADDRESS,
- 'value' => $ip,
- 'count' => 1,
- 'updated_at' => $this->_coreDate->gmtDate()
- ],
- ['count' => new \Zend\Db\Sql\Expression('count+1'), 'updated_at']
- );
- }
- return $this;
- }
- /**
- * Delete User attempts by login
- *
- * @param string $login
- * @return $this
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function deleteUserAttempts($login)
- {
- if ($login != null) {
- $this->getConnection()->delete(
- $this->getMainTable(),
- ['type = ?' => self::TYPE_LOGIN, 'value = ?' => $login]
- );
- }
- $ip = $this->_remoteAddress->getRemoteAddress();
- if ($ip != null) {
- $this->getConnection()->delete(
- $this->getMainTable(),
- ['type = ?' => self::TYPE_REMOTE_ADDRESS, 'value = ?' => $ip]
- );
- }
- return $this;
- }
- /**
- * Get count attempts by ip
- *
- * @return null|int
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function countAttemptsByRemoteAddress()
- {
- $ip = $this->_remoteAddress->getRemoteAddress();
- if (!$ip) {
- return 0;
- }
- $connection = $this->getConnection();
- $select = $connection->select()->from(
- $this->getMainTable(),
- 'count'
- )->where(
- 'type = ?',
- self::TYPE_REMOTE_ADDRESS
- )->where(
- 'value = ?',
- $ip
- );
- return $connection->fetchOne($select);
- }
- /**
- * Get count attempts by user login
- *
- * @param string $login
- * @return null|int
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function countAttemptsByUserLogin($login)
- {
- if (!$login) {
- return 0;
- }
- $connection = $this->getConnection();
- $select = $connection->select()->from(
- $this->getMainTable(),
- 'count'
- )->where(
- 'type = ?',
- self::TYPE_LOGIN
- )->where(
- 'value = ?',
- $login
- );
- return $connection->fetchOne($select);
- }
- /**
- * Delete attempts with expired in update_at time
- *
- * @return void
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function deleteOldAttempts()
- {
- $this->getConnection()->delete(
- $this->getMainTable(),
- ['updated_at < ?' => $this->_coreDate->gmtDate(null, time() - 60 * 30)]
- );
- }
- }
|