diff options
author | Magnus Hagander | 2025-06-02 15:30:42 +0000 |
---|---|---|
committer | Magnus Hagander | 2025-06-02 15:30:42 +0000 |
commit | 8dd1b44fa9367dfcd829ccefbe63bcf2f05bfd68 (patch) | |
tree | cc495793d61d8620a15389b7e6a85ef32eb68f7f | |
parent | eccdeaa571c23cf324d73c28670b5e646128a214 (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.py | 14 | ||||
-rw-r--r-- | pgmailmgr/mailmgr/templates/confirm.html | 11 | ||||
-rw-r--r-- | pgmailmgr/mailmgr/views.py | 36 | ||||
-rw-r--r-- | pgmailmgr/urls.py | 1 |
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), |