Add Ethernet or Wifi connection

This commit is contained in:
James Valleroy 2015-03-02 21:54:03 -05:00 committed by Sunil Mohan Adapa
parent 17040d4762
commit 0f99de9347
4 changed files with 195 additions and 8 deletions

View File

@ -16,6 +16,7 @@
# #
from dbus.exceptions import DBusException from dbus.exceptions import DBusException
from django import forms
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
@ -23,22 +24,20 @@ from django.shortcuts import redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from gettext import gettext as _ from gettext import gettext as _
import NetworkManager import NetworkManager
import uuid
import urllib import urllib
from plinth import cfg from plinth import cfg
subsubmenu = [{'url': reverse_lazy('network:index'),
'text': _('Network Connections')},
{'url': reverse_lazy('network:add'),
'text': _('Add Connection')}]
CONNECTION_TYPE_NAMES = { CONNECTION_TYPE_NAMES = {
'802-3-ethernet': 'Ethernet', '802-3-ethernet': 'Ethernet',
'802-11-wireless': 'Wi-Fi', '802-11-wireless': 'Wi-Fi',
'bridge': 'Bridge',
'bond': 'Bond',
'gsm': 'Mobile Broadband',
'infiniband': 'InfiniBand',
'pppoe': 'DSL',
'vlan': 'VLAN',
'vpn': 'VPN',
'wimax': 'WiMAX',
} }
@ -78,6 +77,7 @@ def index(request):
return TemplateResponse(request, 'connections_list.html', return TemplateResponse(request, 'connections_list.html',
{'title': _('Network Connections'), {'title': _('Network Connections'),
'subsubmenu': subsubmenu,
'connections': connections}) 'connections': connections})
@ -140,6 +140,101 @@ def deactivate(request, conn_id):
return redirect(reverse_lazy('network:index')) return redirect(reverse_lazy('network:index'))
class ConnectionAddForm(forms.Form):
"""Form to select type for new connection."""
conn_type = forms.ChoiceField(
label=_('Connection Type'),
choices=[(k, v) for k, v in CONNECTION_TYPE_NAMES.items()])
@login_required
def add(request):
"""Serve the connection type selection form."""
form = None
if request.method == 'POST':
form = ConnectionAddForm(request.POST)
if form.is_valid():
conn_type = form.cleaned_data['conn_type']
if conn_type == '802-3-ethernet':
return redirect(reverse_lazy('network:add_ethernet'))
elif conn_type == '802-11-wireless':
return redirect(reverse_lazy('network:add_wifi'))
else:
form = ConnectionAddForm()
return TemplateResponse(request, 'connections_add.html',
{'title': _('Add Connection'),
'subsubmenu': subsubmenu,
'form': form})
class AddEthernetForm(forms.Form):
"""Form to create a new ethernet connection."""
name = forms.CharField(label=_('Connection Name'))
@login_required
def add_ethernet(request):
"""Serve ethernet connection create form."""
form = None
if request.method == 'POST':
form = AddEthernetForm(request.POST)
if form.is_valid():
conn = {
'connection': {
'id': form.cleaned_data['name'],
'type': '802-3-ethernet',
'uuid': str(uuid.uuid4()),
},
'802-3-ethernet': {},
}
NetworkManager.Settings.AddConnection(conn)
return redirect(reverse_lazy('network:index'))
else:
form = AddEthernetForm()
return TemplateResponse(request, 'connections_create.html',
{'title': _('Editing New Ethernet Connection'),
'subsubmenu': subsubmenu,
'form': form})
class AddWifiForm(forms.Form):
"""Form to create a new wifi connection."""
name = forms.CharField(label=_('Connection Name'))
ssid = forms.CharField(label=_('SSID'))
@login_required
def add_wifi(request):
"""Serve wifi connection create form."""
form = None
if request.method == 'POST':
form = AddWifiForm(request.POST)
if form.is_valid():
conn = {
'connection': {
'id': form.cleaned_data['name'],
'type': '802-11-wireless',
'uuid': str(uuid.uuid4()),
},
'802-11-wireless': {
'ssid': form.cleaned_data['ssid'],
},
}
NetworkManager.Settings.AddConnection(conn)
return redirect(reverse_lazy('network:index'))
else:
form = AddWifiForm()
return TemplateResponse(request, 'connections_create.html',
{'title': _('Editing New Wi-Fi Connection'),
'subsubmenu': subsubmenu,
'form': form})
@login_required @login_required
def delete(request, conn_id): def delete(request, conn_id):
"""Handle deleting connections, showing a confirmation dialog first. """Handle deleting connections, showing a confirmation dialog first.
@ -162,4 +257,5 @@ def delete(request, conn_id):
return TemplateResponse(request, 'connections_delete.html', return TemplateResponse(request, 'connections_delete.html',
{'title': _('Delete Connection'), {'title': _('Delete Connection'),
'subsubmenu': subsubmenu,
'name': name}) 'name': name})

View File

@ -0,0 +1,44 @@
{% extends "base.html" %}
{% comment %}
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
{% endcomment %}
{% load bootstrap %}
{% block content %}
<div class="row">
<div class="col-sm-8">
<form class="form" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Create..."/>
</form>
</div>
</div>
{% endblock %}
{% block page_js %}
<script>
$('#id_type').focus();
</script>
{% endblock %}

View File

@ -0,0 +1,44 @@
{% extends "base.html" %}
{% comment %}
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
{% endcomment %}
{% load bootstrap %}
{% block content %}
<div class="row">
<div class="col-sm-8">
<form class="form" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Create Connection"/>
</form>
</div>
</div>
{% endblock %}
{% block page_js %}
<script>
$('#id_name').focus();
</script>
{% endblock %}

View File

@ -29,6 +29,9 @@ urlpatterns = patterns(
'activate', name='activate'), 'activate', name='activate'),
url(r'^sys/network/(?P<conn_id>[\w.@+-]+)/deactivate/$', url(r'^sys/network/(?P<conn_id>[\w.@+-]+)/deactivate/$',
'deactivate', name='deactivate'), 'deactivate', name='deactivate'),
url(r'^sys/network/add/$', 'add', name='add'),
url(r'^sys/network/add/ethernet/$', 'add_ethernet', name='add_ethernet'),
url(r'^sys/network/add/wifi/$', 'add_wifi', name='add_wifi'),
url(r'^sys/network/(?P<conn_id>[\w.@+-]+)/delete/$', url(r'^sys/network/(?P<conn_id>[\w.@+-]+)/delete/$',
'delete', name='delete'), 'delete', name='delete'),
) )