diff --git a/allauth_ens/providers/clipper/provider.py b/allauth_ens/providers/clipper/provider.py index 85b83d9..d14bee2 100644 --- a/allauth_ens/providers/clipper/provider.py +++ b/allauth_ens/providers/clipper/provider.py @@ -1,9 +1,12 @@ # -*- coding: utf-8 -*- +import ldap + from allauth.account.models import EmailAddress from allauth.socialaccount.providers.base import ProviderAccount - from allauth_cas.providers import CASProvider +from django.conf import settings + class ClipperAccount(ProviderAccount): pass @@ -19,8 +22,40 @@ class ClipperProvider(CASProvider): return '{}@clipper.ens.fr'.format(uid.strip().lower()) def extract_common_fields(self, data): + def get_names(clipper): + assert clipper.isalnum() + try: + ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, + ldap.OPT_X_TLS_NEVER) + l = ldap.initialize("ldaps://ldap.spi.ens.fr:636") + l.set_option(ldap.OPT_REFERRALS, 0) + l.set_option(ldap.OPT_PROTOCOL_VERSION, 3) + l.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND) + l.set_option(ldap.OPT_X_TLS_DEMAND, True) + l.set_option(ldap.OPT_DEBUG_LEVEL, 255) + l.set_option(ldap.OPT_NETWORK_TIMEOUT, 10) + l.set_option(ldap.OPT_TIMEOUT, 10) + + info = l.search_s('dc=spi,dc=ens,dc=fr', + ldap.SCOPE_SUBTREE, + ('(uid=%s)' % (clipper,)), + [str("cn"), ]) + + if len(info) > 0: + fullname = info[0][1].get('cn', [''])[0].decode("utf-8") + first_name, last_name = fullname.split(' ', 1) + return first_name, last_name + + except ldap.LDAPError: + pass + + return '', '' + common = super(ClipperProvider, self).extract_common_fields(data) + fn, ln = get_names(common['username']) common['email'] = self.extract_email(data) + common['name'] = fn + common['last_name'] = ln return common def extract_email_addresses(self, data): diff --git a/example/settings.py b/example/settings.py index 0f6a73d..d5402e7 100644 --- a/example/settings.py +++ b/example/settings.py @@ -84,7 +84,7 @@ AUTH_PASSWORD_VALIDATORS = [ { 'NAME': ( 'django.contrib.auth.password_validation' - '.UserAttributeSimilarityValidator', + '.UserAttributeSimilarityValidator' ), }, { diff --git a/setup.py b/setup.py index ed56dc6..6b8231b 100644 --- a/setup.py +++ b/setup.py @@ -47,5 +47,6 @@ setup( 'django-allauth', 'django-allauth-cas>=1.0.0b2,<1.1', 'django-widget-tweaks', + 'python-ldap', ], )