support custom ban modes

This commit is contained in:
Shish 2019-11-28 14:57:56 +00:00
parent 7bf60542df
commit 9e084cd615

View file

@ -54,12 +54,14 @@ class RemoveIPBanEvent extends Event
class AddIPBanEvent extends Event class AddIPBanEvent extends Event
{ {
public $ip; public $ip;
public $mode;
public $reason; public $reason;
public $expires; public $expires;
public function __construct(string $ip, string $reason, ?string $expires) public function __construct(string $ip, string $mode, string $reason, ?string $expires)
{ {
$this->ip = trim($ip); $this->ip = trim($ip);
$this->mode = $mode;
$this->reason = trim($reason); $this->reason = trim($reason);
$this->expires = $expires; $this->expires = $expires;
} }
@ -92,8 +94,8 @@ class IPBan extends Extension
if ($user->can(Permissions::BAN_IP)) { if ($user->can(Permissions::BAN_IP)) {
if ($event->get_arg(0) == "create") { if ($event->get_arg(0) == "create") {
$user->ensure_authed(); $user->ensure_authed();
$input = validate_input(["c_ip"=>"string", "c_reason"=>"string", "c_expires"=>"optional,date"]); $input = validate_input(["c_ip"=>"string", "c_mode"=>"string", "c_reason"=>"string", "c_expires"=>"optional,date"]);
send_event(new AddIPBanEvent($input['c_ip'], $input['c_reason'], $input['c_expires'])); send_event(new AddIPBanEvent($input['c_ip'], $input['c_mode'], $input['c_reason'], $input['c_expires']));
flash_message("Ban for {$input['c_ip']} added"); flash_message("Ban for {$input['c_ip']} added");
$page->set_mode(PageMode::REDIRECT); $page->set_mode(PageMode::REDIRECT);
$page->set_redirect(make_link("ip_ban/list")); $page->set_redirect(make_link("ip_ban/list"));
@ -145,8 +147,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, expires, banner_id) VALUES (:ip, :reason, :expires, :admin_id)"; $sql = "INSERT INTO bans (ip, mode, reason, expires, banner_id) VALUES (:ip, :mode, :reason, :expires, :admin_id)";
$database->Execute($sql, ["ip"=>$event->ip, "reason"=>$event->reason, "expires"=>$event->expires, "admin_id"=>$user->id]); $database->Execute($sql, ["ip"=>$event->ip, "mode"=>$event->mode, "reason"=>$event->reason, "expires"=>$event->expires, "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->expires}"); log_info("ipban", "Banned {$event->ip} because '{$event->reason}' until {$event->expires}");
} }