|
@@ -1,5 +1,5 @@
|
|
|
<?php
|
|
|
-function fail2ban($_action, $_data = null) {
|
|
|
+function fail2ban($_action, $_data = null, $_extra = null) {
|
|
|
global $redis;
|
|
|
$_data_log = $_data;
|
|
|
switch ($_action) {
|
|
@@ -329,5 +329,68 @@ function fail2ban($_action, $_data = null) {
|
|
|
'msg' => 'f2b_modified'
|
|
|
);
|
|
|
break;
|
|
|
+ case 'banlist':
|
|
|
+ try {
|
|
|
+ $f2b_options = json_decode($redis->Get('F2B_OPTIONS'), true);
|
|
|
+ }
|
|
|
+ catch (RedisException $e) {
|
|
|
+ $_SESSION['return'][] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),
|
|
|
+ 'msg' => array('redis_error', $e)
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (is_array($_extra)) {
|
|
|
+ $_extra = $_extra[0];
|
|
|
+ }
|
|
|
+ if ($_extra != $f2b_options['banlist_id']){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch ($_data) {
|
|
|
+ case 'get':
|
|
|
+ try {
|
|
|
+ $bl = $redis->hGetAll('F2B_BLACKLIST');
|
|
|
+ $active_bans = $redis->hGetAll('F2B_ACTIVE_BANS');
|
|
|
+ }
|
|
|
+ catch (RedisException $e) {
|
|
|
+ $_SESSION['return'][] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),
|
|
|
+ 'msg' => array('redis_error', $e)
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $banlist = implode("\n", array_merge(array_keys($bl), array_keys($active_bans)));
|
|
|
+ return $banlist;
|
|
|
+ break;
|
|
|
+ case 'refresh':
|
|
|
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $f2b_options['banlist_id'] = uuid4();
|
|
|
+ try {
|
|
|
+ $redis->Set('F2B_OPTIONS', json_encode($f2b_options));
|
|
|
+ }
|
|
|
+ catch (RedisException $e) {
|
|
|
+ $_SESSION['return'][] = array(
|
|
|
+ 'type' => 'danger',
|
|
|
+ 'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),
|
|
|
+ 'msg' => array('redis_error', $e)
|
|
|
+ );
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $_SESSION['return'][] = array(
|
|
|
+ 'type' => 'success',
|
|
|
+ 'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),
|
|
|
+ 'msg' => 'f2b_banlist_refreshed'
|
|
|
+ );
|
|
|
+ return true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
}
|