summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2025-06-02 15:03:12 +0000
committerMagnus Hagander2025-06-02 15:03:12 +0000
commite3b492e6fd2bd736c49c3b9ccf58f2ae64e0da73 (patch)
treea426413d65241497d1881bf1555dcf9ac76266f1
parent4e6be7b1cb30d291681fbf37c989123513ee0844 (diff)
Refactor getting virtual user/forwarder to their own functions
As this is basically a permissions check, let's centralize it.
-rw-r--r--pgmailmgr/mailmgr/views.py38
1 files changed, 25 insertions, 13 deletions
diff --git a/pgmailmgr/mailmgr/views.py b/pgmailmgr/mailmgr/views.py
index e736f5a..5e7c8e4 100644
--- a/pgmailmgr/mailmgr/views.py
+++ b/pgmailmgr/mailmgr/views.py
@@ -77,18 +77,23 @@ def adm_home(request):
})
+def _get_virtualuser(request, userparam):
+ if request.user.is_superuser:
+ return get_object_or_404(VirtualUser, pk=userparam)
+ else:
+ vulist = VirtualUser.objects.filter(pk=userparam).extra(where=["EXISTS (SELECT 1 FROM mailmgr_userpermissions p WHERE p.user_id=%s AND p.domain_id = local_domain_id AND local_part ~* ('^'||p.pattern||'$'))" % request.user.id])
+ if len(vulist) != 1:
+ raise Http404("Not found or no permissions!")
+ return vulist[0]
+
+
@transaction.atomic
@login_required
def userform(request, userparam):
if userparam == 'add':
vu = VirtualUser()
- elif request.user.is_superuser:
- vu = get_object_or_404(VirtualUser, pk=userparam)
else:
- vulist = VirtualUser.objects.filter(pk=userparam).extra(where=["EXISTS (SELECT 1 FROM mailmgr_userpermissions p WHERE p.user_id=%s AND p.domain_id = local_domain_id AND local_part ~* ('^'||p.pattern||'$'))" % request.user.id])
- if len(vulist) != 1:
- raise Http404("Not found or no permissions!")
- vu = vulist[0]
+ vu = _get_virtualuser(request, userparam)
if request.method == 'POST':
form = VirtualUserForm(data=request.POST, instance=vu, user=request.user)
@@ -112,22 +117,29 @@ def userform(request, userparam):
return render(request, 'form.html', {
'form': form,
'savebutton': (userparam == 'new') and "New" or "Save",
- 'cancelurl': '/adm/',
+ 'extrabuttons': [
+ ('Cancel', '/adm/'),
+ ],
})
+def _get_forwarder(request, userparam):
+ if request.user.is_superuser:
+ return get_object_or_404(Forwarder, pk=userparam)
+ else:
+ fwdlist = Forwarder.objects.filter(pk=userparam).extra(where=["EXISTS (SELECT 1 FROM mailmgr_userpermissions p WHERE p.user_id=%s AND p.domain_id = local_domain_id AND local_part ~* ('^'||p.pattern||'$'))" % request.user.id])
+ if len(fwdlist) != 1:
+ raise Http404("Not found or no permissions!")
+ return fwdlist[0]
+
+
@transaction.atomic
@login_required
def forwarderform(request, userparam):
if userparam == 'add':
fwd = Forwarder()
- elif request.user.is_superuser:
- fwd = get_object_or_404(Forwarder, pk=userparam)
else:
- fwdlist = Forwarder.objects.filter(pk=userparam).extra(where=["EXISTS (SELECT 1 FROM mailmgr_userpermissions p WHERE p.user_id=%s AND p.domain_id = local_domain_id AND local_part ~* ('^'||p.pattern||'$'))" % request.user.id])
- if len(fwdlist) != 1:
- raise Http404("Not found or no permissions!")
- fwd = fwdlist[0]
+ fwd = _get_forwarder(request, userparam)
if request.method == 'POST':
form = ForwarderForm(data=request.POST, instance=fwd, user=request.user)