diff options
author | Magnus Hagander | 2025-06-02 15:03:12 +0000 |
---|---|---|
committer | Magnus Hagander | 2025-06-02 15:03:12 +0000 |
commit | e3b492e6fd2bd736c49c3b9ccf58f2ae64e0da73 (patch) | |
tree | a426413d65241497d1881bf1555dcf9ac76266f1 | |
parent | 4e6be7b1cb30d291681fbf37c989123513ee0844 (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.py | 38 |
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) |