Skip to content

Commit

Permalink
[vpn] Added support for VPN controller views
Browse files Browse the repository at this point in the history
  • Loading branch information
nemesifier committed Apr 23, 2019
1 parent 3452990 commit 69e15f1
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 18 deletions.
37 changes: 24 additions & 13 deletions openwisp_controller/config/controller/views.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from django.db.models import Q
from django_netjsonconfig.controller.generics import (BaseChecksumView, BaseDownloadConfigView,
BaseRegisterView, BaseReportStatusView)
from django_netjsonconfig.controller.generics import (BaseDeviceChecksumView, BaseDeviceDownloadConfigView,
BaseDeviceRegisterView, BaseDeviceReportStatusView,
BaseVpnChecksumView, BaseVpnDownloadConfigView)
from django_netjsonconfig.utils import invalid_response

from ..models import Device, OrganizationConfigSettings
from ..models import Device, OrganizationConfigSettings, Vpn


class ActiveOrgMixin(object):
Expand All @@ -15,19 +16,19 @@ def get_object(self, *args, **kwargs):
return super(ActiveOrgMixin, self).get_object(*args, **kwargs)


class ChecksumView(ActiveOrgMixin, BaseChecksumView):
class DeviceChecksumView(ActiveOrgMixin, BaseDeviceChecksumView):
model = Device


class DownloadConfigView(ActiveOrgMixin, BaseDownloadConfigView):
class DeviceDownloadConfigView(ActiveOrgMixin, BaseDeviceDownloadConfigView):
model = Device


class ReportStatusView(ActiveOrgMixin, BaseReportStatusView):
class DeviceReportStatusView(ActiveOrgMixin, BaseDeviceReportStatusView):
model = Device


class RegisterView(BaseRegisterView):
class DeviceRegisterView(BaseDeviceRegisterView):
model = Device

def forbidden(self, request):
Expand All @@ -51,19 +52,29 @@ def forbidden(self, request):
self.organization = org_settings.organization

def init_object(self, **kwargs):
config = super(RegisterView, self).init_object(**kwargs)
config = super(DeviceRegisterView, self).init_object(**kwargs)
config.organization = self.organization
config.device.organization = self.organization
return config

def get_template_queryset(self, config):
queryset = super(RegisterView, self).get_template_queryset(config)
queryset = super(DeviceRegisterView, self).get_template_queryset(config)
# filter templates of the same organization or shared templates
return queryset.filter(Q(organization=self.organization) |
Q(organization=None))


checksum = ChecksumView.as_view()
download_config = DownloadConfigView.as_view()
report_status = ReportStatusView.as_view()
register = RegisterView.as_view()
class VpnChecksumView(BaseVpnChecksumView):
model = Vpn


class VpnDownloadConfigView(BaseVpnDownloadConfigView):
model = Vpn


device_checksum = DeviceChecksumView.as_view()
device_download_config = DeviceDownloadConfigView.as_view()
device_report_status = DeviceReportStatusView.as_view()
device_register = DeviceRegisterView.as_view()
vpn_checksum = VpnChecksumView.as_view()
vpn_download_config = VpnDownloadConfigView.as_view()
21 changes: 21 additions & 0 deletions openwisp_controller/config/migrations/0021_vpn_key.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 2.1.8 on 2019-04-22 23:55

import django.core.validators
from django.db import migrations, models
import django_netjsonconfig.utils
import re


class Migration(migrations.Migration):

dependencies = [
('config', '0020_remove_config_organization'),
]

operations = [
migrations.AddField(
model_name='vpn',
name='key',
field=models.CharField(db_index=True, default=django_netjsonconfig.utils.get_random_key, max_length=64, validators=[django.core.validators.RegexValidator(re.compile('^[^\\s/\\.]+$'), code='invalid', message='Key must not contain spaces, dots or slashes.')]),
),
]
10 changes: 5 additions & 5 deletions openwisp_controller/config/tests/test_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
TEST_MACADDR = '00:11:22:33:44:55'
TEST_MACADDR_NAME = TEST_MACADDR.replace(':', '-')
TEST_ORG_SHARED_SECRET = 'functional_testing_secret'
REGISTER_URL = reverse('controller:register')
REGISTER_URL = reverse('controller:device_register')


class TestController(CreateConfigTemplateMixin, TestOrganizationMixin,
Expand Down Expand Up @@ -112,27 +112,27 @@ def test_register_403_disabled_org(self):
def test_checksum_404_disabled_org(self):
org = self._create_org(is_active=False)
c = self._create_config(organization=org)
response = self.client.get(reverse('controller:checksum', args=[c.device.pk]), {'key': c.device.key})
response = self.client.get(reverse('controller:device_checksum', args=[c.device.pk]), {'key': c.device.key})
self.assertEqual(response.status_code, 404)

def test_download_config_404_disabled_org(self):
org = self._create_org(is_active=False)
c = self._create_config(organization=org)
url = reverse('controller:download_config', args=[c.device.pk])
url = reverse('controller:device_download_config', args=[c.device.pk])
response = self.client.get(url, {'key': c.device.key})
self.assertEqual(response.status_code, 404)

def test_report_status_404_disabled_org(self):
org = self._create_org(is_active=False)
c = self._create_config(organization=org)
response = self.client.post(reverse('controller:report_status', args=[c.device.pk]),
response = self.client.post(reverse('controller:device_report_status', args=[c.device.pk]),
{'key': c.device.key, 'status': 'applied'})
self.assertEqual(response.status_code, 404)

def test_checksum_200(self):
org = self._create_org()
c = self._create_config(organization=org)
response = self.client.get(reverse('controller:checksum', args=[c.device.pk]), {'key': c.device.key})
response = self.client.get(reverse('controller:device_checksum', args=[c.device.pk]), {'key': c.device.key})
self.assertEqual(response.status_code, 200)


Expand Down

0 comments on commit 69e15f1

Please sign in to comment.