diff --git a/portail_citoyen2/allauth_authentic2/app_settings.py b/portail_citoyen2/allauth_authentic2/app_settings.py new file mode 100644 index 0000000..6ebbc07 --- /dev/null +++ b/portail_citoyen2/allauth_authentic2/app_settings.py @@ -0,0 +1,27 @@ +import sys + +class AppSettings(object): + __defaults = { + 'ADMIN_ROLE': None, + } + + def __init__(self, prefix): + self.prefix = prefix + + def __getattr__(self, name): + if name in self.__defaults: + return self._settings(name, self.__defaults[name]) + else: + return self._settings(name) + + def _settings(self, name, default=Ellipsis): + from django.conf import settings + if default is Ellipsis: + return getattr(settings, self.prefix + name) + else: + return getattr(settings, self.prefix + name, default) + +app_settings = AppSettings('ALLAUTH_A2_') +app_settings.__name__ = __name__ +sys.modules[__name__] = app_settings + diff --git a/portail_citoyen2/allauth_authentic2/provider.py b/portail_citoyen2/allauth_authentic2/provider.py index 5abb29c..34b1296 100644 --- a/portail_citoyen2/allauth_authentic2/provider.py +++ b/portail_citoyen2/allauth_authentic2/provider.py @@ -3,6 +3,8 @@ from allauth.socialaccount.providers.base import ProviderAccount from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider from allauth.account.models import EmailAddress +from . import app_settings + class Authentic2Account(ProviderAccount): def to_str(self): return self.account.uid @@ -28,6 +30,15 @@ class Authentic2Provider(OAuth2Provider): primary=True)] return ret + def sociallogin_from_response(self, request, response): + sociallogin = self(Authentic2Provider, self).sociallogin_from_response( + request, response) + if app_settings.ADMIN_ROLE in response.get('role', []): + sociallogin.account.user.is_superuser = True + sociallogin.account.user.is_staff = True + return sociallogin + + providers.registry.register(Authentic2Provider)