From c10bbacaf995da10e368f05e625b4c9855fde5ca Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 28 Nov 2025 14:19:02 +0100 Subject: [PATCH 1/2] Added possibility to deactivate active filter set. fix #3789 --- frontend/src/api/account.js | 3 + frontend/src/views/account/FiltersView.vue | 98 ++++++++++++++-------- modoboa/sievefilters/api/v2/viewsets.py | 10 +++ 3 files changed, 74 insertions(+), 37 deletions(-) diff --git a/frontend/src/api/account.js b/frontend/src/api/account.js index c5c8dcc09..dc6fc6031 100644 --- a/frontend/src/api/account.js +++ b/frontend/src/api/account.js @@ -70,6 +70,9 @@ export default { activateFilterSet(filterSetName) { return repository.post(`${resource}/filtersets/${filterSetName}/activate/`) }, + deactivateActiveFilterSet() { + return repository.post(`${resource}/filtersets/deactivate_active/`) + }, deleteFilterSet(filterSetName) { return repository.delete(`${resource}/filtersets/${filterSetName}/`) }, diff --git a/frontend/src/views/account/FiltersView.vue b/frontend/src/views/account/FiltersView.vue index 1a0da2c9c..5a7e592da 100644 --- a/frontend/src/views/account/FiltersView.vue +++ b/frontend/src/views/account/FiltersView.vue @@ -4,7 +4,7 @@ {{ $gettext('Message filters') }} - + - {{ $gettext('Add') }} + {{ $gettext('New') }} - - - - + + + - - - + + + + diff --git a/modoboa/sievefilters/api/v2/viewsets.py b/modoboa/sievefilters/api/v2/viewsets.py index b025e0aa5..2047da9c0 100644 --- a/modoboa/sievefilters/api/v2/viewsets.py +++ b/modoboa/sievefilters/api/v2/viewsets.py @@ -99,6 +99,16 @@ class FilterSetViewSet(viewsets.ViewSet): return response.Response({"error": str(err)}, status=400) return response.Response() + @action(methods=["post"], detail=False) + def deactivate_active(self, request): + """Deactivate the current active filterset.""" + sclient = self.get_sieve_client(request) + try: + sclient.activatescript("") + except SieveClientError as err: + return response.Response({"error": str(err)}, status=400) + return response.Response() + @action(methods=["get"], detail=True) def download(self, request, pk): """Download the content of an existing filter set.""" From 284bb211b6cdd46b802af8b0be961eb767316798 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 28 Nov 2025 15:22:04 +0100 Subject: [PATCH 2/2] Added test --- modoboa/sievefilters/api/v2/tests.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modoboa/sievefilters/api/v2/tests.py b/modoboa/sievefilters/api/v2/tests.py index 90a78e703..2691370ae 100644 --- a/modoboa/sievefilters/api/v2/tests.py +++ b/modoboa/sievefilters/api/v2/tests.py @@ -96,6 +96,12 @@ class FilterSetViewSetTestCase(PatcherMixin, ModoAPITestCase): resp = self.client.post(url) self.assertEqual(resp.status_code, 200) + def test_deactivate_active(self): + self.authenticate() + url = reverse("v2:filterset-deactivate-active") + resp = self.client.post(url) + self.assertEqual(resp.status_code, 200) + def test_download(self): self.authenticate() url = reverse("v2:filterset-download", args=["unknown"])