summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2025-06-02 15:30:42 +0000
committerMagnus Hagander2025-06-02 15:30:42 +0000
commit8dd1b44fa9367dfcd829ccefbe63bcf2f05bfd68 (patch)
treecc495793d61d8620a15389b7e6a85ef32eb68f7f
parenteccdeaa571c23cf324d73c28670b5e646128a214 (diff)
Add support for deleting forwarders
At this point, mailboxes are a bit more complicated on the backend side (as they have storage), so that's for later.
-rw-r--r--pgmailmgr/mailmgr/forms.py14
-rw-r--r--pgmailmgr/mailmgr/templates/confirm.html11
-rw-r--r--pgmailmgr/mailmgr/views.py36
-rw-r--r--pgmailmgr/urls.py1
4 files changed, 61 insertions, 1 deletions
diff --git a/pgmailmgr/mailmgr/forms.py b/pgmailmgr/mailmgr/forms.py
index 657e906..97df6a5 100644
--- a/pgmailmgr/mailmgr/forms.py
+++ b/pgmailmgr/mailmgr/forms.py
@@ -199,3 +199,17 @@ class ForwarderForm(forms.ModelForm):
raise ValidationError("A user with that name already exists in that domain!")
return self.cleaned_data
+
+
+class ConfirmForm(forms.Form):
+ confirm = forms.CharField(max_length=100, required=True)
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ self.fields['confirm'].widget.attrs['placeholder'] = 'Please type "delete" to confirm the delete operation'
+ self.fields['confirm'].widget.attrs['autocomplete'] = 'off'
+
+ def clean_confirm(self):
+ if self.cleaned_data['confirm'] != 'delete':
+ raise ValidationError('Please type "delete" to confirm the delete operation')
diff --git a/pgmailmgr/mailmgr/templates/confirm.html b/pgmailmgr/mailmgr/templates/confirm.html
new file mode 100644
index 0000000..bc444fb
--- /dev/null
+++ b/pgmailmgr/mailmgr/templates/confirm.html
@@ -0,0 +1,11 @@
+{%extends "base.html" %}
+
+{%block content%}
+<h1>{{what|title}} {{object}}?</h1>
+
+<p>
+ Please confirm that you want to {{what}} the {{object}} {{name}}.
+</p>
+
+{% include "form_contents.html" %}
+{%endblock%}
diff --git a/pgmailmgr/mailmgr/views.py b/pgmailmgr/mailmgr/views.py
index d328954..eb9f912 100644
--- a/pgmailmgr/mailmgr/views.py
+++ b/pgmailmgr/mailmgr/views.py
@@ -155,8 +155,42 @@ def forwarderform(request, userparam):
# Generate a new form
form = ForwarderForm(instance=fwd, user=request.user)
+ extrabuttons = [
+ ('Cancel', '/adm/'),
+ ]
+ if userparam != 'add':
+ extrabuttons.append(('Delete', 'delete/'))
+
return render(request, 'form.html', {
'form': form,
'savebutton': (userparam == 'new') and "New" or "Save",
- 'cancelurl': '/adm/#forwarders',
+ 'extrabuttons': extrabuttons,
+ })
+
+
+@login_required
+def deleteforwarder(request, userparam):
+ fwd = _get_forwarder(request, userparam)
+
+ if request.method == 'POST':
+ form = ConfirmForm(data=request.POST)
+ if form.is_valid():
+ fwdname = str(fwd)
+ fwd.delete()
+ log(request.user, "Deleted forwarder {}".format(fwdname))
+ messages.info(request, "Deleted forwarder {}".format(fwdname))
+ return HttpResponseRedirect("/adm/")
+ else:
+ form = ConfirmForm()
+
+ return render(request, 'confirm.html', {
+ 'form': form,
+ 'object': 'forwarder',
+ 'what': 'delete',
+ 'name': fwd,
+ 'savebutton': 'Delete',
+ 'extrabuttons': [
+ ('Cancel', '../'),
+ ],
})
diff --git a/pgmailmgr/urls.py b/pgmailmgr/urls.py
index 5aa0fd8..e62069b 100644
--- a/pgmailmgr/urls.py
+++ b/pgmailmgr/urls.py
@@ -14,6 +14,7 @@ urlpatterns = [
re_path(r'^adm/$', views.adm_home),
re_path(r'^adm/user/(\d+|add)/$', views.userform),
re_path(r'^adm/forwarder/(\d+|add)/$', views.forwarderform),
+ re_path(r'^adm/forwarder/(\d+)/delete/$', views.deleteforwarder),
# Auth
re_path('^auth_receive/$', pgmailmgr.auth.auth_receive),