Browse Source

ntp delete/list/add verbs, some fixes on interfaces

Roberto Berto 4 years ago
parent
commit
1581727c38

+ 7 - 46
vycontrol/interface/templates/interface/index.html

@@ -30,7 +30,13 @@
             
             <tr>
                 <td>{{ iname.type }}</td>
-                <td>{{ iname.interface_alias }}</td>
+                {% if iname.type == "loopback" %}
+                    <td><a href="{% url 'interface:interface-show' interface_type=iname.type interface_name=iname.type %}">{{ iname.interface_alias }}</td>
+                {% else %}
+                    <td><a href="{% url 'interface:interface-show' interface_type=iname.type interface_name=iname.interface_alias %}">{{ iname.interface_alias }}</td>
+                {% endif %}
+
+
                 <td>
                     {% for address in iname.address %}
                         {{ address }}<br>
@@ -62,51 +68,6 @@
 
             </tr>
         {% endfor %}
-
-        {% comment %}
-        {% for key, value in interfaces_all_names.items %}
-            <tr>
-                
-                <td>{{ key }} </td>
-            {% for ifkey, ifvalue in value.items %}
-            <td>{% url 'interface:interface-show' key ifkey as url_interface %}<a href="{{ url_interface }}">{{ ifkey }}</a></td><td>{{ ifvalue.address }}</td>
-            <td>
-                {% if key == "loopback" %}
-                    -
-                {% else %}
-                    <select id="firewall-ipv4-in" name="firewall-ipv4-in.{{ key }}.{{ ifkey }}"><option value="--remove--">None</option>
-                    {% if firewall_all != False %}
-                        {% for fkey, fvalue in firewall_all.items %}    
-                            {% for fitemkey, fitemvalue in fvalue.items %}
-                            <option value="{{ fitemkey }}" {% if interface_firewall_in|get_item:ifkey == fitemkey %}selected="selected"{% endif %} >{{ fitemkey }}</option>
-                            {% endfor %}
-                        {% endfor %}
-                    {% endif %}
-                    </select>
-                {% endif %}
-            </td>
-            <td>
-                {% if key == "loopback" %}
-                    -
-                {% else %}
-                    <select id="firewall-ipv4-out" name="firewall-ipv4-out.{{ key }}.{{ ifkey }}"><option value="--remove--">None</option>
-                    {% if firewall_all != False %}
-                        {% for fkey, fvalue in firewall_all.items %}    
-                            {% for fitemkey, fitemvalue in fvalue.items %}
-                            <option value="{{ fitemkey }}" {% if interface_firewall_out|get_item:ifkey == fitemkey %}selected="selected"{% endif %} >{{ fitemkey }}</option>
-                            {% endfor %}
-                        {% endfor %}
-                    {% endif %}
-                    </select>
-                {% endif %}
-            </td>
-
-            {% endfor %}
-            </tr>
-        {% endfor %}
-        {% endcomment %}
-
-
         </table>
 
         <div id="submit-firewall" class="text-right">

+ 47 - 9
vycontrol/interface/templates/interface/show.html

@@ -1,7 +1,7 @@
 {% extends "base.html" %}
 
-{% block header_title %}Interface{% endblock %}
-{% block section_title %}Interface{% endblock %}
+{% block header_title %}Interface {{ interface_type }} {{ interface_name }}{% endblock %}
+{% block section_title %}Interface {{ interface_type }} {{ interface_name }}{% endblock %}
 {% block username %}{{ username }}{% endblock %}
 
 {% block debug %}
@@ -16,16 +16,34 @@
 
 {% if interface %}
 
+{% if interface_type == "loopback" %}
+<form action="{% url 'interface:interface-show' interface_type=interface_type interface_name=interface_type %}" method="post">
+{% else %}
+<form action="{% url 'interface:interface-show' interface_type=interface_type interface_name=interface_name %}" method="post">
+{% endif %}
+
     <table border="1" width="100%">
-    <tr>
-    <th>address</th> <td>{{ interface.address }}</td>
-    </tr>
+        <tr>
+            <th width="30%">dhcp</th>
+            <td width="70%">
+                <input type="checkbox" name="dhcp" value="1" {% if interface.address == "dhcp" %}checked{% endif %} id="dhcp">
+            </td>
+        </tr>
+    
+        <tr id="tr_address" style="display:none">
+        <th>address</th> <td><input type="text" name="address" value="{% if interface.address == "dhcp" %}{% else %}{{ interface.address }}{% endif %}" id="address"></td>
+        </tr>
 
-    <tr>
-    <th>mtu</th> <td>{{ interface.mtu }}</td>
-    </tr>
+        <tr>
+        <th>mtu</th> <td><input type="text" name="mtu" value="{{ interface.mtu }}" id="mtu"></td>
+        </tr>
 
     </table>
+
+    <input type="submit" value="Save">
+
+</form>
+
 {% else %}
     <p>Invalid interface.</p>
 {% endif %}
@@ -62,11 +80,31 @@
     </select>
     </p>    
     
-    <input type="submit" value="Set Firewall">
+    <input type="submit" value="Set Interface Firewall">
     </form>
 </div>
 
 
+<script>
+    $(document).ready(function () {   
+        $("#dhcp").click(function () {
+            if ($("#dhcp").is(':checked')) {
+                $('#tr_address').hide();
+            } else {
+                $('#tr_address').show();
+            }
+
+        });
+
+        if ($("#dhcp").is(':checked')) {
+            $('#tr_address').hide();
+        } else {
+            $('#tr_address').show();
+        }
+
+    })
+</script>
+
 {% endblock %}
 
 

+ 2 - 2
vycontrol/interface/urls.py

@@ -6,7 +6,7 @@ app_name = 'interface'
 
 urlpatterns = [
     path('', views.index, name='interface-list'),
-    path('interface-show/<slug:interface_type>/<slug:interface_name>', views.interfaceshow, name='interface-show'),
-    path('interface-firewall/<slug:interface_type>/<slug:interface_name>', views.interfacefirewall, name='interface-firewall'),
+    path('interface-show/<slug:interface_type>/<str:interface_name>', views.interfaceshow, name='interface-show'),
+    path('interface-firewall/<slug:interface_type>/<str:interface_name>', views.interfacefirewall, name='interface-firewall'),
 
 ]

+ 34 - 0
vycontrol/ntp/templates/ntp/add.html

@@ -0,0 +1,34 @@
+{% extends "base.html" %}
+
+{% block header_title %}NTP{% endblock %}
+{% block section_title %}NTP{% endblock %}
+
+{% block debug %}
+{% endblock %}
+
+{% block content %}
+
+<p class="submenu1">
+    <a href="{% url 'ntp:ntp-list' %}">List ntp servers</a>
+</p>
+<p class="submenu2">
+    
+</p>
+
+
+<h2>Add new ntp server</h2>
+
+<form action="{% url 'ntp:ntp-add'  %}" method="post">
+    {% csrf_token %}
+    
+    <p>
+        <label for="server">server</label><br>
+        <input type="text" name="server" id="server" value="{{ server }}" size="30">
+    </p>
+
+    <input type="submit" value="Add NTP Server">
+</form>
+
+
+
+{% endblock %}

+ 23 - 8
vycontrol/ntp/templates/ntp/list.html

@@ -8,18 +8,33 @@
 
 {% block content %}
 
+<p class="submenu1">
+    <a href="{% url 'ntp:ntp-add' %}">Add new ntp server</a>
+</p>
+<p class="submenu2">
+    
+</p>
 
 
-<h3>Servers</h3>
+{% if ntp_servers %}
 
-<p>Todo: edit ntp servers</p>
+    <table border="1" width="100%">
+    <tr>
+        <th>server</th>
+        <th>action</th>
+    </tr>
 
-{% if ntp_servers %}
-<ul>
-{% for server in ntp_servers %}
-    <li>{{ server }}</li>
-{% endfor %}
-</ul>
+    {% for server in ntp_servers %}
+    <tr>
+        <td>{{ server }}</td>
+        <td>
+            <a href="{% url 'ntp:ntp-remove' server=server %}">delete</a></td>
+        </td>
+    </tr>
+
+    {% endfor %}
+
+    </table>   
 {% else %}
 <p>No NTP Server defined.</p>
 {% endif %}

+ 2 - 0
vycontrol/ntp/urls.py

@@ -7,6 +7,8 @@ app_name = 'ntp'
 
 urlpatterns = [
     path('', views.index, name='ntp-list'),
+    path('add', views.add, name='ntp-add'),
+    path('remove/<str:server>', views.remove, name='ntp-remove'),
 ]
 
 

+ 43 - 0
vycontrol/ntp/views.py

@@ -8,8 +8,10 @@ from django.contrib.auth.decorators import login_required
 
 import vyos
 import vycontrol_vyos_api as vapi
+import vycontrol_messages as vmsg
 import perms
 
+
 @login_required
 def index(request):
     all_instances = vyos.instance_getall()
@@ -30,3 +32,44 @@ def index(request):
     }
 
     return render(request, 'ntp/list.html', context)
+
+
+@login_required
+def add(request):
+    msg = vmsg.msg()
+
+    all_instances = vyos.instance_getall()
+    hostname_default = vyos.get_hostname_prefered(request)
+    is_superuser = perms.get_is_superuser(request.user)
+
+    if 'server' in request.POST:
+        v = vapi.set_ntp(hostname_default, request.POST['server'])
+        if v.success == False: 
+            msg.add_error("NTP server add fail - " + v.reason)
+        else:
+            msg.add_success("NTP server added")
+
+    context = {
+        'instances':                                all_instances,
+        'hostname_default':                         hostname_default,
+        'is_superuser' :                            is_superuser,
+        'msg' :                                     msg.get_all(),
+    }
+
+    return render(request, 'ntp/add.html', context)
+
+
+@login_required
+def remove(request, server):
+    hostname_default = vyos.get_hostname_prefered(request)
+
+    ntp_srv = vapi.get_ntp(hostname_default)
+    ntp_servers = {}
+    if ntp_srv.success:
+        if ntp_srv.data['server'] != None:
+            ntp_servers = ntp_srv.data['server']
+
+    if server in ntp_servers:
+        return1 = vapi.delete_ntp(hostname_default, server)
+
+    return redirect('ntp:ntp-list')

+ 1 - 1
vycontrol/s/main.css

@@ -105,7 +105,7 @@ h4 {
 }
 
 #submit-firewall {
-  margin-top: 20px;
+  margin-top: 0px;
 }
 
 input[type=submit] {

+ 12 - 0
vycontrol/vycontrol/settings.py

@@ -172,3 +172,15 @@ STATICFILES_DIRS = [
     BASE_DIR + '/s/'
 ]
 STATIC_URL = '/s/'
+
+# based on https://simpleisbetterthancomplex.com/tutorial/2016/09/19/how-to-create-password-reset-view.html 
+# There are many transactional email services out there. SendGrid, MailGun, Mandrill. see also https://simpleisbetterthancomplex.com/tutorial/2016/06/13/how-to-send-email.html
+# EMAIL_HOST = 'smtp.sendgrid.net'
+# EMAIL_PORT = 587
+# EMAIL_HOST_USER = 'testsite_app'
+# EMAIL_HOST_PASSWORD = 'mys3cr3tp4ssw0rd'
+# EMAIL_USE_TLS = True
+# DEFAULT_FROM_EMAIL = 'TestSite Team <noreply@example.com>'
+
+EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'  # During development only
+

+ 21 - 1
vycontrol/vycontrol_vyos_api.py

@@ -539,4 +539,24 @@ def get_ntp(hostname):
         cmd =       ["system","ntp"],
         description = "get_ntp",
     )
-    return v
+    return v
+
+def delete_ntp(hostname, server):
+    v = vapilib.api (
+        hostname=   hostname,
+        api =       "post",
+        op =        "delete",
+        cmd =       ["system","ntp","server",server],
+        description = "delete_ntp",
+    )
+    return v
+    
+def set_ntp(hostname, server):
+    v = vapilib.api (
+        hostname=   hostname,
+        api =       "post",
+        op =        "set",
+        cmd =       ["system","ntp","server",server],
+        description = "set_ntp",
+    )
+    return v