From e0cdd463f48784e5f2c04670c68442cf12761d08 Mon Sep 17 00:00:00 2001
From: Kijin Sung
Caution: if you block an excessively wide range, you may also end up blocking innocent users.';
$lang->cmd_block_range = 'IP addresses with the same %d last blocks';
+$lang->cmd_spamfilter_except_ip = 'Whitelist IP';
+$lang->cmd_spamfilter_except_ip_help = 'IPs or IP ranges entered here will not be blocked.
e.g. 123.45.67.89, 123.45.67.0/24, 123.45.67.*';
$lang->unit_write_count = 'times';
$lang->add = 'Add';
$lang->msg_duplicate = 'Duplicate';
diff --git a/modules/spamfilter/lang/ko.php b/modules/spamfilter/lang/ko.php
index 1f95d6b41..82f13a8f7 100644
--- a/modules/spamfilter/lang/ko.php
+++ b/modules/spamfilter/lang/ko.php
@@ -39,6 +39,8 @@ $lang->cmd_ipv6_block_range = 'IPv6 차단 범위';
$lang->cmd_block_range_self = '해당 IP만 차단';
$lang->cmd_block_range_help = '스패머 발견시 비슷한 대역의 IP를 한꺼번에 차단할 수 있습니다. 숫자가 작을수록 광범위하게 차단됩니다.
지나치게 광범위하게 차단하면 정상적인 사용자에게 피해가 발생할 수 있으니 주의하시기 바랍니다.';
$lang->cmd_block_range = '마지막 %d자리가 같은 IP를 모두 차단';
+$lang->cmd_spamfilter_except_ip = '예외 IP';
+$lang->cmd_spamfilter_except_ip_help = '차단하지 않을 IP 또는 IP 대역을 한 줄에 하나씩 입력하십시오.
예: 123.45.67.89, 123.45.67.0/24, 123.45.67.*';
$lang->unit_write_count = '회';
$lang->add = '추가';
$lang->msg_duplicate = '이미 존재합니다.';
diff --git a/modules/spamfilter/spamfilter.admin.controller.php b/modules/spamfilter/spamfilter.admin.controller.php
index ab17dd9ad..e4887f600 100644
--- a/modules/spamfilter/spamfilter.admin.controller.php
+++ b/modules/spamfilter/spamfilter.admin.controller.php
@@ -20,7 +20,7 @@ class SpamfilterAdminController extends Spamfilter
$config = ModuleModel::getModuleConfig('spamfilter') ?: new stdClass;
// Get the default information
- $args = Context::gets('limits', 'limits_interval', 'limits_count', 'ipv4_block_range', 'ipv6_block_range', 'custom_message');
+ $args = Context::gets('limits', 'limits_interval', 'limits_count', 'ipv4_block_range', 'ipv6_block_range', 'except_ip', 'custom_message');
// Set default values
if($args->limits != 'Y')
@@ -35,6 +35,7 @@ class SpamfilterAdminController extends Spamfilter
{
$args->ipv6_block_range = '';
}
+ $args->except_ip = array_map('trim', preg_split('/[\n,]/', trim($args->except_ip ?? ''), -1, \PREG_SPLIT_NO_EMPTY));
$args->limits_interval = intval($args->limits_interval);
$args->limits_count = intval($args->limits_count);
$args->custom_message = escape(utf8_trim($args->custom_message));
diff --git a/modules/spamfilter/spamfilter.model.php b/modules/spamfilter/spamfilter.model.php
index 7318109cc..feee6bf42 100644
--- a/modules/spamfilter/spamfilter.model.php
+++ b/modules/spamfilter/spamfilter.model.php
@@ -169,6 +169,14 @@ class SpamfilterModel extends Spamfilter
$limit_count = $config->limits_count ?: 3;
$interval = $config->limits_interval ?: 10;
+ if (!empty($config->except_ip))
+ {
+ if (Rhymix\Framework\Filters\IpFilter::inRanges(\RX_CLIENT_IP, $config->except_ip))
+ {
+ return new BaseObject();
+ }
+ }
+
$count = $this->getLogCount($interval);
// Ban the IP address if the interval is exceeded
@@ -183,7 +191,7 @@ class SpamfilterModel extends Spamfilter
$suffix = $config->ipv6_block_range ?: '';
}
- $oSpamFilterController = getController('spamfilter');
+ $oSpamFilterController = SpamfilterController::getInstance();
$oSpamFilterController->insertIP(\RX_CLIENT_IP . $suffix, 'AUTO-DENIED : Over limit');
return new BaseObject(-1, 'msg_alert_registered_denied_ip');
}
diff --git a/modules/spamfilter/tpl/config_block.html b/modules/spamfilter/tpl/config_block.html
index aca0b042d..da08f708c 100644
--- a/modules/spamfilter/tpl/config_block.html
+++ b/modules/spamfilter/tpl/config_block.html
@@ -1,6 +1,6 @@
{$lang->cmd_block_range_help}
+{$lang->cmd_spamfilter_except_ip_help}
+