From 14c6541dfb1558139c37e1408541dd3d288dae45 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 26 Jan 2022 16:41:57 -0800 Subject: [PATCH] email_server: Drop showing diagnostics/repair and roundcube config Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/email_server/__init__.py | 2 - plinth/modules/email_server/audit/__init__.py | 6 +- plinth/modules/email_server/audit/rcube.py | 90 ------------------- .../etc/roundcube/freedombox_mail.inc.php | 8 -- .../email_server/templates/email_server.html | 48 ---------- plinth/modules/email_server/views.py | 90 +------------------ 6 files changed, 6 insertions(+), 238 deletions(-) delete mode 100644 plinth/modules/email_server/audit/rcube.py delete mode 100644 plinth/modules/email_server/data/etc/roundcube/freedombox_mail.inc.php diff --git a/plinth/modules/email_server/__init__.py b/plinth/modules/email_server/__init__.py index fc10d4d57..7b4065c41 100644 --- a/plinth/modules/email_server/__init__.py +++ b/plinth/modules/email_server/__init__.py @@ -147,7 +147,6 @@ class EmailServerApp(plinth.app.App): results = super().diagnose() results.extend([r.summarize() for r in audit.ldap.get()]) results.extend([r.summarize() for r in audit.spam.get()]) - results.extend([r.summarize() for r in audit.rcube.get()]) return results @@ -179,7 +178,6 @@ def setup(helper, old_version=None): helper.call('post', audit.domain.set_domains) helper.call('post', audit.ldap.repair) helper.call('post', audit.spam.repair) - helper.call('post', audit.rcube.repair) # Reload actions.superuser_run('service', ['reload', 'postfix']) diff --git a/plinth/modules/email_server/audit/__init__.py b/plinth/modules/email_server/audit/__init__.py index e35045731..1dc17ee18 100644 --- a/plinth/modules/email_server/audit/__init__.py +++ b/plinth/modules/email_server/audit/__init__.py @@ -3,8 +3,6 @@ Provides diagnosis and repair of email server configuration issues """ -from . import aliases, domain, home, ldap, models, rcube, spam, tls +from . import aliases, domain, home, ldap, models, spam, tls -__all__ = [ - 'aliases', 'domain', 'home', 'ldap', 'models', 'rcube', 'spam', 'tls' -] +__all__ = ['aliases', 'domain', 'home', 'ldap', 'models', 'spam', 'tls'] diff --git a/plinth/modules/email_server/audit/rcube.py b/plinth/modules/email_server/audit/rcube.py deleted file mode 100644 index 3395a3329..000000000 --- a/plinth/modules/email_server/audit/rcube.py +++ /dev/null @@ -1,90 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later - -import json -import logging -import os - -from django.utils.translation import gettext_lazy as _ - -from plinth import actions -from plinth.modules.email_server.lock import Mutex -from plinth.modules.email_server.modconf import ConfigInjector - -from . import models - -config_path = '/etc/roundcube/config.inc.php' -boundary_pattern = '//[ ]*--[ ]*(BEGIN|END)[ ]+FREEDOMBOX CONFIG$' -boundary_format = '//-- {} FREEDOMBOX CONFIG' - -rconf_template = """// -// The following section is managed by FreedomBox -// Be careful not to edit -include_once("/etc/roundcube/freedombox_mail.inc.php"); -""" - -logger = logging.getLogger(__name__) -rcube_mutex = Mutex('rcube-config') - - -def get(): - translation = { - 'rc_installed': _('RoundCube availability'), - 'rc_config_header': _('RoundCube configured for FreedomBox email'), - } - - output = actions.superuser_run('email_server', ['rcube', 'check']) - results = json.loads(output) - for i in range(0, len(results)): - results[i] = models.Diagnosis.from_json(results[i], translation.get) - - return results - - -def repair(): - actions.superuser_run('email_server', ['rcube', 'set_up']) - - -def repair_component(action): - action_to_services = {'set_up': []} - if action not in action_to_services: - return - actions.superuser_run('email_server', ['rcube', action]) - return action_to_services[action] - - -def action_check(): - results = _action_check() - for i in range(0, len(results)): - results[i] = results[i].to_json() - print(json.dumps(results)) - - -def _action_check(): - results = [] - if not os.path.exists(config_path): - diagnosis = models.Diagnosis('rc_installed') - diagnosis.error('Config file was missing') - diagnosis.error('Check that RoundCube has been installed') - results.append(diagnosis) - return results - - diagnosis = models.Diagnosis('rc_config_header', action='set_up') - injector = ConfigInjector(boundary_pattern, boundary_format) - if not injector.has_header_line(config_path): - diagnosis.error('FreedomBox header line was missing') - results.append(diagnosis) - return results - - -def action_set_up(): - with rcube_mutex.lock_all(): - _inject_rcube_config() - - -def _inject_rcube_config(): - if not os.path.exists(config_path): - logger.warning('Roundcube has not been installed') - return - logger.info('Opening rcube config file %s', config_path) - injector = ConfigInjector(boundary_pattern, boundary_format) - injector.do_template_string(rconf_template, config_path) diff --git a/plinth/modules/email_server/data/etc/roundcube/freedombox_mail.inc.php b/plinth/modules/email_server/data/etc/roundcube/freedombox_mail.inc.php deleted file mode 100644 index 62d858db0..000000000 --- a/plinth/modules/email_server/data/etc/roundcube/freedombox_mail.inc.php +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/plinth/modules/email_server/templates/email_server.html b/plinth/modules/email_server/templates/email_server.html index c963e1cff..b18fdaa54 100644 --- a/plinth/modules/email_server/templates/email_server.html +++ b/plinth/modules/email_server/templates/email_server.html @@ -5,11 +5,6 @@ {% load i18n %} -{% block content %} - {{ tabs|safe }} - {{ block.super }} -{% endblock %} - {% block subsubmenu %} {% trans "Manage Spam" %} @@ -20,46 +15,3 @@ {% trans "Manage Aliases" %} {% endblock %} - -{% block extra_content %} - {% if related_diagnostics %} -

{% trans "Service Alert" %}

-
    - {% for model in related_diagnostics %} -
  • - - {{ model.title }} - {% if model.critical_errors %} - {% trans "error" %} - {% elif model.errors %} - {% trans "failed" %} - {% else %} - {% trans "passed" %} - {% endif %} - - {% if model.has_failed and model.action %} -
    - {% csrf_token %} - -
    - {% endif %} - -
      - {% for message in model.critical_errors %} -
    • {{ message }}
    • - {% endfor %} - {% for message in model.errors %} -
    • {{ message }}
    • - {% endfor %} -
    - -
  • - {% endfor %} -
- {% endif %} - {{ block.super }} -{% endblock %} diff --git a/plinth/modules/email_server/views.py b/plinth/modules/email_server/views.py index 3c9e56d27..6a34d89a5 100644 --- a/plinth/modules/email_server/views.py +++ b/plinth/modules/email_server/views.py @@ -4,49 +4,22 @@ Views for the email app. """ from django.contrib import messages -from django.core.exceptions import ValidationError -from django.http import HttpResponseBadRequest -from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ -from django.views.generic.base import TemplateView, View +from django.views.generic.base import TemplateView from django.views.generic.edit import FormView -import plinth.actions -import plinth.utils from plinth.views import AppView from . import aliases as aliases_module from . import audit, forms -class ExceptionsMixin(View): - - def render_validation_error(self, validation_error, status=400): - context = self.get_context_data() - context['error'] = validation_error - return self.render_to_response(context, status=status) - - def render_exception(self, exception, status=500): - context = self.get_context_data() - context['error'] = [str(exception)] - return self.render_to_response(context, status=status) - - def catch_exceptions(self, function, request): - try: - return function(request) - except ValidationError as validation_error: - return self.render_validation_error(validation_error) - except Exception as error: - return self.render_exception(error) - - -class EmailServerView(ExceptionsMixin, AppView): +class EmailServerView(AppView): """Server configuration page""" app_id = 'email_server' form_class = forms.DomainForm template_name = 'email_server.html' - audit_modules = ('rcube', ) def get_initial(self): """Return the initial values to populate in the form.""" @@ -55,45 +28,6 @@ class EmailServerView(ExceptionsMixin, AppView): initial['primary_domain'] = domains['primary_domain'] return initial - def get_context_data(self, *args, **kwargs): - context = super().get_context_data(*args, **kwargs) - - dlist = [] - for module_name in self.audit_modules: - self._get_audit_results(module_name, dlist) - dlist.sort(key=audit.models.Diagnosis.sorting_key) - - context['related_diagnostics'] = dlist - return context - - def _get_audit_results(self, module_name, dlist): - try: - results = getattr(audit, module_name).get() - except Exception as e: - title = _('Internal error in {0}').format('audit.' + module_name) - diagnosis = audit.models.Diagnosis(title) - diagnosis.critical(str(e)) - diagnosis.critical(_('Check syslog for more information')) - results = [diagnosis] - - for diagnosis in results: - if diagnosis.action: - diagnosis.action = '%s.%s' % (module_name, diagnosis.action) - if diagnosis.has_failed: - dlist.append(diagnosis) - - def post(self, request): - repair_field = request.POST.get('repair') - if repair_field: - module_name, sep, action_name = repair_field.partition('.') - if not sep or module_name not in self.audit_modules: - return HttpResponseBadRequest('Bad post data') - - self._repair(module_name, action_name) - return redirect(request.path) - - return super().post(request) - def form_valid(self, form): """Update the settings for changed domain values.""" old_data = form.initial @@ -103,27 +37,11 @@ class EmailServerView(ExceptionsMixin, AppView): audit.domain.set_domains(new_data['primary_domain']) messages.success(self.request, _('Configuration updated')) except Exception: - messages.success(self.request, - _('An error occurred during configuration.')) + messages.error(self.request, + _('An error occurred during configuration.')) return super().form_valid(form) - def _repair(self, module_name, action_name): - """Repair the configuration of the given audit module.""" - module = getattr(audit, module_name) - if not hasattr(module, 'repair_component'): - return - - reload_list = [] - try: - reload_list = module.repair_component(action_name) - except Exception: - pass - - for service in reload_list: - # plinth.action_utils.service_reload(service) - plinth.actions.superuser_run('service', ['reload', service]) - class AliasView(FormView): """View to create, list, enable, disable and delete aliases.