From 04f56ec0afda8621311b031c9ed1fdf4a0631065 Mon Sep 17 00:00:00 2001 From: Evarin Date: Sat, 29 Dec 2018 16:30:28 +0100 Subject: [PATCH] Oublis : script et ldap --- experiENS/settings_prod.py | 3 ++ scripts/initalize_allauth.py | 65 +++++++++++++++++++++++++----------- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/experiENS/settings_prod.py b/experiENS/settings_prod.py index 5d3922a..930c780 100644 --- a/experiENS/settings_prod.py +++ b/experiENS/settings_prod.py @@ -50,3 +50,6 @@ ELASTICSEARCH_DSL = { 'hosts': '127.0.0.1:9200' }, } + + +CLIPPER_LDAP_SERVER = 'ldaps://ldap.spi.ens.fr:636' diff --git a/scripts/initalize_allauth.py b/scripts/initalize_allauth.py index 7e69c1d..8b18e6c 100644 --- a/scripts/initalize_allauth.py +++ b/scripts/initalize_allauth.py @@ -1,29 +1,54 @@ +import sys from allauth.account.models import EmailAddress from allauth.socialaccount.models import SocialAccount -accts = SocialAccount.objects.all() +from avisstage.models import Normalien -# Create email addresses +from collections import defaultdict -for acc in accts: +accounts = SocialAccount.objects.all().prefetch_related("user") +profils = Normalien.objects.all() +addresses = EmailAddress.objects.all() + + +addr_dict = defaultdict(set) +for addr in addresses: + addr_dict[addr.user_id].add(addr.email) + + +profil_dict = {profil.user_id: profil for profil in profils} + +addr_to_create = [] + +for acc in accounts: u = acc.user - print(u.username) - emls = EmailAddress.objects.filter(user=u, email_endswith="clipper.ens.fr") + try: - cpeml = acc.extra_data["ldap"]["email"] + profil = profil_dict[u.id] except KeyError: - cpeml = "%s@clipper.ens.fr" % acc.uid - - - ml = EmailAddress(email=cpeml, user=u, verified=True, primary=True) - if u.profil.mail != cpeml and u.profil.mail: - ml.primary = False - print(" Creating other primary address", u.profil.mail) - ml2 = EmailAddress(email=u.profil.mail, user=u, verified=True, primary=True) - ml2.save() - if emls.exists(): - print(" Clipper already exists", emls.values_list("email", flat=True)) - else: - print(" Saving Clipper", cpeml) - ml.save() + continue + + to_addr = set() + if profil.mail: + to_addr.add(profil.mail) + cp_ml = "%s@clipper.ens.fr" % acc.uid + try: + cp_ml = acc.extra_data["ldap"]["email"] + except KeyError: + pass + to_addr.add(cp_ml) + + addrs = addr_dict[u.id] + + print(u.username, ";".join(list(to_addr)), ";".join(list(addrs))) + to_addr -= addrs + has_prim = len(addrs) > 0 + + for addr in to_addr: + ml = EmailAddress(email=addr, user=u, verified=True, primary=has_prim) + has_prim = False + addr_to_create.append(ml) + +if "--fake" not in sys.argv: + EmailAddress.objects.bulk_create(addr_to_create)