|
|
@ -12,12 +12,14 @@ class Bans { |
|
|
|
return $ipstr; |
|
|
|
} |
|
|
|
|
|
|
|
if (strlen($ipstart) != strlen($ipend)) |
|
|
|
if (strlen($ipstart) != strlen($ipend)) { |
|
|
|
return '???'; // What the fuck are you doing, son? |
|
|
|
} |
|
|
|
|
|
|
|
$range = CIDR::range_to_cidr(inet_ntop($ipstart), inet_ntop($ipend)); |
|
|
|
if ($range !== false) |
|
|
|
if ($range !== false) { |
|
|
|
return $range; |
|
|
|
} |
|
|
|
|
|
|
|
return '???'; |
|
|
|
} |
|
|
@ -101,13 +103,13 @@ class Bans { |
|
|
|
list($ipstart, $ipend) = self::calc_cidr($mask); |
|
|
|
} elseif (preg_match('@^[:a-z\d]+/\d+$@i', $mask)) { |
|
|
|
list($ipv6, $bits) = explode('/', $mask); |
|
|
|
if ($bits > 128) |
|
|
|
if ($bits > 128) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
list($ipstart, $ipend) = self::calc_cidr($mask); |
|
|
|
} else { |
|
|
|
if (($ipstart = @inet_pton($mask)) === false) |
|
|
|
return false; |
|
|
|
} elseif (($ipstart = @inet_pton($mask)) === false) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
return array($ipstart, $ipend); |
|
|
@ -135,8 +137,9 @@ class Bans { |
|
|
|
if ($ban['expires'] && ($ban['seen'] || !$config['require_ban_view']) && $ban['expires'] < time()) { |
|
|
|
self::delete($ban['id']); |
|
|
|
} else { |
|
|
|
if ($ban['post']) |
|
|
|
if ($ban['post']) { |
|
|
|
$ban['post'] = json_decode($ban['post'], true); |
|
|
|
} |
|
|
|
$ban['mask'] = self::range_to_string(array($ban['ipstart'], $ban['ipend'])); |
|
|
|
$ban_list[] = $ban; |
|
|
|
} |
|
|
@ -149,16 +152,18 @@ class Bans { |
|
|
|
$query = query("SELECT ``bans``.*, `username` FROM ``bans`` |
|
|
|
LEFT JOIN ``mods`` ON ``mods``.`id` = `creator` |
|
|
|
ORDER BY `created` DESC") or error(db_error()); |
|
|
|
$bans = $query->fetchAll(PDO::FETCH_ASSOC); |
|
|
|
$bans = $query->fetchAll(PDO::FETCH_ASSOC); |
|
|
|
|
|
|
|
if ($board_access && $board_access[0] == '*') $board_access = false; |
|
|
|
if ($board_access && $board_access[0] == '*') { |
|
|
|
$board_access = false; |
|
|
|
} |
|
|
|
|
|
|
|
$out ? fputs($out, "[") : print("["); |
|
|
|
|
|
|
|
$end = end($bans); |
|
|
|
|
|
|
|
foreach ($bans as &$ban) { |
|
|
|
$ban['mask'] = self::range_to_string(array($ban['ipstart'], $ban['ipend'])); |
|
|
|
foreach ($bans as &$ban) { |
|
|
|
$ban['mask'] = self::range_to_string(array($ban['ipstart'], $ban['ipend'])); |
|
|
|
|
|
|
|
$hide_message = false; |
|
|
|
foreach ($hide_regexes as $regex) { |
|
|
@ -204,24 +209,25 @@ class Bans { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
$out ? fputs($out, "]") : print("]"); |
|
|
|
|
|
|
|
$out ? fputs($out, "]") : print("]"); |
|
|
|
} |
|
|
|
|
|
|
|
static public function seen($ban_id) { |
|
|
|
$query = query("UPDATE ``bans`` SET `seen` = 1 WHERE `id` = " . (int)$ban_id) or error(db_error()); |
|
|
|
rebuildThemes('bans'); |
|
|
|
query("UPDATE ``bans`` SET `seen` = 1 WHERE `id` = " . (int)$ban_id) or error(db_error()); |
|
|
|
rebuildThemes('bans'); |
|
|
|
} |
|
|
|
|
|
|
|
static public function purge() { |
|
|
|
$query = query("DELETE FROM ``bans`` WHERE `expires` IS NOT NULL AND `expires` < " . time() . " AND `seen` = 1") or error(db_error()); |
|
|
|
query("DELETE FROM ``bans`` WHERE `expires` IS NOT NULL AND `expires` < " . time() . " AND `seen` = 1") or error(db_error()); |
|
|
|
rebuildThemes('bans'); |
|
|
|
} |
|
|
|
|
|
|
|
static public function delete($ban_id, $modlog = false, $boards = false, $dont_rebuild = false) { |
|
|
|
global $config; |
|
|
|
|
|
|
|
if ($boards && $boards[0] == '*') $boards = false; |
|
|
|
if ($boards && $boards[0] == '*') { |
|
|
|
$boards = false; |
|
|
|
} |
|
|
|
|
|
|
|
if ($modlog) { |
|
|
|
$query = query("SELECT `ipstart`, `ipend`, `board` FROM ``bans`` WHERE `id` = " . (int)$ban_id) or error(db_error()); |
|
|
@ -230,8 +236,9 @@ class Bans { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
if ($boards !== false && !in_array($ban['board'], $boards)) |
|
|
|
error($config['error']['noaccess']); |
|
|
|
if ($boards !== false && !in_array($ban['board'], $boards)) { |
|
|
|
error($config['error']['noaccess']); |
|
|
|
} |
|
|
|
|
|
|
|
$mask = self::range_to_string(array($ban['ipstart'], $ban['ipend'])); |
|
|
|
|
|
|
@ -241,7 +248,9 @@ class Bans { |
|
|
|
|
|
|
|
query("DELETE FROM ``bans`` WHERE `id` = " . (int)$ban_id) or error(db_error()); |
|
|
|
|
|
|
|
if (!$dont_rebuild) rebuildThemes('bans'); |
|
|
|
if (!$dont_rebuild) { |
|
|
|
rebuildThemes('bans'); |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
@ -259,10 +268,11 @@ class Bans { |
|
|
|
$query = prepare("INSERT INTO ``bans`` VALUES (NULL, :ipstart, :ipend, :time, :expires, :board, :mod, :reason, 0, :post)"); |
|
|
|
|
|
|
|
$query->bindValue(':ipstart', $range[0]); |
|
|
|
if ($range[1] !== false && $range[1] != $range[0]) |
|
|
|
if ($range[1] !== false && $range[1] != $range[0]) { |
|
|
|
$query->bindValue(':ipend', $range[1]); |
|
|
|
else |
|
|
|
} else { |
|
|
|
$query->bindValue(':ipend', null, PDO::PARAM_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
$query->bindValue(':mod', $mod_id); |
|
|
|
$query->bindValue(':time', time()); |
|
|
@ -271,8 +281,9 @@ class Bans { |
|
|
|
$reason = escape_markup_modifiers($reason); |
|
|
|
markup($reason); |
|
|
|
$query->bindValue(':reason', $reason); |
|
|
|
} else |
|
|
|
} else { |
|
|
|
$query->bindValue(':reason', null, PDO::PARAM_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
if ($length) { |
|
|
|
if (is_int($length) || ctype_digit($length)) { |
|
|
@ -285,16 +296,18 @@ class Bans { |
|
|
|
$query->bindValue(':expires', null, PDO::PARAM_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
if ($ban_board) |
|
|
|
if ($ban_board) { |
|
|
|
$query->bindValue(':board', $ban_board); |
|
|
|
else |
|
|
|
} else { |
|
|
|
$query->bindValue(':board', null, PDO::PARAM_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
if ($post) { |
|
|
|
$post['board'] = $board['uri']; |
|
|
|
$query->bindValue(':post', json_encode($post)); |
|
|
|
} else |
|
|
|
} else { |
|
|
|
$query->bindValue(':post', null, PDO::PARAM_NULL); |
|
|
|
} |
|
|
|
|
|
|
|
$query->execute() or error(db_error($query)); |
|
|
|
|
|
|
|