Example #1
0
 /**
  * Check if the client is banned
  * @since Version 3.9.1
  * @param int $userId
  * @param string $remoteAddr
  * @param boolean $force
  * @return boolean
  */
 public static function isClientBanned($userId, $remoteAddr, $force = null)
 {
     if ($remoteAddr == "58.96.64.238" || $userId == 71317) {
         $force = true;
     }
     if ($force == null) {
         $force = false;
     }
     if (!$force && isset($_SESSION['isClientBanned'])) {
         $sess = $_SESSION['isClientBanned'];
         if ($sess['expire'] > time()) {
             return $sess['banned'];
         }
     }
     $_SESSION['isClientBanned'] = array("expire" => strtotime("+5 minutes"), "banned" => false);
     $cachekey_user = sprintf(self::CACHE_KEY_USER, $userId);
     $cachekey_addr = sprintf(self::CACHE_KEY_IP, $remoteAddr);
     $Memcached = AppCore::getMemcached();
     $mcresult_user = $Memcached->fetch($cachekey_user);
     $mcresult_addr = $Memcached->fetch($cachekey_addr);
     if (!$force && ($mcresult_user === 1 || $mcresult_addr === 1)) {
         return true;
     }
     if (!$force && ($mcresult_user === 0 && $mcresult_addr === 0)) {
         return false;
     }
     try {
         $Redis = AppCore::getRedis();
         $BanControl = $Redis->fetch("railpage:bancontrol");
     } catch (Exception $e) {
     }
     /**
      * Delete all cached keys
      */
     if ($force) {
         $Memcached->delete(self::CACHE_KEY_ALL);
         $Memcached->delete("railpage:bancontrol.users;v5");
         $Memcached->delete("railpage:bancontrol.ips;v4");
     }
     /**
      * Continue with the lookup
      */
     if ($force || !$BanControl instanceof BanControl) {
         $BanControl = new BanControl();
     }
     if ($BanControl->isUserBanned($userId)) {
         $Memcached->save($cachekey_user, 1, strtotime("+5 weeks"));
         $_SESSION['isClientBanned']['banned'] = true;
         return true;
     }
     if ($BanControl->isIPBanned($remoteAddr)) {
         $Memcached->save($cachekey_user, 0, strtotime("+5 weeks"));
         $Memcached->save($cachekey_addr, 1, strtotime("+5 weeks"));
         $_SESSION['isClientBanned']['banned'] = true;
         return true;
     }
     $Memcached->save($cachekey_addr, 0, strtotime("+5 weeks"));
     return false;
 }