57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
from allauth.account.adapter import DefaultAccountAdapter
|
|
from allauth.socialaccount.models import SocialAccount
|
|
from allauth_ens.adapter import LongTermClipperAccountAdapter, get_ldap_infos
|
|
|
|
class AccountAdapter(DefaultAccountAdapter):
|
|
def is_open_for_signup(self, request):
|
|
return False
|
|
|
|
|
|
class SocialAccountAdapter(LongTermClipperAccountAdapter):
|
|
def is_open_for_signup(self, request, sociallogin):
|
|
# sociallogin.account is a SocialAccount instance.
|
|
# See https://github.com/pennersr/django-allauth/blob/master/allauth/socialaccount/models.py
|
|
|
|
if sociallogin.account.provider == 'clipper':
|
|
return True
|
|
|
|
# It returns AccountAdapter.is_open_for_signup().
|
|
# See https://github.com/pennersr/django-allauth/blob/master/allauth/socialaccount/adapter.py
|
|
return super().is_open_for_signup(request, sociallogin)
|
|
|
|
|
|
# TODO : HOTFIX pour un bug d'allauth_ens
|
|
# On remplace la déduplication des comptes faites avec "entrance_year"
|
|
# par une déduplication sur le nom d'utilisateur
|
|
# (Copié de allauth_ens)
|
|
def pre_social_login(self, request, sociallogin):
|
|
if sociallogin.account.provider != "clipper":
|
|
return super(LongTermClipperAccountAdapter,
|
|
self).pre_social_login(request, sociallogin)
|
|
|
|
clipper_uid = sociallogin.account.uid
|
|
try:
|
|
old_conn = SocialAccount.objects.get(provider='clipper_inactive',
|
|
uid=clipper_uid)
|
|
except SocialAccount.DoesNotExist:
|
|
return
|
|
|
|
ldap_data = get_ldap_infos(clipper_uid)
|
|
sociallogin._ldap_data = ldap_data
|
|
|
|
if ldap_data is None or 'entrance_year' not in ldap_data:
|
|
raise ValueError("No entrance year in LDAP data")
|
|
|
|
old_conn_username = old_conn.user.username
|
|
|
|
# HOTFIX ICI
|
|
if self.get_username(clipper_uid, ldap_data) != old_conn_username:
|
|
email = ldap_data.get('email', get_clipper_email(clipper_uid))
|
|
remove_email(old_conn.user, email)
|
|
|
|
return
|
|
|
|
old_conn.provider = 'clipper'
|
|
old_conn.save()
|
|
|
|
sociallogin.lookup()
|