Now it works pretty well :)

fixes #289
This commit is contained in:
Antoine Nguyen
2013-04-13 10:01:33 +02:00
parent d1353678ff
commit bcb2bc36f2
4 changed files with 32 additions and 19 deletions
+15 -1
View File
@@ -240,7 +240,13 @@ class GeneralParametersForm(parameters.AdminParametersForm):
values = self.get_current_values()
if not ldap_available or values["authentication_type"] != "ldap":
return
ldap_uri = 'ldap://' if values["ldap_secured"] == "yes" else "ldaps://"
if not hasattr(settings, "AUTH_LDAP_USER_ATTR_MAP"):
setattr(settings, "AUTH_LDAP_USER_ATTR_MAP", {
"first_name": "givenName",
"email": "mail",
"last_name": "sn"
})
ldap_uri = 'ldaps://' if values["ldap_secured"] == "yes" else "ldap://"
ldap_uri += "%s:%s" % (values["ldap_server_address"], values["ldap_server_port"])
setattr(settings, "AUTH_LDAP_SERVER_URI", ldap_uri)
if values["ldap_auth_method"] == "searchbind":
@@ -254,6 +260,14 @@ class GeneralParametersForm(parameters.AdminParametersForm):
else:
setattr(settings, "AUTH_LDAP_USER_DN_TEMPLATE", values["ldap_user_dn_template"])
if values["ldap_is_active_directory"] == "yes":
if not hasattr(settings, "AUTH_LDAP_GLOBAL_OPTIONS"):
setattr(settings, "AUTH_LDAP_GLOBAL_OPTIONS", {
ldap.OPT_REFERRALS: False
})
else:
settings.AUTH_LDAP_GLOBAL_OPTIONS[ldap.OPT_REFERRALS] = False
parameters.register(GeneralParametersForm, ugettext_lazy("General"))
+2 -16
View File
@@ -964,24 +964,18 @@ class Extension(models.Model):
events.raiseEvent("ExtDisabled", self)
def populate_callback(sender, user=None, **kwargs):
"""Populate signal callback
def populate_callback(user):
"""Populate callback
If the LDAP authentication backend is in use, this callback will
be called each time a new user authenticates succesfuly to
Modoboa. This function is in charge of creating the mailbox
associated to the provided ``User`` object.
:param sender: ??
:param user: a ``User`` instance
"""
from modoboa.lib.permissions import grant_access_to_object
if parameters.get_admin("AUTHENTICATION_TYPE") != "ldap":
return
if user is None:
return
sadmins = User.objects.filter(is_superuser=True)
user.groups.add(Group.objects.get(name="SimpleUsers"))
@@ -1013,11 +1007,3 @@ def populate_callback(sender, user=None, **kwargs):
grant_access_to_object(sadmins[0], mb, True)
for su in sadmins[1:]:
grant_access_to_object(su, domain)
try:
from django_auth_ldap.backend import populate_user
except ImportError, inst:
pass
else:
populate_user.connect(populate_callback, dispatch_uid="myuid")
+1
View File
@@ -505,6 +505,7 @@ def saveparameters(request):
form = formdef["form"]
if form.is_valid():
form.save()
form.to_django_settings()
continue
return ajax_simple_response({"status": "ko", "prefix": form.app, "errors": form.errors})
return ajax_simple_response(dict(status="ok", respmsg=_("Parameters saved")))
+14 -2
View File
@@ -1,5 +1,6 @@
from django.contrib.auth.backends import ModelBackend
from modoboa.admin.models import User
from modoboa.lib import parameters
class SimpleBackend(ModelBackend):
@@ -20,6 +21,8 @@ class SimpleBackend(ModelBackend):
try:
from django_auth_ldap.backend import LDAPBackend as orig_LDAPBackend, _LDAPUser
from modoboa.admin.models import populate_callback
class LDAPBackend(orig_LDAPBackend):
@@ -29,10 +32,13 @@ try:
username is the Django-friendly username of the user. ldap_user.dn is
the user's DN and ldap_user.attrs contains all of their LDAP attributes.
"""
return User.objects.get_or_create(
user, created = User.objects.get_or_create(
username__iexact=username,
defaults={'username': username.lower()}
)
)
if created:
populate_callback(user)
return user, created
def get_user(self, user_id):
user = None
@@ -43,5 +49,11 @@ try:
pass
return user
def authenticate(self, username, password):
auth_type = parameters.get_admin("AUTHENTICATION_TYPE", app="admin")
if auth_type == "ldap":
return super(LDAPBackend, self).authenticate(username, password)
return None
except ImportError:
pass