wip: big refactoring

This commit is contained in:
Antoine Nguyen
2013-08-23 17:41:13 +02:00
parent 93d7cb50c3
commit 271c2530e8
6 changed files with 26 additions and 16 deletions
+3 -2
View File
@@ -65,9 +65,10 @@ Raised when an existing account is deleted.
*Callback prototype*::
def callback(account): pass
def callback(account, byuser, **options): pass
* ``oldaccount`` is the account that is going to be deleted
* ``account`` is the account that is going to be deleted
* ``byuser`` is the adminstrator deleting ``account``
AccountModified
===============
+2 -8
View File
@@ -59,7 +59,7 @@ class User(AbstractBaseUser, PermissionsMixin):
password_expr = re.compile(r'(\{(\w+)\}|(\$1\$))(.+)')
def delete(self, fromuser, keep_mb_dir, *args, **kwargs):
def delete(self, fromuser, *args, **kwargs):
"""Custom delete method
To check permissions properly, we need to make a distinction
@@ -79,18 +79,12 @@ class User(AbstractBaseUser, PermissionsMixin):
if not fromuser.can_access(self):
raise PermDeniedException
# if self.has_mailbox:
# mb = self.mailbox_set.all()[0]
# if not fromuser.can_access(mb):
# raise PermDeniedException
# mb.delete(keepdir=keep_mb_dir)
owner = get_object_owner(self)
for ooentry in self.objectaccess_set.filter(is_owner=True):
if ooentry.content_object is not None:
grant_access_to_object(owner, ooentry.content_object, True)
events.raiseEvent("AccountDeleted", self)
events.raiseEvent("AccountDeleted", self, fromuser, **kwargs)
ungrant_access_to_object(self)
super(User, self).delete(*args, **kwargs)
-3
View File
@@ -23,9 +23,6 @@ def dologin(request):
login(request, user)
if not form.cleaned_data["rememberme"]:
request.session.set_expiry(0)
events.raiseEvent("UserLoggedIn", request, form)
# if request.user.has_mailbox:
# request.session["password"] = encrypt(form.cleaned_data["password"])
request.session["django_language"] = \
parameters.get_user(request.user, "LANG")
+19
View File
@@ -154,3 +154,22 @@ def import_account_mailbox(user, account, row):
except Domain.DoesNotExist:
continue
dom.add_admin(account)
@events.observe("UserLogin")
def user_logged_in(request, username, password):
from modoboa.lib.cryptutils import encrypt
if request.user.mailbox_set.count():
request.session["password"] = encrypt(password)
@events.observe("AccountDeleted")
def account_deleted(account, byuser, **kwargs):
if not account.mailbox_set.count():
return
mb = account.mailbox_set.all()[0]
if not byuser.can_access(mb):
raise PermDeniedException
keep_mb_dir = kwargs.get("keep_mb_dir", True)
mb.delete(keepdir=keep_mb_dir)
+1 -1
View File
@@ -225,7 +225,7 @@ def editaccount(request, accountid, tplname="common/tabforms.html"):
def delaccount(request, accountid):
keepdir = True if request.POST.get("keepdir", "false") == "true" else False
User.objects.get(pk=accountid).delete(request.user, keepdir)
User.objects.get(pk=accountid).delete(request.user, keep_mb_dir=keepdir)
msg = ungettext("Account deleted", "Accounts deleted", 1)
return ajax_simple_response({"status": "ok", "respmsg": msg})
+1 -2
View File
@@ -181,8 +181,7 @@ def on_account_modified(old, new):
@events.observe("AccountDeleted")
def on_account_deleted(account):
print "del"
def on_account_deleted(account, byuser, **kwargs):
owner = get_object_owner(account)
if not owner.group in ["SuperAdmins", "Resellers"]:
return