X-Git-Url: https://jfr.im/git/irc/unrealircd/unrealircd-webpanel.git/blobdiff_plain/6bc0b9a0202e456b46170a901f94c2b8921af4a2..de0b7a0925ecd58cf3f5ddecfee159276343ec75:/spamfilter.php diff --git a/spamfilter.php b/spamfilter.php index ecb3a4d..8a8a749 100644 --- a/spamfilter.php +++ b/spamfilter.php @@ -1,11 +1,12 @@ Array("short_text" => "chanmsg", "long_text" => "Channel message"), "p"=>Array("short_text" => "usermsg", "long_text" => "User message"), "n"=>Array("short_text" => "usernotice", "long_text" => "User notice"), + "c"=>Array("short_text" => "chanmsg", "long_text" => "Channel message"), "N"=>Array("short_text" => "channotice", "long_text" => "Channel notice"), "P"=>Array("short_text" => "part", "long_text" => "Part message"), "q"=>Array("short_text" => "quit", "long_text" => "Quit message"), @@ -13,12 +14,12 @@ $spamfilter_target_info = Array( "a"=>Array("short_text" => "away", "long_text" => "Away message"), "t"=>Array("short_text" => "topic", "long_text" => "Channel topic"), "T"=>Array("short_text" => "message-tag", "long_text" => "Message tag"), - "u"=>Array("short_text" => "usermask", "long_text" => "User mask"), + "u"=>Array("short_text" => "usermask", "long_text" => "User mask (nick!user@host:realname)"), ); function spamfilter_targets_to_string($targets) { - GLOBAL $spamfilter_target_info; + global $spamfilter_target_info; $ret = ''; for ($i = 0, $targs = ""; $i < strlen($targets); $i++) @@ -35,7 +36,7 @@ function spamfilter_targets_to_string($targets) function spamfilter_targets_to_string_with_info($targets) { - GLOBAL $spamfilter_target_info; + global $spamfilter_target_info; $ret = ''; for ($i = 0, $targs = ""; $i < strlen($targets); $i++) @@ -50,6 +51,29 @@ function spamfilter_targets_to_string_with_info($targets) return $ret; } +function spamfilter_target_name_to_char($name) +{ + global $spamfilter_target_info; + + foreach ($spamfilter_target_info as $char=>$e) + { + if ($e["short_text"] == $name) + return $char; + } + return false; +} + +function spamfilter_targets_from_array_to_chars($ar) +{ + $ret = ''; + foreach ($ar as $name) + { + $c = spamfilter_target_name_to_char($name); + if ($c !== false) + $ret .= $c; + } + return $ret; +} if (!empty($_POST)) { @@ -58,95 +82,66 @@ if (!empty($_POST)) if (($sf = (isset($_POST['sf_add'])) ? $_POST['sf_add'] : false)) // if it was a spamfilter entry { - /* get targets */ - $targets = []; // empty arrae - foreach($_POST as $key => $value) - { - if (substr($key, 0, 7) == "target_") - $targets[] = str_replace(["target_", "_"], ["", "-"], $key); - } - if (empty($targets)) - Message::Fail("No target was specified"); - - if (!isset($_POST['sf_bantype'])) - Message::Fail("No action was chosen"); - + if (!current_user_can(PERMISSION_SPAMFILTER_ADD)) + Message::Fail("Could not add Spamfilter entry: Permission denied"); else { - - $bantype = $_POST['sf_bantype']; - $targ_chars = ""; - foreach($targets as $targ) + + /* get targets */ + $targets = []; // empty arrae + foreach($_POST as $key => $value) { - switch ($targ) { - case "channel": - $targ_chars .= "c"; - break; - case "private": - $targ_chars .= "p"; - break; - case "channel-notice": - $targ_chars .= "N"; - break; - case "private-notice": - $targ_chars .= "n"; - break; - case "part": - $targ_chars .= "P"; - break; - case "quit": - $targ_chars .= "q"; - break; - case "dcc": - $targ_chars .= "d"; - break; - case "away": - $targ_chars .= "a"; - break; - case "topic": - $targ_chars .= "t"; - break; - case "messagetag": - $targ_chars .= "T"; - break; - case "user": - $targ_chars .= "u"; - break; - } + if (substr($key, 0, 7) == "target_") + $targets[] = str_replace(["target_", "_"], ["", "-"], $key); } - /* duplicate code for now [= */ - $banlen_w = (isset($_POST['banlen_w'])) ? $_POST['banlen_w'] : NULL; - $banlen_d = (isset($_POST['banlen_d'])) ? $_POST['banlen_d'] : NULL; - $banlen_h = (isset($_POST['banlen_h'])) ? $_POST['banlen_h'] : NULL; - $duration = ""; - if (!$banlen_d && !$banlen_h && !$banlen_w) - $duration .= "0"; - + if (empty($targets)) + Message::Fail("No target was specified"); + + if (!isset($_POST['sf_bantype'])) + Message::Fail("No action was chosen"); + else { - if ($banlen_w) - $duration .= $banlen_w; - if ($banlen_d) - $duration .= $banlen_d; - if ($banlen_h) - $duration .= $banlen_h; - } - $match_type = $_POST['matchtype']; // should default to 'simple' - $reason = isset($_POST['ban_reason']) ? $_POST['ban_reason'] : "No reason"; - $soft = (isset($_POST['soft'])) ? true : false; - if ($soft) - $targ_chars = "%" . $targ_chars; - if ($rpc->spamfilter()->add($sf, $match_type, $targ_chars, $bantype, $duration, $reason)) - Message::Success("Added spamfilter entry \"$sf\" [match type: $match_type] [targets: $targ_chars] [reason: $reason]"); + + $bantype = $_POST['sf_bantype']; + $targ_chars = spamfilter_targets_from_array_to_chars($targets); + /* duplicate code for now [= */ + $banlen_w = (isset($_POST['banlen_w'])) ? $_POST['banlen_w'] : NULL; + $banlen_d = (isset($_POST['banlen_d'])) ? $_POST['banlen_d'] : NULL; + $banlen_h = (isset($_POST['banlen_h'])) ? $_POST['banlen_h'] : NULL; + $duration = ""; + if (!$banlen_d && !$banlen_h && !$banlen_w) + $duration .= "0"; + else - Message::Fail("Could not add spamfilter entry \"$sf\" [match type: $match_type] [targets: $targ_chars] [reason: $reason]: $rpc->error"); + { + if ($banlen_w) + $duration .= $banlen_w; + if ($banlen_d) + $duration .= $banlen_d; + if ($banlen_h) + $duration .= $banlen_h; + } + $match_type = $_POST['matchtype']; // should default to 'simple' + $reason = isset($_POST['ban_reason']) ? $_POST['ban_reason'] : "No reason"; + $soft = (isset($_POST['soft'])) ? true : false; + if ($soft) + $bantype = "soft-$bantype"; + if ($rpc->spamfilter()->add($sf, $match_type, $targ_chars, $bantype, $duration, $reason)) + Message::Success("Added spamfilter entry \"$sf\" [match type: $match_type] [targets: $targ_chars] [reason: $reason]"); + else + Message::Fail("Could not add spamfilter entry \"$sf\" [match type: $match_type] [targets: $targ_chars] [reason: $reason]: $rpc->error"); + } } } else if (!empty($_POST['sf'])) - foreach ($_POST as $key => $value) - foreach ($value as $tok) + { + if (!current_user_can(PERMISSION_SPAMFILTER_DEL)) + Message::Fail("Could not delete Spamfilter entry or entries: Permission denied"); + else + foreach ($_POST['sf'] as $key => $value) { - $tok = explode(",", $tok); + $tok = explode(",", $value); $name = base64_decode($tok[0]); $match_type = base64_decode($tok[1]); $spamfilter_targets = base64_decode($tok[2]); @@ -156,6 +151,7 @@ if (!empty($_POST)) else Message::Fail("Unable to remove spamfilter on $name: $rpc->error"); } + } } @@ -163,7 +159,7 @@ $spamfilter = $rpc->spamfilter()->getAll(); ?>

Spamfilter Overview


-

- +