Просмотр исходного кода

[WebUI] Extend firewall rules pages to support ipset dropdown option

Robert Zollner 5 лет назад
Родитель
Сommit
4b1efc8bd4

+ 17 - 0
web/add/firewall/index.php

@@ -12,6 +12,23 @@ if ($_SESSION['user'] != 'admin') {
     exit;
     exit;
 }
 }
 
 
+// Get ipset lists
+exec (HESTIA_CMD."v-list-firewall-ipset 'json'", $output, $return_var);
+check_return_code($return_var,$output);
+$data = json_decode(implode('', $output), true);
+
+$ipset_lists=[];
+foreach($data as $key => $value) {
+    if(isset($value['SUSPENDED']) && $value['SUSPENDED'] === 'yes') {
+        continue;
+    }
+    if(isset($value['IP_VERSION']) && $value['IP_VERSION'] !== 'v4') {
+        continue;
+    }
+    array_push($ipset_lists, ['name'=>$key]);
+}
+$ipset_lists_json=json_encode($ipset_lists);
+
 // Check POST request
 // Check POST request
 if (!empty($_POST['ok'])) {
 if (!empty($_POST['ok'])) {
 
 

+ 17 - 0
web/edit/firewall/index.php

@@ -41,6 +41,23 @@ if ( $v_suspended == 'yes' ) {
     $v_status =  'active';
     $v_status =  'active';
 }
 }
 
 
+// Get ipset lists
+exec (HESTIA_CMD."v-list-firewall-ipset 'json'", $output, $return_var);
+check_return_code($return_var,$output);
+$data = json_decode(implode('', $output), true);
+
+$ipset_lists=[];
+foreach($data as $key => $value) {
+    if(isset($value['SUSPENDED']) && $value['SUSPENDED'] === 'yes') {
+        continue;
+    }
+    if(isset($value['IP_VERSION']) && $value['IP_VERSION'] !== 'v4') {
+        continue;
+    }
+    array_push($ipset_lists, ['name'=>$key]);
+}
+$ipset_lists_json=json_encode($ipset_lists);
+
 // Check POST request
 // Check POST request
 if (!empty($_POST['save'])) {
 if (!empty($_POST['save'])) {
 
 

+ 28 - 2
web/templates/admin/add_firewall.html

@@ -98,7 +98,10 @@
                             </tr>
                             </tr>
                             <tr>
                             <tr>
                                 <td>
                                 <td>
-                                    <input type="text" size="20" class="vst-input" name="v_ip" value="<?=htmlentities(trim($v_ip, "'"))?>">
+                                    <select class="vst-list" id="quickips_list" onchange="this.nextElementSibling.value=this.value">
+                                        <option value="">clear</option>
+                                    </select>
+                                    <input type="text" size="20" class="vst-input vst-list-editor" name="v_ip" value="<?=htmlentities(trim($v_ip, "'"))?>">
                                 </td>
                                 </td>
                             </tr>
                             </tr>
                             <tr>
                             <tr>
@@ -120,4 +123,27 @@
             </table>
             </table>
         </from>
         </from>
 
 
-    </div>
+    </div>
+
+    <script>
+        var iplists = JSON.parse('<?=$ipset_lists_json?>');
+        iplists.sort(function (a, b) {
+            return a.name > b.name;
+        });
+
+        $(function() {
+            var targetelement = document.getElementById('quickips_list');
+
+            var newEl = document.createElement("option");
+            newEl.text = "Ipset Lists";
+            newEl.disabled = true;
+            targetelement.appendChild(newEl);
+
+            iplists.forEach(iplist => {
+                var newEl = document.createElement("option");
+                newEl.text = iplist.name;
+                newEl.value = "ipset:" + iplist.name;
+                targetelement.appendChild(newEl);
+            });
+        });
+    </script>

+ 27 - 1
web/templates/admin/edit_firewall.html

@@ -99,7 +99,10 @@
                             </tr>
                             </tr>
                             <tr>
                             <tr>
                                 <td>
                                 <td>
-                                    <input type="text" size="20" class="vst-input" name="v_ip" value="<?=htmlentities(trim($v_ip, "'"))?>">
+                                    <select class="vst-list" id="quickips_list" onchange="this.nextElementSibling.value=this.value">
+                                        <option value="">clear</option>
+                                    </select>
+                                    <input type="text" size="20" class="vst-input vst-list-editor" name="v_ip" value="<?=htmlentities(trim($v_ip, "'"))?>">
                                 </td>
                                 </td>
                             </tr>
                             </tr>
                             <tr>
                             <tr>
@@ -120,3 +123,26 @@
             </table>
             </table>
         </form>
         </form>
     </div>
     </div>
+
+    <script>
+        var iplists = JSON.parse('<?=$ipset_lists_json?>');
+        iplists.sort(function (a, b) {
+            return a.name > b.name;
+        });
+
+        $(function() {
+            var targetelement = document.getElementById('quickips_list');
+
+            var newEl = document.createElement("option");
+            newEl.text = "Ipset Lists";
+            newEl.disabled = true;
+            targetelement.appendChild(newEl);
+
+            iplists.forEach(iplist => {
+                var newEl = document.createElement("option");
+                newEl.text = iplist.name;
+                newEl.value = "ipset:" + iplist.name;
+                targetelement.appendChild(newEl);
+            });
+        });
+    </script>

+ 4 - 3
web/templates/admin/list_firewall.html

@@ -3,9 +3,10 @@
         <div class="l-unit-toolbar__buttonstrip">
         <div class="l-unit-toolbar__buttonstrip">
           <a class="ui-button cancel" id="btn-back" href="/list/server/"><i class="fas fa-arrow-left status-icon blue"></i> <?=__('Back')?></a>
           <a class="ui-button cancel" id="btn-back" href="/list/server/"><i class="fas fa-arrow-left status-icon blue"></i> <?=__('Back')?></a>
           <a href="/add/firewall/" id="btn-create" class="ui-button cancel" title="<?=__('Add Rule')?>"><i class="fas fa-plus-circle status-icon green"></i> <?=__('Add Rule')?></a>
           <a href="/add/firewall/" id="btn-create" class="ui-button cancel" title="<?=__('Add Rule')?>"><i class="fas fa-plus-circle status-icon green"></i> <?=__('Add Rule')?></a>
-          <? if(!empty($_SESSION['FIREWALL_EXTENSION'])) {
-            echo '<a class="ui-button cancel" href="/list/firewall/banlist/"><i class="fas fa-eye status-icon red"></i> '.__('list fail2ban').'</a>';
-          } ?>
+          <?php if(!empty($_SESSION['FIREWALL_EXTENSION'])): ?>
+            <a class="ui-button cancel" href="/list/firewall/banlist/"><i class="fas fa-eye status-icon red"></i> <?=__('list fail2ban')?></a>
+            <a class="ui-button cancel" href="/list/firewall/ipset/"><i class="fas fa-list status-icon green"></i> <?=__('list ipset')?></a>
+          <?php endif; ?>
         </div>
         </div>
         <ul class="context-menu sort-order animated fadeIn" style="display:none;">
         <ul class="context-menu sort-order animated fadeIn" style="display:none;">
           <li entity="sort-action"><span class="name"><?=__('Action')?> <i class="fas fa-sort-amount-down"></i></span><span class="up active"><i class="fas fa-sort-amount-up"></i></span></li>
           <li entity="sort-action"><span class="name"><?=__('Action')?> <i class="fas fa-sort-amount-down"></i></span><span class="up active"><i class="fas fa-sort-amount-up"></i></span></li>