Эх сурвалжийг харах

improved msgs alerts UI
fixed description editrule/addrule

Roberto Berto 5 жил өмнө
parent
commit
1e1a8ee71f

+ 6 - 0
vycontrol/filters/vycontrol_filters.py

@@ -1,4 +1,5 @@
 from django.template.defaultfilters import register
+import random
 
 
 @register.filter
@@ -29,3 +30,8 @@ def get_item_network(dictionary, key):
     d = dictionary.get(key)    
     return d['network']
 
+@register.simple_tag
+def random_int(a, b=None):
+    if b is None:
+        a, b = 0, a
+    return random.randint(a, b)

+ 19 - 11
vycontrol/firewall/templates/firewall/editrule.html

@@ -4,6 +4,22 @@
 {% block section_title %}<a href="{% url 'firewall:show' firewall_name %}">Firewall {{firewall_name}}</a> - edit rule {{ firewall_rulenumber }}{% endblock %}
 {% block username %}{{ username }}{% endblock %}
 
+
+{% block submenu %}
+<p class="submenu1">
+    <a href="{% url 'firewall:firewall-list' %}">Firewall List</a> | 
+
+    <a href="{% url 'firewall:firewall-create' %}">Create new firewall</a> | 
+    <a href="{% url 'firewall:firewall-addressgroup-list' %}">Address Group</a> | 
+    <a href="{% url 'firewall:firewall-networkgroup-list' %}">Network Group</a> | 
+    <a href="{% url 'firewall:firewall-portgroup-list' %}">Port Group</a>
+</p>
+<p class="submenu2">
+    <a href="{% url 'firewall:addrule' firewall_name %}">Add new rule</a>
+</p>
+{% endblock submenu %}
+
+
 {% block debug %}
 {{ msg }}
 
@@ -32,6 +48,9 @@
 
 {% block content %}
 
+
+
+
 {% comment %}
 <script type="text/javascript">
     var firewall_networkgroup_data = '{{firewall_networkgroup_js|safe}}';
@@ -53,17 +72,6 @@
 
 
 
-<p class="submenu1">
-    <a href="{% url 'firewall:firewall-list' %}">Firewall List</a> | 
-
-    <a href="{% url 'firewall:firewall-create' %}">Create new firewall</a> | 
-    <a href="{% url 'firewall:firewall-addressgroup-list' %}">Address Group</a> | 
-    <a href="{% url 'firewall:firewall-networkgroup-list' %}">Network Group</a> | 
-    <a href="{% url 'firewall:firewall-portgroup-list' %}">Port Group</a>
-</p>
-<p class="submenu2">
-    <a href="{% url 'firewall:addrule' firewall_name %}">Add new rule</a>
-</p>
 
 
 {% if mode == "editrule" %}

+ 19 - 13
vycontrol/firewall/views.py

@@ -177,15 +177,15 @@ def changerule(request, firewall_name, mode, template_name="firewall/addrule.htm
         if rulenumber == None:
             msg.add_error("Rule number empty")
         else:
-            rule = vapi.get_firewall_rulenumber(hostname_default, firewall_name, rulenumber)
-            if rule.success == False:
-                ruledata = rule.data
+            v = vapi.get_firewall_rulenumber(hostname_default, firewall_name, rulenumber)
+            if v.success:
+                ruledata = v.data
 
                 # if rule exists control variables are true
                 rulenumber_valid = True
                 ruleaction_valid = True
             else:
-                msg.add_error("There is no rulenumber inside firewall.")
+                msg.add_error("There is no rule number inside firewall.")
 
     # mode add rule
     elif mode == "addrule":
@@ -206,18 +206,18 @@ def changerule(request, firewall_name, mode, template_name="firewall/addrule.htm
     if rulenumber_valid and request.POST.get('ruleaction', None) != None:
         if request.POST.get('ruleaction') in ["accept", "drop", "reject"]:
             if mode == "editrule" and ruledata['action'] and request.POST.get('ruleaction') == ruledata['action']:
-                msg.add_debug("Not need to update rule action")
+                msg.add_debug("Action - no need to update")
             else:
                 v = vapi.set_firewall_rule_action(hostname_default, firewall_name, rulenumber, request.POST.get('ruleaction'))
                 if v.success == False:
-                    msg.add_error("Fail to change rule action: " + v.reason)
+                    msg.add_error("Action fail to change: " + v.reason)
                 else:
                     # updating ruledata
                     ruledata['action'] = request.POST.get('ruleaction')
                     changed = True
-                    msg.add_success("Rule action updated")
+                    msg.add_success("Action updated")
         else:
-            msg.add_error("Rule action invalid")
+            msg.add_error("Action invalid")
 
 
     # update/insert rule status
@@ -230,7 +230,7 @@ def changerule(request, firewall_name, mode, template_name="firewall/addrule.htm
             elif request.POST.get('status') == "disable" and "disable" not in ruledata:
                 v = vapi.set_firewall_rule_disabled(hostname_default, firewall_name, rulenumber)
                 if v.success == False:
-                    msg.add_error("Failed to disable status: " + v.reason)
+                    msg.add_error("Status - failed to disable: " + v.reason)
                 else:
                     # updating ruledata
                     ruledata['disable'] = {}
@@ -240,7 +240,7 @@ def changerule(request, firewall_name, mode, template_name="firewall/addrule.htm
             elif request.POST.get('status') == "enable" and "disable" in ruledata:
                 v = vapi.set_firewall_rule_enabled(hostname_default, firewall_name, rulenumber)
                 if v.success == False:
-                    msg.add_error("Failed to enable status: " + v.reason)
+                    msg.add_error("Status - failed to enable: " + v.reason)
                 else:
                     # updating ruledata
                     del ruledata['disable']
@@ -251,7 +251,7 @@ def changerule(request, firewall_name, mode, template_name="firewall/addrule.htm
             if request.POST.get('status') == "disable":
                 v = vapi.set_firewall_rule_disabled(hostname_default, firewall_name, rulenumber)
                 if v.success == False:
-                    msg.add_error("Failed to disable status: " + v.reason)
+                    msg.add_error("Status - failed to disable: " + v.reason)
                 else:
                     # updating ruledata
                     ruledata['disable'] = {}
@@ -263,8 +263,14 @@ def changerule(request, firewall_name, mode, template_name="firewall/addrule.htm
                 pass
 
     if rulenumber_valid == True and request.POST.get('description', None) != None:
-        pass
-
+        v = vapi.set_firewall_rule_description(hostname_default, firewall_name, rulenumber, request.POST.get('description'))
+        if v.success == False:
+            msg.add_error("Description - failed to update")
+        else:
+            # updating ruledata
+            ruledata['description'] = request.POST.get('description')
+            changed = True
+            msg.add_success("Description updated")
 
 
     if rulenumber_valid == True:

+ 53 - 10
vycontrol/s/main.css

@@ -1,10 +1,13 @@
 body {
     background-color: #333;
     color: white;
-    
-    
+    font-size: 12px;    
+
 }
 
+
+
+
 .container {
     color: black;
 }
@@ -75,30 +78,27 @@ form.instancedefault {
   margin: 0;  
 }
 
-#central h1 {
+h1 {
   font-size: 18px;
 }
 
-#central h2 {
+h2 {
   margin-top: 20px;
   font-size: 16px;
 }
 
-#central h3 {
+h3 {
   margin-top: 20px;
   font-size: 14px;
 }
 
-#central h4 {
+h4 {
   margin-top: 10px;
   font-size: 13px;
   font-weight: bold;
 }
 
 
-#central {
-  font-size: 12px;
-}
 
 #rulenumber:disabled {
     background-color: #ddd;
@@ -161,4 +161,47 @@ input[type=submit] {
 
 .matching_criteria { 
   padding: 3px;
-}
+}
+
+
+#msgs {
+  background-color: rgb(228, 218, 181);  
+  padding: 10px 10px 10px 10px;
+  list-style-type: none;
+}
+#msgs li:last-child {
+  margin-bottom: 0;
+}
+
+#msgs li {
+  margin-bottom: 10px;
+  padding: 4px 6px;
+}
+
+#msgs-header {
+  font-size: 14px;
+  padding: 0;
+  margin: 0 0 10px 0;
+  margin-top: 0;
+  
+}
+
+.msgs_success {
+  background-color: rgb(73, 73, 160);
+}
+.msgs_info {
+  background-color: rgb(132, 73, 160);
+}
+.msgs_debug {
+  background-color: rgb(160, 73, 113);
+}
+.msgs_alert {
+  background-color: rgb(160, 147, 73);
+}
+.msgs_error {
+  background-color: rgb(160, 73, 73);
+}
+
+
+
+

+ 12 - 2
vycontrol/vycontrol/templates/base.html

@@ -9,7 +9,7 @@
 
     <!-- Bootstrap CSS -->
     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
-    <link rel="stylesheet" href="{% static "main.css" %}?20">
+    <link rel="stylesheet" href="{% static "main.css" %}?{% random_int 100000 500000 %} ">
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
 
     <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
@@ -126,11 +126,21 @@
     <div class="col content">
         <h2>{% block section_title %}{% endblock %}</h2>
 
+        {% block submenu %}{% endblock %}
+
         {% for m in msg %}
-        <p>{{ m.msg_type }} - {{ m.msg }}</p>
+          {% if forloop.first %}  
+          <h2 id="msgs-header">Save result</h2>
+          <ul id="msgs">
+          {% endif %}
+            <li class="msgs_{{ m.msg_type }}">{{ m.msg_type }} - {{ m.msg }}</li>
+          {% if forloop.last %}  
+          </ul>
+          {% endif %}        
         {% endfor %}
 
 
+
         {% block content %}{% endblock %}
     </div>
   </div>

+ 10 - 0
vycontrol/vycontrol_vyos_api.py

@@ -60,3 +60,13 @@ def set_firewall_rule_enabled(hostname, firewall_name, rulenumber):
         description = "enable rule",
     )
     return v    
+
+def set_firewall_rule_description(hostname, firewall_name, rulenumber, description):
+    v = vapilib.api (
+        hostname=   hostname,
+        api =       "post",
+        op =        "set",
+        cmd =       ["firewall", "name", firewall_name, "rule", rulenumber, "description", description],
+        description = "set rule description",
+    )
+    return v

+ 3 - 0
vycontrol/vycontrol_vyos_api_lib.py

@@ -150,6 +150,9 @@ def api(hostname, api, op, cmd, description = ""):
     except json.JSONDecodeError:
         respjson = {'success': False, 'error': None, 'data': None}
 
+    #log("api raw", respjson)
+
+
     v = vyapi(
         result =    respjson['success'],
         reason =    respjson['error'],