Example #1
0
 /**
  * Check if the number or records in the database exceeds the set limit
  * 
  * @see \Spork\Mvc\Listener\Limit\Storage\StorageInterface::check()
  * @param string $ip
  * @param Limit $limit
  * @return boolean
  */
 public function check($ip, Limit $limit)
 {
     $this->assertReady();
     if ($this->cleanOnCheck) {
         $this->clean();
     }
     $sql = sprintf("SELECT count(*) as count FROM %s WHERE %s=:ip AND %s=:type AND %s >= NOW() - INTERVAL %d SECOND", $this->dbAdapter->platform->quoteIdentifier($this->table), $this->dbAdapter->platform->quoteIdentifier($this->ipColumn), $this->dbAdapter->platform->quoteIdentifier($this->typeColumn), $this->dbAdapter->platform->quoteIdentifier($this->timestampColumn), $limit->getInterval()->toSeconds());
     $parameters = array('ip' => $ip, 'type' => $limit->getName());
     $result = $this->dbAdapter->query($sql, $parameters);
     $count = $result->current()->count;
     return $count >= $limit->getLimit();
 }
Example #2
0
 /**
  * Set a limit
  * 
  * @param Limit|array $limit
  * @throws \Exception
  */
 public function setLimit($limit)
 {
     if (is_array($limit)) {
         $spec = $limit;
         if (!isset($spec['name'])) {
             throw new \Exception("Cannot create Limit: Name missing from configuration.");
         }
         $name = $spec['name'];
         $limit = isset($spec['limit']) ? $spec['limit'] : null;
         $interval = isset($spec['interval']) ? $spec['interval'] : null;
         $actions = isset($spec['actions']) ? $spec['actions'] : array();
         $limit = new Limit($name, $limit, $interval);
         foreach ($actions as $action) {
             if (is_string($action)) {
                 $action = $this->getActionPlugins()->get($action);
             } elseif (is_array($action)) {
                 if (!isset($action['name'])) {
                     throw new \Exception('Cannot create Action: Name missing from configuration.');
                 }
                 $action = $this->getActionPlugins()->get($action['name'], $action);
             }
             if (!$action instanceof Action\ActionInterface) {
                 throw new \Exception("Action must be instance of Spork\\Mvc\\Listener\\Limit\\Action\\ActionInterface");
             }
             $limit->addAction($action);
         }
     }
     if (!$limit instanceof Limit) {
         throw new \Exception("Limit must be instance of Spork\\Mvc\\Listener\\Limit\\Limit");
     }
     $this->limits[$limit->getName()] = $limit;
 }