Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/wordfenc.../models/block
File: wfBlock.php
global $wpdb;
[500] Fix | Delete
$blocksTable = wfBlock::blocksTable();
[501] Fix | Delete
$wpdb->query("DELETE FROM `{$blocksTable}` WHERE `expiration` <= UNIX_TIMESTAMP() AND `expiration` != " . self::DURATION_FOREVER);
[502] Fix | Delete
}
[503] Fix | Delete
[504] Fix | Delete
/**
[505] Fix | Delete
* Imports all valid blocks in $blocks. If $replaceExisting is true, this will remove all permanent blocks prior to the import.
[506] Fix | Delete
*
[507] Fix | Delete
* @param array $blocks
[508] Fix | Delete
* @param bool $replaceExisting
[509] Fix | Delete
*/
[510] Fix | Delete
public static function importBlocks($blocks, $replaceExisting = true) {
[511] Fix | Delete
global $wpdb;
[512] Fix | Delete
$blocksTable = wfBlock::blocksTable();
[513] Fix | Delete
[514] Fix | Delete
if ($replaceExisting) {
[515] Fix | Delete
$wpdb->query("DELETE FROM `{$blocksTable}` WHERE `expiration` = " . self::DURATION_FOREVER);
[516] Fix | Delete
}
[517] Fix | Delete
[518] Fix | Delete
foreach ($blocks as $b) {
[519] Fix | Delete
self::_importBlock($b);
[520] Fix | Delete
}
[521] Fix | Delete
[522] Fix | Delete
if (!WFWAF_SUBDIRECTORY_INSTALL && class_exists('wfWAFIPBlocksController')) {
[523] Fix | Delete
wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings();
[524] Fix | Delete
}
[525] Fix | Delete
}
[526] Fix | Delete
[527] Fix | Delete
/**
[528] Fix | Delete
* Validates the block import record and inserts it if valid. This validation is identical to what is applied to adding one through the UI.
[529] Fix | Delete
*
[530] Fix | Delete
* @param array $b
[531] Fix | Delete
* @return bool
[532] Fix | Delete
*/
[533] Fix | Delete
private static function _importBlock($b) {
[534] Fix | Delete
global $wpdb;
[535] Fix | Delete
$blocksTable = wfBlock::blocksTable();
[536] Fix | Delete
[537] Fix | Delete
if (!isset($b['type']) || !isset($b['IP']) || !isset($b['blockedTime']) || !isset($b['reason']) || !isset($b['lastAttempt']) || !isset($b['blockedHits'])) { return false; }
[538] Fix | Delete
if (empty($b['IP']) || empty($b['reason'])) { return false; }
[539] Fix | Delete
[540] Fix | Delete
$ip = @wfUtils::inet_ntop(wfUtils::hex2bin($b['IP']));
[541] Fix | Delete
if (!wfUtils::isValidIP($ip)) { return false; }
[542] Fix | Delete
[543] Fix | Delete
switch ($b['type']) {
[544] Fix | Delete
case self::TYPE_IP_MANUAL:
[545] Fix | Delete
case self::TYPE_IP_AUTOMATIC_TEMPORARY:
[546] Fix | Delete
case self::TYPE_IP_AUTOMATIC_PERMANENT:
[547] Fix | Delete
case self::TYPE_WFSN_TEMPORARY:
[548] Fix | Delete
case self::TYPE_RATE_BLOCK:
[549] Fix | Delete
case self::TYPE_RATE_THROTTLE:
[550] Fix | Delete
case self::TYPE_LOCKOUT:
[551] Fix | Delete
if (self::isWhitelisted($ip)) { return false; }
[552] Fix | Delete
[553] Fix | Delete
$ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton($ip));
[554] Fix | Delete
return $wpdb->query($wpdb->prepare("INSERT INTO `{$blocksTable}` (`type`, `IP`, `blockedTime`, `reason`, `lastAttempt`, `blockedHits`, `expiration`, `parameters`) VALUES (%d, {$ipHex}, %d, %s, %d, %d, %d, NULL)", (int) $b['type'], (int) $b['blockedTime'], $b['reason'], (int) $b['lastAttempt'], (int) $b['blockedHits'], self::DURATION_FOREVER)) !== false;
[555] Fix | Delete
case self::TYPE_COUNTRY:
[556] Fix | Delete
if (!isset($b['parameters'])) { return false; }
[557] Fix | Delete
if (wfUtils::inet_pton($ip) != self::MARKER_COUNTRY) { return false; }
[558] Fix | Delete
$parameters = @json_decode($b['parameters'], true);
[559] Fix | Delete
if (!isset($parameters['blockLogin']) || !isset($parameters['blockSite']) || !isset($parameters['countries'])) { return false; }
[560] Fix | Delete
$parameters['blockLogin'] = wfUtils::truthyToInt($parameters['blockLogin']);
[561] Fix | Delete
$parameters['blockSite'] = wfUtils::truthyToInt($parameters['blockSite']);
[562] Fix | Delete
[563] Fix | Delete
require(WORDFENCE_PATH . 'lib/wfBulkCountries.php'); /** @var array $wfBulkCountries */
[564] Fix | Delete
foreach ($parameters['countries'] as $code) {
[565] Fix | Delete
if (!isset($wfBulkCountries[$code])) {
[566] Fix | Delete
return false;
[567] Fix | Delete
}
[568] Fix | Delete
}
[569] Fix | Delete
[570] Fix | Delete
$parameters = array('blockLogin' => $parameters['blockLogin'], 'blockSite' => $parameters['blockSite'], 'countries' => $parameters['countries']);
[571] Fix | Delete
[572] Fix | Delete
$ipHex = wfDB::binaryValueToSQLHex(self::MARKER_COUNTRY);
[573] Fix | Delete
return $wpdb->query($wpdb->prepare("INSERT INTO `{$blocksTable}` (`type`, `IP`, `blockedTime`, `reason`, `lastAttempt`, `blockedHits`, `expiration`, `parameters`) VALUES (%d, {$ipHex}, %d, %s, %d, %d, %d, %s)", self::TYPE_COUNTRY, (int) $b['blockedTime'], $b['reason'], (int) $b['lastAttempt'], (int) $b['blockedHits'], self::DURATION_FOREVER, json_encode($parameters))) !== false;
[574] Fix | Delete
case self::TYPE_PATTERN:
[575] Fix | Delete
if (!isset($b['parameters'])) { return false; }
[576] Fix | Delete
if (wfUtils::inet_pton($ip) != self::MARKER_PATTERN) { return false; }
[577] Fix | Delete
$parameters = @json_decode($b['parameters'], true);
[578] Fix | Delete
if (!isset($parameters['ipRange']) || !isset($parameters['hostname']) || !isset($parameters['userAgent']) || !isset($parameters['referrer'])) { return false; }
[579] Fix | Delete
[580] Fix | Delete
$hasOne = false;
[581] Fix | Delete
if (!empty($parameters['ipRange'])) {
[582] Fix | Delete
$ipRange = new wfUserIPRange($parameters['ipRange']);
[583] Fix | Delete
if ($ipRange->isValidRange()) {
[584] Fix | Delete
if ($ipRange->isMixedRange()) {
[585] Fix | Delete
return false;
[586] Fix | Delete
}
[587] Fix | Delete
[588] Fix | Delete
$hasOne = true;
[589] Fix | Delete
}
[590] Fix | Delete
else {
[591] Fix | Delete
return false;
[592] Fix | Delete
}
[593] Fix | Delete
}
[594] Fix | Delete
if (!empty($parameters['hostname'])) {
[595] Fix | Delete
if (preg_match('/^[a-z0-9\.\*\-]+$/i', $parameters['hostname'])) {
[596] Fix | Delete
$hasOne = true;
[597] Fix | Delete
}
[598] Fix | Delete
else {
[599] Fix | Delete
return false;
[600] Fix | Delete
}
[601] Fix | Delete
}
[602] Fix | Delete
if (!empty($parameters['userAgent'])) { $hasOne = true; }
[603] Fix | Delete
if (!empty($parameters['referrer'])) { $hasOne = true; }
[604] Fix | Delete
if (!$hasOne) { return false; }
[605] Fix | Delete
[606] Fix | Delete
$ipRange = '';
[607] Fix | Delete
if (!empty($parameters['ipRange'])) {
[608] Fix | Delete
$ipRange = new wfUserIPRange($parameters['ipRange']);
[609] Fix | Delete
$ipRange = $ipRange->getIPString();
[610] Fix | Delete
}
[611] Fix | Delete
$parameters = array(
[612] Fix | Delete
'ipRange' => $ipRange,
[613] Fix | Delete
'hostname' => $parameters['hostname'],
[614] Fix | Delete
'userAgent' => $parameters['userAgent'],
[615] Fix | Delete
'referrer' => $parameters['referrer'],
[616] Fix | Delete
);
[617] Fix | Delete
[618] Fix | Delete
$ipHex = wfDB::binaryValueToSQLHex(self::MARKER_PATTERN);
[619] Fix | Delete
return $wpdb->query($wpdb->prepare("INSERT INTO `{$blocksTable}` (`type`, `IP`, `blockedTime`, `reason`, `lastAttempt`, `blockedHits`, `expiration`, `parameters`) VALUES (%d, {$ipHex}, %d, %s, %d, %d, %d, %s)", self::TYPE_PATTERN, (int) $b['blockedTime'], $b['reason'], (int) $b['lastAttempt'], (int) $b['blockedHits'], self::DURATION_FOREVER, json_encode($parameters))) !== false;
[620] Fix | Delete
}
[621] Fix | Delete
[622] Fix | Delete
return false;
[623] Fix | Delete
}
[624] Fix | Delete
[625] Fix | Delete
/**
[626] Fix | Delete
* Returns an array suitable for JSON output of all permanent blocks.
[627] Fix | Delete
*
[628] Fix | Delete
* @return array
[629] Fix | Delete
*/
[630] Fix | Delete
public static function exportBlocks() {
[631] Fix | Delete
global $wpdb;
[632] Fix | Delete
$blocksTable = wfBlock::blocksTable();
[633] Fix | Delete
$query = "SELECT `type`, HEX(`IP`) AS `IP`, `blockedTime`, `reason`, `lastAttempt`, `blockedHits`, `parameters` FROM `{$blocksTable}` WHERE `expiration` = " . self::DURATION_FOREVER;
[634] Fix | Delete
$rows = $wpdb->get_results($query, ARRAY_A);
[635] Fix | Delete
return $rows;
[636] Fix | Delete
}
[637] Fix | Delete
[638] Fix | Delete
/**
[639] Fix | Delete
* Returns all unexpired blocks (including lockouts by default), optionally only of the specified types. These are sorted descending by the time created.
[640] Fix | Delete
*
[641] Fix | Delete
* @param bool $prefetch If true, the full data for the block is fetched rather than using lazy loading.
[642] Fix | Delete
* @param array $ofTypes An optional array of block types to restrict the returned array of blocks to.
[643] Fix | Delete
* @param int $offset The offset to start the result fetch at.
[644] Fix | Delete
* @param int $limit The maximum number of results to return. -1 for all.
[645] Fix | Delete
* @param string $sortColumn The column to sort by.
[646] Fix | Delete
* @param string $sortDirection The direction to sort.
[647] Fix | Delete
* @param string $filter An optional value to filter by.
[648] Fix | Delete
* @return wfBlock[]
[649] Fix | Delete
*/
[650] Fix | Delete
public static function allBlocks($prefetch = false, $ofTypes = array(), $offset = 0, $limit = -1, $sortColumn = 'type', $sortDirection = 'ascending', $filter = '') {
[651] Fix | Delete
global $wpdb;
[652] Fix | Delete
$blocksTable = wfBlock::blocksTable();
[653] Fix | Delete
$columns = '`id`';
[654] Fix | Delete
if ($prefetch) {
[655] Fix | Delete
$columns = '*';
[656] Fix | Delete
}
[657] Fix | Delete
[658] Fix | Delete
$sort = 'typeSort';
[659] Fix | Delete
switch ($sortColumn) { //Match the display table column to the corresponding schema column
[660] Fix | Delete
case 'type':
[661] Fix | Delete
//Use default;
[662] Fix | Delete
break;
[663] Fix | Delete
case 'detail':
[664] Fix | Delete
$sort = 'detailSort';
[665] Fix | Delete
break;
[666] Fix | Delete
case 'ruleAdded':
[667] Fix | Delete
$sort = 'blockedTime';
[668] Fix | Delete
break;
[669] Fix | Delete
case 'reason':
[670] Fix | Delete
$sort = 'reason';
[671] Fix | Delete
break;
[672] Fix | Delete
case 'expiration':
[673] Fix | Delete
$sort = 'expiration';
[674] Fix | Delete
break;
[675] Fix | Delete
case 'blockCount':
[676] Fix | Delete
$sort = 'blockedHits';
[677] Fix | Delete
break;
[678] Fix | Delete
case 'lastAttempt':
[679] Fix | Delete
$sort = 'lastAttempt';
[680] Fix | Delete
break;
[681] Fix | Delete
}
[682] Fix | Delete
[683] Fix | Delete
$order = 'ASC';
[684] Fix | Delete
if ($sortDirection == 'descending') {
[685] Fix | Delete
$order = 'DESC';
[686] Fix | Delete
}
[687] Fix | Delete
[688] Fix | Delete
$query = "SELECT {$columns}, CASE
[689] Fix | Delete
WHEN `type` = " . self::TYPE_COUNTRY . " THEN 0
[690] Fix | Delete
WHEN `type` = " . self::TYPE_PATTERN . " THEN 1
[691] Fix | Delete
WHEN `type` = " . self::TYPE_LOCKOUT . " THEN 2
[692] Fix | Delete
WHEN `type` = " . self::TYPE_RATE_THROTTLE . " THEN 3
[693] Fix | Delete
WHEN `type` = " . self::TYPE_RATE_BLOCK . " THEN 4
[694] Fix | Delete
WHEN `type` = " . self::TYPE_IP_AUTOMATIC_PERMANENT . " THEN 5
[695] Fix | Delete
WHEN `type` = " . self::TYPE_IP_AUTOMATIC_TEMPORARY . " THEN 6
[696] Fix | Delete
WHEN `type` = " . self::TYPE_WFSN_TEMPORARY . " THEN 7
[697] Fix | Delete
WHEN `type` = " . self::TYPE_IP_MANUAL . " THEN 8
[698] Fix | Delete
ELSE 9999
[699] Fix | Delete
END AS `typeSort`, CASE
[700] Fix | Delete
WHEN `type` = " . self::TYPE_COUNTRY . " THEN `parameters`
[701] Fix | Delete
WHEN `type` = " . self::TYPE_PATTERN . " THEN `parameters`
[702] Fix | Delete
WHEN `type` = " . self::TYPE_IP_MANUAL . " THEN `IP`
[703] Fix | Delete
WHEN `type` = " . self::TYPE_IP_AUTOMATIC_PERMANENT . " THEN `IP`
[704] Fix | Delete
WHEN `type` = " . self::TYPE_RATE_BLOCK . " THEN `IP`
[705] Fix | Delete
WHEN `type` = " . self::TYPE_RATE_THROTTLE . " THEN `IP`
[706] Fix | Delete
WHEN `type` = " . self::TYPE_LOCKOUT . " THEN `IP`
[707] Fix | Delete
WHEN `type` = " . self::TYPE_WFSN_TEMPORARY . " THEN `IP`
[708] Fix | Delete
WHEN `type` = " . self::TYPE_IP_AUTOMATIC_TEMPORARY . " THEN `IP`
[709] Fix | Delete
ELSE 9999
[710] Fix | Delete
END AS `detailSort`
[711] Fix | Delete
FROM `{$blocksTable}` WHERE ";
[712] Fix | Delete
if (!empty($ofTypes)) {
[713] Fix | Delete
$sanitizedTypes = array_map('intval', $ofTypes);
[714] Fix | Delete
$query .= "`type` IN (" . implode(', ', $sanitizedTypes) . ') AND ';
[715] Fix | Delete
}
[716] Fix | Delete
$query .= '(`expiration` = ' . self::DURATION_FOREVER . " OR `expiration` > UNIX_TIMESTAMP()) ORDER BY `{$sort}` {$order}, `id` DESC";
[717] Fix | Delete
[718] Fix | Delete
if ($limit > -1) {
[719] Fix | Delete
$offset = (int) $offset;
[720] Fix | Delete
$limit = (int) $limit;
[721] Fix | Delete
$query .= " LIMIT {$offset},{$limit}";
[722] Fix | Delete
}
[723] Fix | Delete
[724] Fix | Delete
$rows = $wpdb->get_results($query, ARRAY_A);
[725] Fix | Delete
$result = array();
[726] Fix | Delete
foreach ($rows as $r) {
[727] Fix | Delete
if ($prefetch) {
[728] Fix | Delete
if ($r['type'] == self::TYPE_COUNTRY || $r['type'] == self::TYPE_PATTERN) {
[729] Fix | Delete
$ip = null;
[730] Fix | Delete
}
[731] Fix | Delete
else {
[732] Fix | Delete
$ip = wfUtils::inet_ntop($r['IP']);
[733] Fix | Delete
}
[734] Fix | Delete
[735] Fix | Delete
$parameters = null;
[736] Fix | Delete
if ($r['type'] == self::TYPE_PATTERN || $r['type'] == self::TYPE_COUNTRY) {
[737] Fix | Delete
$parameters = @json_decode($r['parameters'], true);
[738] Fix | Delete
}
[739] Fix | Delete
[740] Fix | Delete
$result[] = new wfBlock($r['id'], $r['type'], $ip, $r['blockedTime'], $r['reason'], $r['lastAttempt'], $r['blockedHits'], $r['expiration'], $parameters);
[741] Fix | Delete
}
[742] Fix | Delete
else {
[743] Fix | Delete
$result[] = new wfBlock($r['id']);
[744] Fix | Delete
}
[745] Fix | Delete
}
[746] Fix | Delete
[747] Fix | Delete
return $result;
[748] Fix | Delete
}
[749] Fix | Delete
[750] Fix | Delete
/**
[751] Fix | Delete
* Functions identically to wfBlock::allBlocks except that it filters the result. The filtering is done within PHP rather than MySQL, so this will impose a performance penalty and should only
[752] Fix | Delete
* be used when filtering is actually wanted.
[753] Fix | Delete
*
[754] Fix | Delete
* @param bool $prefetch
[755] Fix | Delete
* @param array $ofTypes
[756] Fix | Delete
* @param int $offset
[757] Fix | Delete
* @param int $limit
[758] Fix | Delete
* @param string $sortColumn
[759] Fix | Delete
* @param string $sortDirection
[760] Fix | Delete
* @param string $filter
[761] Fix | Delete
* @return wfBlock[]
[762] Fix | Delete
*/
[763] Fix | Delete
public static function filteredBlocks($prefetch = false, $ofTypes = array(), $offset = 0, $limit = -1, $sortColumn = 'type', $sortDirection = 'ascending', $filter = '') {
[764] Fix | Delete
$filter = trim($filter);
[765] Fix | Delete
$matchType = '';
[766] Fix | Delete
$matchValue = '';
[767] Fix | Delete
if (empty($filter)) {
[768] Fix | Delete
return self::allBlocks($prefetch, $ofTypes, $offset, $limit, $sortColumn, $sortDirection);
[769] Fix | Delete
}
[770] Fix | Delete
else if (wfUtils::isValidIP($filter)) { //e.g., 4.5.6.7, ffe0::, ::0
[771] Fix | Delete
$matchType = 'ip';
[772] Fix | Delete
$matchValue = wfUtils::inet_ntop(wfUtils::inet_pton($filter));
[773] Fix | Delete
}
[774] Fix | Delete
[775] Fix | Delete
if (empty($matchType) && preg_match('/^(?:[0-9]+|\*)\.(?:(?:[0-9]+|\*)\.(?!$))*(?:(?:[0-9]+|\*))?$/', trim($filter, '.'))) { //e.g., possible wildcard IPv4 like 4.5.*
[776] Fix | Delete
$components = explode('.', trim($filter, '.'));
[777] Fix | Delete
if (count($components) <= 4) {
[778] Fix | Delete
$components = array_pad($components, 4, '*');
[779] Fix | Delete
$matchType = 'ipregex';
[780] Fix | Delete
$matchValue = '^';
[781] Fix | Delete
foreach ($components as $c) {
[782] Fix | Delete
if (empty($c) || $c == '*') {
[783] Fix | Delete
$matchValue .= '\d+';
[784] Fix | Delete
}
[785] Fix | Delete
else {
[786] Fix | Delete
$matchValue .= (int) $c;
[787] Fix | Delete
}
[788] Fix | Delete
[789] Fix | Delete
$matchValue .= '\.';
[790] Fix | Delete
}
[791] Fix | Delete
$matchValue = substr($matchValue, 0, -2);
[792] Fix | Delete
$matchValue .= '$';
[793] Fix | Delete
}
[794] Fix | Delete
}
[795] Fix | Delete
[796] Fix | Delete
if (empty($matchType) && preg_match('/^(?:[0-9a-f]+\:)(?:[0-9a-f]+\:|\*){1,2}(?:[0-9a-f]+|\*)?$/i', $filter)) { //e.g., possible wildcard IPv6 like ffe0:*
[797] Fix | Delete
$components = explode(':', $filter);
[798] Fix | Delete
$matchType = 'ipregex';
[799] Fix | Delete
$matchValue = '^';
[800] Fix | Delete
for ($i = 0; $i < 4; $i++) {
[801] Fix | Delete
if (isset($components[$i])) {
[802] Fix | Delete
$matchValue .= strtoupper(str_pad(dechex($components[$i]), 4, '0', STR_PAD_LEFT));
[803] Fix | Delete
}
[804] Fix | Delete
else {
[805] Fix | Delete
$matchValue .= '[0-9a-f]{4}';
[806] Fix | Delete
}
[807] Fix | Delete
$matchValue .= ':';
[808] Fix | Delete
}
[809] Fix | Delete
$matchValue = substr($matchValue, 0, -1);
[810] Fix | Delete
$matchValue .= '$';
[811] Fix | Delete
}
[812] Fix | Delete
[813] Fix | Delete
if (empty($matchType)) {
[814] Fix | Delete
$matchType = 'literal';
[815] Fix | Delete
$matchValue = $filter;
[816] Fix | Delete
}
[817] Fix | Delete
[818] Fix | Delete
$offsetProcessed = 0;
[819] Fix | Delete
$limitProcessed = 0;
[820] Fix | Delete
[821] Fix | Delete
$returnBlocks = array();
[822] Fix | Delete
for ($i = 0; true; $i += WORDFENCE_BLOCKED_IPS_PER_PAGE) {
[823] Fix | Delete
$blocks = wfBlock::allBlocks(true, $ofTypes, $i, WORDFENCE_BLOCKED_IPS_PER_PAGE, $sortColumn, $sortDirection);
[824] Fix | Delete
if (empty($blocks)) {
[825] Fix | Delete
break;
[826] Fix | Delete
}
[827] Fix | Delete
[828] Fix | Delete
foreach ($blocks as $b) {
[829] Fix | Delete
$include = false;
[830] Fix | Delete
[831] Fix | Delete
if (stripos($b->reason, $filter) !== false) {
[832] Fix | Delete
$include = true;
[833] Fix | Delete
}
[834] Fix | Delete
[835] Fix | Delete
if (!$include && $b->type == self::TYPE_PATTERN) {
[836] Fix | Delete
if (stripos($b->hostname, $filter) !== false) { $include = true; }
[837] Fix | Delete
else if (stripos($b->userAgent, $filter) !== false) { $include = true; }
[838] Fix | Delete
else if (stripos($b->referrer, $filter) !== false) { $include = true; }
[839] Fix | Delete
else if (stripos($b->ipRange, $filter) !== false) { $include = true; }
[840] Fix | Delete
}
[841] Fix | Delete
[842] Fix | Delete
if (!$include && stripos(self::nameForType($b->type), $filter) !== false) {
[843] Fix | Delete
$include = true;
[844] Fix | Delete
}
[845] Fix | Delete
[846] Fix | Delete
if (!$include) {
[847] Fix | Delete
switch ($matchType) {
[848] Fix | Delete
case 'ip':
[849] Fix | Delete
if ($b->matchRequest($matchValue, '', '') != self::MATCH_NONE) {
[850] Fix | Delete
$include = true;
[851] Fix | Delete
}
[852] Fix | Delete
else if ($b->type == self::TYPE_LOCKOUT && wfUtils::inet_pton($matchValue) == wfUtils::inet_pton($b->ip)) {
[853] Fix | Delete
$include = true;
[854] Fix | Delete
}
[855] Fix | Delete
break;
[856] Fix | Delete
case 'ipregex':
[857] Fix | Delete
if (preg_match('/' . $matchValue . '/i', $b->ip)) {
[858] Fix | Delete
$include = true;
[859] Fix | Delete
}
[860] Fix | Delete
break;
[861] Fix | Delete
case 'literal':
[862] Fix | Delete
//Already checked above
[863] Fix | Delete
break;
[864] Fix | Delete
}
[865] Fix | Delete
}
[866] Fix | Delete
[867] Fix | Delete
if ($include) {
[868] Fix | Delete
if ($offsetProcessed < $offset) { //Still searching for the start offset
[869] Fix | Delete
$offsetProcessed++;
[870] Fix | Delete
continue;
[871] Fix | Delete
}
[872] Fix | Delete
[873] Fix | Delete
$returnBlocks[] = $b;
[874] Fix | Delete
$limitProcessed++;
[875] Fix | Delete
}
[876] Fix | Delete
[877] Fix | Delete
if ($limit != -1 && $limitProcessed >= $limit) {
[878] Fix | Delete
return $returnBlocks;
[879] Fix | Delete
}
[880] Fix | Delete
}
[881] Fix | Delete
}
[882] Fix | Delete
[883] Fix | Delete
return $returnBlocks;
[884] Fix | Delete
}
[885] Fix | Delete
[886] Fix | Delete
/**
[887] Fix | Delete
* Returns all unexpired blocks of types wfBlock::TYPE_IP_MANUAL, wfBlock::TYPE_IP_AUTOMATIC_TEMPORARY, wfBlock::TYPE_IP_AUTOMATIC_PERMANENT, wfBlock::TYPE_WFSN_TEMPORARY, wfBlock::TYPE_RATE_BLOCK, and wfBlock::TYPE_RATE_THROTTLE.
[888] Fix | Delete
*
[889] Fix | Delete
* @param bool $prefetch If true, the full data for the block is fetched rather than using lazy loading.
[890] Fix | Delete
* @return wfBlock[]
[891] Fix | Delete
*/
[892] Fix | Delete
public static function ipBlocks($prefetch = false) {
[893] Fix | Delete
return self::allBlocks($prefetch, array(self::TYPE_IP_MANUAL, self::TYPE_IP_AUTOMATIC_TEMPORARY, self::TYPE_IP_AUTOMATIC_PERMANENT, self::TYPE_WFSN_TEMPORARY, self::TYPE_RATE_BLOCK, self::TYPE_RATE_THROTTLE));
[894] Fix | Delete
}
[895] Fix | Delete
[896] Fix | Delete
/**
[897] Fix | Delete
* Finds an IP block matching the given IP, returning it if found. Returns false if none are found.
[898] Fix | Delete
*
[899] Fix | Delete
* @param string $ip
[900] Fix | Delete
* @return bool|wfBlock
[901] Fix | Delete
*/
[902] Fix | Delete
public static function findIPBlock($ip) {
[903] Fix | Delete
global $wpdb;
[904] Fix | Delete
$blocksTable = wfBlock::blocksTable();
[905] Fix | Delete
[906] Fix | Delete
$ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton($ip));
[907] Fix | Delete
[908] Fix | Delete
$query = "SELECT * FROM `{$blocksTable}` WHERE ";
[909] Fix | Delete
[910] Fix | Delete
$ofTypes = array(self::TYPE_IP_MANUAL, self::TYPE_IP_AUTOMATIC_TEMPORARY, self::TYPE_IP_AUTOMATIC_PERMANENT, self::TYPE_WFSN_TEMPORARY, self::TYPE_RATE_BLOCK, self::TYPE_RATE_THROTTLE);
[911] Fix | Delete
$query .= "`type` IN (" . implode(', ', $ofTypes) . ') AND ';
[912] Fix | Delete
$query .= "`IP` = {$ipHex} AND ";
[913] Fix | Delete
$query .= '(`expiration` = ' . self::DURATION_FOREVER . ' OR `expiration` > UNIX_TIMESTAMP()) ORDER BY `blockedTime` DESC LIMIT 1';
[914] Fix | Delete
[915] Fix | Delete
$r = $wpdb->get_row($query, ARRAY_A);
[916] Fix | Delete
if (is_array($r)) {
[917] Fix | Delete
$ip = wfUtils::inet_ntop($r['IP']);
[918] Fix | Delete
return new wfBlock($r['id'], $r['type'], $ip, $r['blockedTime'], $r['reason'], $r['lastAttempt'], $r['blockedHits'], $r['expiration'], null);
[919] Fix | Delete
}
[920] Fix | Delete
return false;
[921] Fix | Delete
}
[922] Fix | Delete
[923] Fix | Delete
/**
[924] Fix | Delete
* Returns all unexpired blocks of type wfBlock::TYPE_COUNTRY.
[925] Fix | Delete
*
[926] Fix | Delete
* @param bool $prefetch If true, the full data for the block is fetched rather than using lazy loading.
[927] Fix | Delete
* @return wfBlock[]
[928] Fix | Delete
*/
[929] Fix | Delete
public static function countryBlocks($prefetch = false) {
[930] Fix | Delete
return self::allBlocks($prefetch, array(self::TYPE_COUNTRY));
[931] Fix | Delete
}
[932] Fix | Delete
[933] Fix | Delete
/**
[934] Fix | Delete
* Returns whether or not there is a country block rule.
[935] Fix | Delete
*
[936] Fix | Delete
* @return bool
[937] Fix | Delete
*/
[938] Fix | Delete
public static function hasCountryBlock() {
[939] Fix | Delete
$countryBlocks = self::countryBlocks();
[940] Fix | Delete
return !empty($countryBlocks);
[941] Fix | Delete
}
[942] Fix | Delete
[943] Fix | Delete
/**
[944] Fix | Delete
* Returns the value for the country blocking bypass cookie.
[945] Fix | Delete
*
[946] Fix | Delete
* @return string
[947] Fix | Delete
*/
[948] Fix | Delete
public static function countryBlockingBypassCookieValue() {
[949] Fix | Delete
$val = wfConfig::get('cbl_cookieVal', false);
[950] Fix | Delete
if (!$val) {
[951] Fix | Delete
$val = uniqid();
[952] Fix | Delete
wfConfig::set('cbl_cookieVal', $val);
[953] Fix | Delete
}
[954] Fix | Delete
return $val;
[955] Fix | Delete
}
[956] Fix | Delete
[957] Fix | Delete
/**
[958] Fix | Delete
* Returns all unexpired blocks of type wfBlock::TYPE_PATTERN.
[959] Fix | Delete
*
[960] Fix | Delete
* @param bool $prefetch If true, the full data for the block is fetched rather than using lazy loading.
[961] Fix | Delete
* @return wfBlock[]
[962] Fix | Delete
*/
[963] Fix | Delete
public static function patternBlocks($prefetch = false) {
[964] Fix | Delete
return self::allBlocks($prefetch, array(self::TYPE_PATTERN));
[965] Fix | Delete
}
[966] Fix | Delete
[967] Fix | Delete
/**
[968] Fix | Delete
* Returns all unexpired lockouts (type wfBlock::TYPE_LOCKOUT).
[969] Fix | Delete
*
[970] Fix | Delete
* @param bool $prefetch If true, the full data for the block is fetched rather than using lazy loading.
[971] Fix | Delete
* @return wfBlock[]
[972] Fix | Delete
*/
[973] Fix | Delete
public static function lockouts($prefetch = false) {
[974] Fix | Delete
return self::allBlocks($prefetch, array(self::TYPE_LOCKOUT));
[975] Fix | Delete
}
[976] Fix | Delete
[977] Fix | Delete
/**
[978] Fix | Delete
* Returns the lockout record for the given IP if it exists.
[979] Fix | Delete
*
[980] Fix | Delete
* @param string $ip
[981] Fix | Delete
* @return bool|wfBlock
[982] Fix | Delete
*/
[983] Fix | Delete
public static function lockoutForIP($ip) {
[984] Fix | Delete
global $wpdb;
[985] Fix | Delete
$blocksTable = wfBlock::blocksTable();
[986] Fix | Delete
$ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton($ip));
[987] Fix | Delete
[988] Fix | Delete
$row = $wpdb->get_row($wpdb->prepare("SELECT * FROM `{$blocksTable}` WHERE `IP` = {$ipHex} AND `type` = %d AND (`expiration` = %d OR `expiration` > UNIX_TIMESTAMP())", self::TYPE_LOCKOUT, self::DURATION_FOREVER), ARRAY_A);
[989] Fix | Delete
if ($row) {
[990] Fix | Delete
return new wfBlock($row['id'], $row['type'], wfUtils::inet_ntop($row['IP']), $row['blockedTime'], $row['reason'], $row['lastAttempt'], $row['blockedHits'], $row['expiration'], null);
[991] Fix | Delete
}
[992] Fix | Delete
[993] Fix | Delete
return false;
[994] Fix | Delete
}
[995] Fix | Delete
[996] Fix | Delete
/**
[997] Fix | Delete
* Removes all blocks whose ID is in the given array.
[998] Fix | Delete
*
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function