diff --git a/allauth_ens/providers/clipper/provider.py b/allauth_ens/providers/clipper/provider.py index 85b83d9..5c75c41 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): + 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 + print(common) return common def extract_email_addresses(self, data):