diff --git a/authentic2_auth_saml2/app_settings.py b/authentic2_auth_saml2/app_settings.py index 97b6abd..71a10a4 100644 --- a/authentic2_auth_saml2/app_settings.py +++ b/authentic2_auth_saml2/app_settings.py @@ -1,11 +1,25 @@ class AppSettings(object): + __DEFAULTS = { + 'METADATA_OPTIONS': {}, + 'DISCO_RETURN_ID_PARAM': 'entityID', + 'DISCO_SERVICE_NAME': None, + } def __init__(self, prefix): self.prefix = prefix + def SHOW_DISCO_IN_MD(self): + from django.conf import settings + return getattr(settings, 'SHOW_DISCO_IN_MD', False) + def _setting(self, name, dflt): from django.conf import settings - return getattr(settings, name, dflt) + return getattr(settings, self.prefix+name, dflt) + + def __getattr__(self, name): + if name in self.__DEFAULTS: + return self._setting(name, self.__DEFAULTS[name]) + raise AttributeError(name) # Ugly? Guido recommends this himself ... diff --git a/authentic2_auth_saml2/views.py b/authentic2_auth_saml2/views.py index 7cc542b..5a309d8 100644 --- a/authentic2_auth_saml2/views.py +++ b/authentic2_auth_saml2/views.py @@ -40,12 +40,9 @@ from authentic2_auth_saml2.utils import error_page from authentic2_auth_saml2 import signals from authentic2.utils import cache_and_validate, flush_django_session -from . import utils +from . import utils, app_settings from .decorators import anonymous_only -__logout_redirection_timeout = getattr(settings, - 'IDP_LOGOUT_TIMEOUT', 600) - logger = logging.getLogger(__name__) MANAGE_DUMP_KEY = 'manage-dump' @@ -73,7 +70,7 @@ metadata_map = ( ) metadata_options = {'key': settings.SAML_SIGNATURE_PUBLIC_KEY} try: - if settings.SHOW_DISCO_IN_MD: + if app_settings.SHOW_DISCO_IN_MD: metadata_options['disco'] = ('/discoveryReturn', ) except: pass @@ -658,8 +655,7 @@ def get_provider_id_and_options(provider_id): if not provider_id: provider_id = reverse('a2-auth-saml2-metadata') options = metadata_options - if getattr(settings, 'AUTHSAML2_METADATA_OPTIONS', None): - options.update(settings.AUTHSAML2_METADATA_OPTIONS) + options.update(app_settings.AUTHSAML2_METADATA_OPTIONS) return provider_id, options def get_metadata(request, provider_id=None): diff --git a/authentic2_auth_saml2/views_disco.py b/authentic2_auth_saml2/views_disco.py index 6c2b793..7e9bcef 100644 --- a/authentic2_auth_saml2/views_disco.py +++ b/authentic2_auth_saml2/views_disco.py @@ -3,18 +3,17 @@ import urlparse import urllib from django.core.urlresolvers import reverse -from django.conf import settings from django.http import Http404, HttpResponseRedirect from django.utils.translation import ugettext as _ -from .views import metadata from .utils import register_next_target, error_page, get_registered_url +from . import app_settings logger = logging.getLogger(__name__) def get_return_id_param(): - return getattr(settings, 'DISCO_RETURN_ID_PARAM', 'entityID') + return app_settings.DISCO_RETURN_ID_PARAM ############################################################## # @@ -40,11 +39,11 @@ def build_discovery_url(request, target): def redirect_to_disco(request): '''Send a discovery request to the default disco service''' - if not hasattr(settings, 'DISCO_SERVICE_NAME'): + if not app_settings.DISCO_SERVICE_NAME: raise Http404 register_next_target(request) try: - target = settings.DISCO_SERVICE_NAME + target = app_settings.DISCO_SERVICE_NAME except: logger.error('missing parameter in settings') return None @@ -57,7 +56,7 @@ def redirect_to_disco(request): def disco_response(request): '''Handle the discovery response''' - if not hasattr(settings, 'DISCO_SERVICE_NAME'): + if not app_settings.DISCO_SERVICE_NAME: raise Http404 if not request.method == "GET": message = _('HTTP request not supported')