From f83a5e90aef413a023e5ed653490e870896f1bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 25 Apr 2025 16:16:25 +0200 Subject: [PATCH] move sso code so it won't fail tests if sso dependencies are missing --- src/c3nav/control/sso/__init__.py | 20 +------------------- src/c3nav/control/sso/strategy.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 src/c3nav/control/sso/strategy.py diff --git a/src/c3nav/control/sso/__init__.py b/src/c3nav/control/sso/__init__.py index 062a519a..9c88532b 100644 --- a/src/c3nav/control/sso/__init__.py +++ b/src/c3nav/control/sso/__init__.py @@ -1,13 +1,9 @@ -from django.conf import settings -from social_core.utils import SETTING_PREFIX as SOCIAL_AUTH_SETTING_PREFIX -from social_core.backends.utils import load_backends -from social_django.strategy import DjangoStrategy - _sso_services = None def get_sso_services() -> dict[str, str]: global _sso_services + from social_core.backends.utils import load_backends from social_django.utils import load_strategy if _sso_services is None: @@ -18,17 +14,3 @@ def get_sso_services() -> dict[str, str]: return _sso_services -class C3navStrategy(DjangoStrategy): - """A subclass of DjangoStrategy that uses our config parser in addition to django settings""" - _list_keys = {'authentication_backends', 'pipeline'} - - def get_setting(self, name: str): - config_name = name.removeprefix(SOCIAL_AUTH_SETTING_PREFIX + '_').lower() - value = settings.C3NAV_CONFIG.get('sso', config_name, - fallback=None) - if value is not None: - if config_name in self._list_keys: - value = tuple(item.strip() for item in value.split(',')) - else: - value = super().get_setting(name) - return value diff --git a/src/c3nav/control/sso/strategy.py b/src/c3nav/control/sso/strategy.py new file mode 100644 index 00000000..03638ea6 --- /dev/null +++ b/src/c3nav/control/sso/strategy.py @@ -0,0 +1,20 @@ +from social_core.utils import SETTING_PREFIX as SOCIAL_AUTH_SETTING_PREFIX +from social_django.strategy import DjangoStrategy + +from django.conf import settings + + +class C3navStrategy(DjangoStrategy): + """A subclass of DjangoStrategy that uses our config parser in addition to django settings""" + _list_keys = {'authentication_backends', 'pipeline'} + + def get_setting(self, name: str): + config_name = name.removeprefix(SOCIAL_AUTH_SETTING_PREFIX + '_').lower() + value = settings.C3NAV_CONFIG.get('sso', config_name, + fallback=None) + if value is not None: + if config_name in self._list_keys: + value = tuple(item.strip() for item in value.split(',')) + else: + value = super().get_setting(name) + return value