public function test_loadBanControl() { $BanControl = new BanControl(); $BanControl->loadAll(); $BanControl->loadUsers(); $BanControl->loadIPs(); $BanControl->loadDomains(); $BanControl->loadAll(); return $BanControl; }
/** * 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"); }
/** * 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"))); }
/** * 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; }
/** * 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; }
/** * 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"))); }