| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | 
							- <?php
 
- /**
 
-  * @package    Grav\Plugin\Login
 
-  *
 
-  * @copyright  Copyright (C) 2014 - 2017 RocketTheme, LLC. All rights reserved.
 
-  * @license    MIT License; see LICENSE file for details.
 
-  */
 
- namespace Grav\Plugin\Login;
 
- /**
 
-  * Class RateLimiter
 
-  * @package Grav\Plugin\Login\RateLimiter
 
-  */
 
- class RateLimiter
 
- {
 
-     /** @var LoginCache */
 
-     protected $cache;
 
-     /** @var int */
 
-     protected $maxCount;
 
-     /** @var int */
 
-     protected $interval;
 
-     /**
 
-      * RateLimiter constructor.
 
-      * @param string $context
 
-      * @param int $maxCount
 
-      * @param int|null $interval
 
-      */
 
-     public function __construct($context, $maxCount, $interval)
 
-     {
 
-         $this->cache = new LoginCache($context, (int)$interval * 60);
 
-         $this->maxCount = (int) $maxCount;
 
-         $this->interval = (int) $interval;
 
-     }
 
-     /**
 
-      * @return int
 
-      */
 
-     public function getInterval()
 
-     {
 
-         return $this->interval;
 
-     }
 
-     /**
 
-      * Check if user has hit rate limiter. Remember to use registerRateLimitedAction() before doing the check.
 
-      *
 
-      * @param string $key
 
-      * @param string $type
 
-      * @return bool
 
-      */
 
-     public function isRateLimited($key, $type = 'username')
 
-     {
 
-         if (!$key || !$this->interval) {
 
-             return false;
 
-         }
 
-         return $this->maxCount && count($this->getAttempts($key, $type)) > $this->maxCount;
 
-     }
 
-     /**
 
-      *
 
-      *
 
-      * @param string $key
 
-      * @param string $type
 
-      * @return array
 
-      */
 
-     public function getAttempts($key, $type = 'username')
 
-     {
 
-         return (array) $this->cache->get($type . $key, []);
 
-     }
 
-     /**
 
-      * Register rate limited action.
 
-      *
 
-      * @param string $key
 
-      * @param string $type
 
-      * @return $this
 
-      */
 
-     public function registerRateLimitedAction($key, $type = 'username')
 
-     {
 
-         if ($key && $this->interval) {
 
-             $tries = (array)$this->cache->get($type . $key, []);
 
-             $tries[] = time();
 
-             $this->cache->set($type . $key, $tries);
 
-         }
 
-         return $this;
 
-     }
 
-     /**
 
-      * Reset the user rate limit counter.
 
-      *
 
-      * @param string $key
 
-      * @param string $type
 
-      * @return $this
 
-      */
 
-     public function resetRateLimit($key, $type = 'username')
 
-     {
 
-         if ($key) {
 
-             $this->cache->delete($type . $key);
 
-         }
 
-         return $this;
 
-     }
 
- }
 
 
  |