diff --git a/plinth/modules/security/__init__.py b/plinth/modules/security/__init__.py index 915afd98b..8f46d2990 100644 --- a/plinth/modules/security/__init__.py +++ b/plinth/modules/security/__init__.py @@ -32,6 +32,8 @@ class SecurityApp(app_module.App): _version = 7 + can_be_disabled = False + def __init__(self): """Create components for the app.""" super().__init__() diff --git a/plinth/modules/security/tests/test_functional.py b/plinth/modules/security/tests/test_functional.py index 80b2e8f66..52f06d4b5 100644 --- a/plinth/modules/security/tests/test_functional.py +++ b/plinth/modules/security/tests/test_functional.py @@ -4,6 +4,7 @@ Functional, browser based tests for security app. """ import pytest + from plinth.tests import functional pytestmark = [pytest.mark.system, pytest.mark.essential, pytest.mark.security] @@ -44,7 +45,7 @@ def _enable_restricted_logins(browser, should_enable): else: browser.uncheck('security-restricted_access') - functional.submit(browser) + functional.submit(browser, form_class='form-configuration') def _get_restricted_logins(browser): diff --git a/plinth/modules/security/urls.py b/plinth/modules/security/urls.py index 24665b981..f9ea4834c 100644 --- a/plinth/modules/security/urls.py +++ b/plinth/modules/security/urls.py @@ -8,6 +8,6 @@ from django.urls import re_path from . import views urlpatterns = [ - re_path(r'^sys/security/$', views.index, name='index'), + re_path(r'^sys/security/$', views.SecurityAppView.as_view(), name='index'), re_path(r'^sys/security/report$', views.report, name='report'), ] diff --git a/plinth/modules/security/views.py b/plinth/modules/security/views.py index 3c21eb631..0831698d2 100644 --- a/plinth/modules/security/views.py +++ b/plinth/modules/security/views.py @@ -8,34 +8,37 @@ from django.template.response import TemplateResponse from django.utils.translation import gettext as _ from plinth import action_utils, actions -from plinth import app as app_module from plinth.modules import security from plinth.modules.upgrades import is_backports_requested +from plinth.views import AppView from .forms import SecurityForm -def index(request): - """Serve the security configuration form""" - status = get_status(request) +class SecurityAppView(AppView): + """Show security app main page.""" - form = None + app_id = 'security' + template_name = 'security.html' + form_class = SecurityForm + prefix = 'security' - if request.method == 'POST': - form = SecurityForm(request.POST, initial=status, prefix='security') - if form.is_valid(): - _apply_changes(request, status, form.cleaned_data) - status = get_status(request) - form = SecurityForm(initial=status, prefix='security') - else: - form = SecurityForm(initial=status, prefix='security') + def get_initial(self): + """Return the values to fill in the form.""" + initial = super().get_initial() + initial.update(get_status(self.request)) + return initial - return TemplateResponse( - request, 'security.html', { - 'app_info': app_module.App.get('security').info, - 'form': form, - 'is_backports_requested': is_backports_requested(), - }) + def get_context_data(self, *args, **kwargs): + """Add additional context data for template.""" + context = super().get_context_data(*args, **kwargs) + context['is_backports_requested'] = is_backports_requested() + return context + + def form_valid(self, form): + """Apply the changes submitted in the form.""" + _apply_changes(self.request, form.initial, form.cleaned_data) + return super().form_valid(form) def get_status(request):