| 
					
				 | 
			
			
				@@ -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;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }
 
			 |