mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
wip: big refactoring
This commit is contained in:
@@ -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
|
||||
===============
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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})
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user