mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
#56: a new decorator...
This commit is contained in:
@@ -6,11 +6,12 @@ from django.contrib.auth.decorators \
|
||||
import login_required
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
from mailng.lib import _render, _ctx_ok, _ctx_ko
|
||||
from mailng.lib import _render, _ctx_ok, _ctx_ko, is_not_localadmin
|
||||
from forms import *
|
||||
from models import *
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin('boxerror')
|
||||
def autoreply(request):
|
||||
mb = Mailbox.objects.get(user=request.user.id)
|
||||
try:
|
||||
|
||||
@@ -9,7 +9,7 @@ from django.utils.translation import ugettext as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from mailng.admin.models import Mailbox
|
||||
from mailng.lib import parameters, _render, _render_error, getctx
|
||||
from mailng.lib import parameters, _render, _render_error, getctx, is_not_localadmin
|
||||
from imap_listing import *
|
||||
from forms import *
|
||||
from templatetags.webextras import *
|
||||
@@ -23,6 +23,7 @@ def __get_current_url(request):
|
||||
return res
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def folder(request, name, updatenav=True):
|
||||
if not name:
|
||||
name = "INBOX"
|
||||
@@ -64,6 +65,7 @@ def folder(request, name, updatenav=True):
|
||||
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def index(request):
|
||||
try:
|
||||
navp = request.session.has_key("navparams") \
|
||||
@@ -82,6 +84,7 @@ def fetchmail(request, folder, mail_id, all=False):
|
||||
return None
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def viewmail(request, folder, mail_id=None):
|
||||
from templatetags.webextras import viewm_menu
|
||||
|
||||
@@ -94,6 +97,7 @@ def viewmail(request, folder, mail_id=None):
|
||||
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def getmailcontent(request, folder, mail_id):
|
||||
msg = fetchmail(request, folder, mail_id, True)
|
||||
if "class" in msg.keys() and msg["class"] == "unseen":
|
||||
@@ -110,6 +114,7 @@ def getmailcontent(request, folder, mail_id):
|
||||
})
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def getattachment(request, folder, mail_id):
|
||||
msg = fetchmail(request, folder, mail_id, True)
|
||||
for part in msg.walk():
|
||||
@@ -130,6 +135,7 @@ def getattachment(request, folder, mail_id):
|
||||
raise Http404
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def move(request):
|
||||
for arg in ["msgset", "to"]:
|
||||
if not request.GET.has_key(arg):
|
||||
@@ -139,12 +145,14 @@ def move(request):
|
||||
return folder(request, request.session["folder"], False)
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def delete(request, fdname, mail_id):
|
||||
mbc = IMAPconnector(request)
|
||||
mbc.move(mail_id, fdname, "Trash")
|
||||
return folder(request, fdname, False)
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def mark(request, name):
|
||||
if not request.GET.has_key("status") or not request.GET.has_key("ids"):
|
||||
return
|
||||
@@ -156,6 +164,7 @@ def mark(request, name):
|
||||
return folder(request, name, False)
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def empty(request, name):
|
||||
if name == "Trash":
|
||||
mbc = IMAPconnector(request)
|
||||
@@ -163,6 +172,7 @@ def empty(request, name):
|
||||
return folder(request, name, False)
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def compact(request, name):
|
||||
mbc = IMAPconnector(request)
|
||||
mbc.compact(name)
|
||||
@@ -221,6 +231,7 @@ def send_mail(request, withctx=False, origmsg=None):
|
||||
return ctx, HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def compose(request):
|
||||
if request.method == "POST":
|
||||
return send_mail(request)
|
||||
@@ -230,6 +241,7 @@ def compose(request):
|
||||
return render_compose(request, form, reverse(compose))
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def reply(request, folder, mail_id):
|
||||
msg = fetchmail(request, folder, mail_id, True)
|
||||
if request.method == "POST":
|
||||
@@ -272,6 +284,7 @@ def reply(request, folder, mail_id):
|
||||
textheader, body)
|
||||
|
||||
@login_required
|
||||
@is_not_localadmin()
|
||||
def forward(request, folder, mail_id):
|
||||
if request.method == "POST":
|
||||
ctx, response = send_mail(request, True)
|
||||
|
||||
+15
-2
@@ -5,6 +5,7 @@ import time
|
||||
from django.template import RequestContext
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.translation import ugettext as _
|
||||
from mailng.lib import parameters
|
||||
|
||||
def exec_cmd(cmd):
|
||||
@@ -18,8 +19,8 @@ def _render(request, tpl, user_context):
|
||||
return render_to_response(tpl, user_context,
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
def _render_error(request, user_context):
|
||||
return render_to_response("common/error.html", user_context,
|
||||
def _render_error(request, errortpl, user_context):
|
||||
return render_to_response("common/%s.html" % errortpl, user_context,
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
def exec_as_vuser(cmd):
|
||||
@@ -54,6 +55,18 @@ def decode(s, encodings=('utf8', 'latin1', 'windows-1252', 'ascii')):
|
||||
pass
|
||||
return s.decode('ascii', 'ignore')
|
||||
|
||||
def is_not_localadmin(errortpl="error"):
|
||||
def dec(f):
|
||||
def wrapped_f(request, **kwargs):
|
||||
if request.user.id == 1:
|
||||
return _render_error(request, errortpl, {
|
||||
"error" : _("Invalid action, %s is a local user" \
|
||||
% request.user.username)
|
||||
})
|
||||
return f(request, **kwargs)
|
||||
return wrapped_f
|
||||
return dec
|
||||
|
||||
class Singleton(type):
|
||||
def __init__(cls, name, bases, dict):
|
||||
super(Singleton, cls).__init__(name, bases, dict)
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.contrib.auth.models import Group, Permission
|
||||
|
||||
if __name__ == "__main__":
|
||||
grp = Group()
|
||||
grp.name = "DomainAdmins"
|
||||
grp.save()
|
||||
|
||||
for pcode in ["add_mailbox", "change_mailbox", "delete_mailbox", "add_alias",
|
||||
"change_alias", "delete_alias", "view_domain", "view_mailboxes",
|
||||
"view_aliases"]:
|
||||
grp.permissions.add(Permission.objects.get(codename=pcode))
|
||||
grp.save()
|
||||
Reference in New Issue
Block a user