James Valleroy 6b0744c1c7
upgrades: Use only sources file to determine if backports enabled
Tests:
- Build deb and install in buster image. Manually remove backports
  sources file. Security page does not show backports notice. Updates
  page shows button to activate backports.
- Activate backports from updates page. Success message is shown and
  button to activate backports is removed. Security page shows
  backports notice.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2020-07-13 14:44:13 -07:00

80 lines
2.5 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Views for security module
"""
from django.contrib import messages
from django.template.response import TemplateResponse
from django.utils.translation import ugettext as _
from plinth import action_utils, actions
from plinth.modules import security
from plinth.modules.upgrades import is_backports_enabled
from .forms import SecurityForm
def index(request):
"""Serve the security configuration form"""
status = get_status(request)
form = None
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')
return TemplateResponse(
request, 'security.html', {
'app_info': security.app.info,
'form': form,
'is_backports_enabled': is_backports_enabled(),
})
def get_status(request):
"""Return the current status"""
return {
'restricted_access': security.get_restricted_access_enabled(),
'fail2ban_enabled': action_utils.service_is_enabled('fail2ban')
}
def _apply_changes(request, old_status, new_status):
"""Apply the form changes"""
if old_status['restricted_access'] != new_status['restricted_access']:
try:
security.set_restricted_access(new_status['restricted_access'])
except Exception as exception:
messages.error(
request,
_('Error setting restricted access: {exception}').format(
exception=exception))
else:
messages.success(request, _('Updated security configuration'))
if old_status['fail2ban_enabled'] != new_status['fail2ban_enabled']:
if new_status['fail2ban_enabled']:
actions.superuser_run('service', ['enable', 'fail2ban'])
else:
actions.superuser_run('service', ['disable', 'fail2ban'])
def report(request):
"""Serve the security report page"""
apps_report = security.get_apps_report()
return TemplateResponse(
request, 'security_report.html', {
'title':
_('Security Report'),
'freedombox_report':
apps_report.pop('freedombox'),
'apps_report':
sorted(apps_report.values(), key=lambda app: app['name']),
})