diff --git a/plinth/modules/networks/forms.py b/plinth/modules/networks/forms.py index b4490c7a8..9408b24d2 100644 --- a/plinth/modules/networks/forms.py +++ b/plinth/modules/networks/forms.py @@ -124,6 +124,21 @@ available over this interfaces. Select Internal only for trusted networks.'), return ipv4 +class GenericForm(ConnectionForm): + """Form to create/edit a generic connection.""" + def __init__(self, *args, **kwargs): + """Initialize the form, populate interface choices.""" + super(GenericForm, self).__init__(*args, **kwargs) + choices = self._get_interface_choices(nm.DeviceType.GENERIC) + self.fields['interface'].choices = choices + + def get_settings(self): + """Return settings dict from cleaned data.""" + settings = super().get_settings() + settings['common']['type'] = 'generic' + return settings + + class EthernetForm(ConnectionForm): """Form to create/edit a ethernet connection.""" def __init__(self, *args, **kwargs): diff --git a/plinth/modules/networks/networks.py b/plinth/modules/networks/networks.py index d65fabc8e..1caaeaa5b 100644 --- a/plinth/modules/networks/networks.py +++ b/plinth/modules/networks/networks.py @@ -23,8 +23,8 @@ from django.utils.translation import ugettext as _, ugettext_lazy from django.views.decorators.http import require_POST from logging import Logger -from .forms import (ConnectionTypeSelectForm, EthernetForm, PPPoEForm, - WifiForm) +from .forms import (ConnectionTypeSelectForm, EthernetForm, GenericForm, + PPPoEForm, WifiForm) from plinth import network @@ -113,7 +113,9 @@ def edit(request, uuid): form_data = {'name': connection.get_id()} if request.method == 'POST': - if connection.get_connection_type() == '802-11-wireless': + if connection.get_connection_type() == 'generic': + form = GenericForm(request.POST) + elif connection.get_connection_type() == '802-11-wireless': form = WifiForm(request.POST) elif connection.get_connection_type() == '802-3-ethernet': form = EthernetForm(request.POST) @@ -156,7 +158,9 @@ def edit(request, uuid): if second_dns: form_data['ipv4_second_dns'] = second_dns - if settings_connection.get_connection_type() == '802-11-wireless': + if settings_connection.get_connection_type() == 'generic': + form = GenericForm(form_data) + elif settings_connection.get_connection_type() == '802-11-wireless': settings_wireless = connection.get_setting_wireless() form_data['ssid'] = settings_wireless.get_ssid().get_data() form_data['mode'] = settings_wireless.get_mode() @@ -242,7 +246,9 @@ def add(request): form = ConnectionTypeSelectForm(request.POST) if form.is_valid(): connection_type = form.cleaned_data['connection_type'] - if connection_type == '802-3-ethernet': + if connection_type == 'generic': + return redirect(reverse_lazy('networks:add_generic')) + elif connection_type == '802-3-ethernet': return redirect(reverse_lazy('networks:add_ethernet')) elif connection_type == '802-11-wireless': return redirect(reverse_lazy('networks:add_wifi')) @@ -256,6 +262,24 @@ def add(request): 'form': form}) +def add_generic(request): + """Serve generic connection create form.""" + form = None + + if request.method == 'POST': + form = GenericForm(request.POST) + if form.is_valid(): + network.add_connection(form.get_settings()) + return redirect(reverse_lazy('networks:index')) + else: + form = GenericForm() + + return TemplateResponse(request, 'connections_create.html', + {'title': _('Adding New Generic Connection'), + 'subsubmenu': subsubmenu, + 'form': form}) + + def add_ethernet(request): """Serve ethernet connection create form.""" form = None diff --git a/plinth/modules/networks/urls.py b/plinth/modules/networks/urls.py index 7c5828c60..9e89f36cf 100644 --- a/plinth/modules/networks/urls.py +++ b/plinth/modules/networks/urls.py @@ -34,6 +34,7 @@ urlpatterns = [ name='deactivate'), url(r'^sys/networks/scan/$', views.scan, name='scan'), url(r'^sys/networks/add/$', views.add, name='add'), + url(r'^sys/networks/add/generic/$', views.add_generic, name='add_generic'), url(r'^sys/networks/add/ethernet/$', views.add_ethernet, name='add_ethernet'), url(r'^sys/networks/add/pppoe/$', views.add_pppoe, name='add_pppoe'), diff --git a/plinth/network.py b/plinth/network.py index e90adc1d3..67e5f4491 100644 --- a/plinth/network.py +++ b/plinth/network.py @@ -36,7 +36,8 @@ logger = logging.getLogger(__name__) CONNECTION_TYPE_NAMES = collections.OrderedDict([ ('802-3-ethernet', _('Ethernet')), ('802-11-wireless', _('Wi-Fi')), - ('pppoe', _('PPPoE')) + ('pppoe', _('PPPoE')), + ('generic', _('Generic')), ])