Ejemplo n.º 1
0
 public function test_loadBanControl()
 {
     $BanControl = new BanControl();
     $BanControl->loadAll();
     $BanControl->loadUsers();
     $BanControl->loadIPs();
     $BanControl->loadDomains();
     $BanControl->loadAll();
     return $BanControl;
 }
Ejemplo n.º 2
0
 /**
  * Check if this user is pending activation
  * @since Version 3.9.1
  * @return boolean
  */
 public function getUserAccountStatus()
 {
     if ((bool) $this->active === true) {
         return self::STATUS_ACTIVE;
     }
     $BanControl = new BanControl();
     $BanControl->loadUsers(true);
     if (!empty($BanControl->lookupUser($this->id))) {
         return self::STATUS_BANNED;
     }
     if ((bool) $this->active === false) {
         return self::STATUS_UNACTIVATED;
     }
     throw new Exception("Cannot determine the status of this user account");
 }
Ejemplo n.º 3
0
 /**
  * Get user registrations per day between given dates
  * @since Version 3.9
  * @param \DateTime $From
  * @param \Datetime $To
  * @return array
  */
 public function getNumRegistrationsByMonth(DateTime $From, DateTime $To)
 {
     $BanControl = new BanControl();
     $BanControl->loadUsers();
     $query = "SELECT YEAR(user_regdate_nice) AS year, MONTH(user_regdate_nice) AS month, count(*) AS count\r\n\t\t\t\t\t\tFROM nuke_users \r\n\t\t\t\t\t\tWHERE user_regdate_nice BETWEEN ? AND ?\r\n\t\t\t\t\t\tAND user_active = 1\r\n\t\t\t\t\t\tAND user_id NOT IN (" . implode(",", array_keys($BanControl->users)) . ")\r\n\t\t\t\t\t\tGROUP BY YEAR(user_regdate_nice), MONTH(user_regdate_nice)";
     return $this->db->fetchAll($query, array($From->format("Y-m-d"), $To->format("Y-m-d")));
 }
Ejemplo n.º 4
0
 /**
  * List all members
  * @since Version 3.2
  * @version 3.2
  * @return mixed
  * @param int $page
  * @param int $items_per_page
  */
 public function memberList($page = 1, $items_per_page = 25)
 {
     $start = $page > 0 ? ($page - 1) * $items_per_page : 0;
     $return = array();
     // Get banned usernames
     $BanControl = new BanControl();
     $BanControl->loadUsers();
     $banned_user_ids = array_keys($BanControl->users);
     $bancontrol_sql = count($banned_user_ids) ? " AND user_id NOT IN(" . implode(",", $banned_user_ids) . ")" : "";
     $query = "SELECT SQL_CALC_FOUND_ROWS user_id AS id, username, name AS real_name, user_avatar AS avatar, user_avatar_width AS avatar_width, \r\n                    user_avatar_height AS avatar_height, user_email AS contact_email, user_viewemail AS email_show, user_lastvisit AS lastvisit, \r\n                    user_session_time AS last_activity, user_regdate AS regdate, user_regdate_nice, user_posts AS posts, timezone AS timezone, flickr_nsid \r\n                FROM nuke_users \r\n                WHERE user_active = 1 \r\n                    AND user_id != 0\r\n                    AND user_session_time > 0 \r\n                    " . $bancontrol_sql . "\r\n                ORDER BY user_id LIMIT ?, ?";
     if ($result = $this->db->fetchAll($query, array($start, $items_per_page))) {
         $return['page'] = $page;
         $return['perpage'] = $items_per_page;
         $return['total'] = $this->db->fetchOne("SELECT FOUND_ROWS() AS total");
         $return['num_pages'] = ceil($return['total'] / $items_per_page);
         foreach ($result as $row) {
             if (empty($row['user_regdate_nice']) || $row['user_regdate_nice'] == "0000-00-00") {
                 try {
                     $datetime = new DateTime($row['regdate']);
                     $update['user_regdate_nice'] = $datetime->format("Y-m-d");
                     $this->db->update("nuke_users", $update, array("user_id = ?" => $row['id']));
                 } catch (Exception $e) {
                     // Throw it away, Manuel!
                 }
             }
             $return['members'][$row['id']] = $row;
         }
     }
     return $return;
 }
Ejemplo n.º 5
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;
 }
Ejemplo n.º 6
0
 /**
  * Get user registrations per day between given dates
  * @since Version 3.9
  * @param \DateTime $dateFrom
  * @param \Datetime $dateTo
  * @return array
  */
 public function getNumRegistrationsByMonth(DateTime $dateFrom, DateTime $dateTo)
 {
     $BanControl = new BanControl();
     $BanControl->loadUsers();
     $bancontrol_sql = "";
     if (!is_null($BanControl->users) && count($BanControl->users) > 0) {
         $bancontrol_sql = "AND user_id NOT IN (" . implode(",", array_keys($BanControl->users)) . ")";
     }
     $query = "SELECT YEAR(user_regdate_nice) AS year, MONTH(user_regdate_nice) AS month, count(*) AS count\r\n                    FROM nuke_users \r\n                    WHERE user_regdate_nice BETWEEN ? AND ?\r\n                    AND user_active = 1\r\n                    " . $bancontrol_sql . "\r\n                    GROUP BY YEAR(user_regdate_nice), MONTH(user_regdate_nice)";
     return $this->db->fetchAll($query, array($dateFrom->format("Y-m-d"), $dateTo->format("Y-m-d")));
 }