Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 39 |
| DatabaseBackend | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
72 | |
0.00% |
0 / 39 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| register | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 12 |
|||
| clear | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
| isAllowed | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 12 |
|||
| garbageCollection | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Flood\DatabaseBackend. | |
| */ | |
| namespace Drupal\Core\Flood; | |
| use Symfony\Component\HttpFoundation\RequestStack; | |
| use Drupal\Core\Database\Connection; | |
| /** | |
| * Defines the database flood backend. This is the default Drupal backend. | |
| */ | |
| class DatabaseBackend implements FloodInterface { | |
| /** | |
| * The database connection used to store flood event information. | |
| * | |
| * @var \Drupal\Core\Database\Connection | |
| */ | |
| protected $connection; | |
| /** | |
| * The request stack. | |
| * | |
| * @var \Symfony\Component\HttpFoundation\RequestStack | |
| */ | |
| protected $requestStack; | |
| /** | |
| * Construct the DatabaseBackend. | |
| * | |
| * @param \Drupal\Core\Database\Connection $connection | |
| * The database connection which will be used to store the flood event | |
| * information. | |
| * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack | |
| * The request stack used to retrieve the current request. | |
| */ | |
| public function __construct(Connection $connection, RequestStack $request_stack) { | |
| $this->connection = $connection; | |
| $this->requestStack = $request_stack; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function register($name, $window = 3600, $identifier = NULL) { | |
| if (!isset($identifier)) { | |
| $identifier = $this->requestStack->getCurrentRequest()->getClientIp(); | |
| } | |
| $this->connection->insert('flood') | |
| ->fields(array( | |
| 'event' => $name, | |
| 'identifier' => $identifier, | |
| 'timestamp' => REQUEST_TIME, | |
| 'expiration' => REQUEST_TIME + $window, | |
| )) | |
| ->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function clear($name, $identifier = NULL) { | |
| if (!isset($identifier)) { | |
| $identifier = $this->requestStack->getCurrentRequest()->getClientIp(); | |
| } | |
| $this->connection->delete('flood') | |
| ->condition('event', $name) | |
| ->condition('identifier', $identifier) | |
| ->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function isAllowed($name, $threshold, $window = 3600, $identifier = NULL) { | |
| if (!isset($identifier)) { | |
| $identifier = $this->requestStack->getCurrentRequest()->getClientIp(); | |
| } | |
| $number = $this->connection->select('flood', 'f') | |
| ->condition('event', $name) | |
| ->condition('identifier', $identifier) | |
| ->condition('timestamp', REQUEST_TIME - $window, '>') | |
| ->countQuery() | |
| ->execute() | |
| ->fetchField(); | |
| return ($number < $threshold); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function garbageCollection() { | |
| return $this->connection->delete('flood') | |
| ->condition('expiration', REQUEST_TIME, '<') | |
| ->execute(); | |
| } | |
| } |