summaryrefslogtreecommitdiff
path: root/pgmailmgr/mailmgr/views.py
blob: 421e067b5753f3642a4754530e83030d7b6bfbb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.db import transaction


from models import *
from forms import *

def log(user, what):
	l = Log()
	l.user = user
	l.what = what
	l.save()

@login_required
def home(request):
	users = VirtualUser.objects.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])
	forwards = Forwarder.objects.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])

	return render(request, 'home.html', {
			'users': users,
			'forwarders': forwards,
			})

@transaction.atomic
@login_required
def userform(request, userparam):
	if userparam == 'add':
		vu = VirtualUser()
	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]

	if request.method == 'POST':
		form = VirtualUserForm(data=request.POST, instance=vu, user=request.user)
		if request.POST['passwd'] != vu.passwd:
			password_changed=True
		else:
			password_changed=False
		if form.is_valid():
			form.save()
			messages.add_message(request, messages.INFO, 'User %s updated' % vu)
			if password_changed:
				messages.add_message(request, messages.INFO, 'Password changed for user %s' % vu)
				log(request.user, "%s user %s, including changing the password" % (userparam=='add' and 'Added' or 'Updated', vu))
			else:
				log(request.user, "%s user %s, without changing the password" % (userparam=='add' and 'Added' or 'Updated', vu))
			return HttpResponseRedirect('/')
	else:
		# Generate a new form
		form = VirtualUserForm(instance=vu, user=request.user)

	return render(request,'form.html', {
			'form': form,
			'savebutton': (userparam == 'new') and "New" or "Save"
			})

@transaction.atomic
@login_required
def forwarderform(request, userparam):
	if userparam == 'add':
		fwd = Forwarder()
	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]

	if request.method == 'POST':
		form = ForwarderForm(data=request.POST, instance=fwd, user=request.user)
		if form.is_valid():
			form.save()
			log(request.user, "%s forwarding %s -> %s" % (userparam=='add' and 'Added' or 'Updated', fwd, fwd.remote_name))
			messages.add_message(request, messages.INFO, 'Forwarder %s updated' % fwd)
			return HttpResponseRedirect('/')
	else:
		# Generate a new form
		form = ForwarderForm(instance=fwd, user=request.user)

	return render(request, 'form.html', {
			'form': form,
			'savebutton': (userparam == 'new') and "New" or "Save"
			})