use timestamps for bans, consistency at last /o/

This commit is contained in:
Shish 2019-11-03 23:17:09 +00:00
parent f15a95b4de
commit bcf7947837

View File

@ -108,8 +108,8 @@ class IPBan extends Extension
public function onAddIPBan(AddIPBanEvent $event) public function onAddIPBan(AddIPBanEvent $event)
{ {
global $cache, $user, $database; global $cache, $user, $database;
$sql = "INSERT INTO bans (ip, reason, end_timestamp, banner_id) VALUES (:ip, :reason, :end, :admin_id)"; $sql = "INSERT INTO bans (ip, reason, expires, banner_id) VALUES (:ip, :reason, :expires, :admin_id)";
$database->Execute($sql, ["ip"=>$event->ip, "reason"=>$event->reason, "end"=>strtotime($event->end), "admin_id"=>$user->id]); $database->Execute($sql, ["ip"=>$event->ip, "reason"=>$event->reason, "expires"=>$event->end, "admin_id"=>$user->id]);
$cache->delete("ip_bans_sorted"); $cache->delete("ip_bans_sorted");
log_info("ipban", "Banned {$event->ip} because '{$event->reason}' until {$event->end}"); log_info("ipban", "Banned {$event->ip} because '{$event->reason}' until {$event->end}");
} }
@ -136,13 +136,13 @@ class IPBan extends Extension
id SCORE_AIPK, id SCORE_AIPK,
banner_id INTEGER NOT NULL, banner_id INTEGER NOT NULL,
ip SCORE_INET NOT NULL, ip SCORE_INET NOT NULL,
end_timestamp INTEGER,
reason TEXT NOT NULL, reason TEXT NOT NULL,
added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires TIMESTAMP NULL DEFAULT NULL,
FOREIGN KEY (banner_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (banner_id) REFERENCES users(id) ON DELETE CASCADE,
"); ");
$database->execute("CREATE INDEX bans__end_timestamp ON bans(end_timestamp)"); $database->execute("CREATE INDEX bans__expires ON bans(expires)");
$this->set_version("ext_ipban_version", 8); $this->set_version("ext_ipban_version", 10);
} }
// === // ===
@ -198,14 +198,22 @@ class IPBan extends Extension
if ($this->get_version("ext_ipban_version") == 7) { if ($this->get_version("ext_ipban_version") == 7) {
$database->execute($database->scoreql_to_sql("ALTER TABLE bans CHANGE ip ip SCORE_INET")); $database->execute($database->scoreql_to_sql("ALTER TABLE bans CHANGE ip ip SCORE_INET"));
$database->execute($database->scoreql_to_sql("ALTER TABLE bans ADD COLUMN added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP")); $database->execute("ALTER TABLE bans ADD COLUMN added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP");
$this->set_version("ext_ipban_version", 8); $this->set_version("ext_ipban_version", 8);
} }
if ($this->get_version("ext_ipban_version") == 8) { if ($this->get_version("ext_ipban_version") == 8) {
$database->execute($database->scoreql_to_sql("ALTER TABLE bans ADD COLUMN mode VARCHAR(16) NOT NULL DEFAULT 'block'")); $database->execute("ALTER TABLE bans ADD COLUMN mode VARCHAR(16) NOT NULL DEFAULT 'block'");
$this->set_version("ext_ipban_version", 9); $this->set_version("ext_ipban_version", 9);
} }
if ($this->get_version("ext_ipban_version") == 9) {
$database->execute("ALTER TABLE bans ADD COLUMN expire NULL TIMESTAMP DEFAULT NULL");
$database->execute("UPDATE bans SET expire = dateadd(s, end_timestamp, '1970-01-01 00:00:00')");
$database->execute("ALTER TABLE bans DROP COLUMN end_timestamp");
$database->execute("CREATE INDEX bans__expires ON bans(expires)");
$this->set_version("ext_ipban_version", 10);
}
} }
private function check_ip_ban() private function check_ip_ban()
@ -242,7 +250,7 @@ class IPBan extends Extension
) { ) {
$reason = $row[$prefix.'reason']; $reason = $row[$prefix.'reason'];
$admin = User::by_id($row[$prefix.'banner_id']); $admin = User::by_id($row[$prefix.'banner_id']);
$date = date("Y-m-d", $row[$prefix.'end_timestamp']); $date = $row['expire'];
$msg = $config->get_string("ipban_message"); $msg = $config->get_string("ipban_message");
$msg = str_replace('$IP', $ip, $msg); $msg = str_replace('$IP', $ip, $msg);
$msg = str_replace('$DATE', $date, $msg); $msg = str_replace('$DATE', $date, $msg);
@ -271,7 +279,7 @@ class IPBan extends Extension
SELECT bans.*, users.name as banner_name SELECT bans.*, users.name as banner_name
FROM bans FROM bans
JOIN users ON banner_id = users.id JOIN users ON banner_id = users.id
ORDER BY added, end_timestamp, bans.id ORDER BY added, expires, bans.id
"); ");
if ($bans) { if ($bans) {
return $bans; return $bans;
@ -288,9 +296,9 @@ class IPBan extends Extension
SELECT bans.*, users.name as banner_name SELECT bans.*, users.name as banner_name
FROM bans FROM bans
JOIN users ON banner_id = users.id JOIN users ON banner_id = users.id
WHERE (end_timestamp > :end_timestamp) OR (end_timestamp IS NULL) WHERE (expires > CURRENT_TIMESTAMP) OR (expires IS NULL)
ORDER BY end_timestamp, bans.id ORDER BY expires, bans.id
", ["end_timestamp"=>time()]); ");
if ($bans) { if ($bans) {
return $bans; return $bans;