From 1ca9da96b2606dba7cde2b4702447a71fff2f8fd Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 27 Jan 2022 19:19:46 +0100 Subject: [PATCH] misc: add context-processor user_urls (#61192) It introduces three new templates variables: - login_url - logout_url - registration_url Each one is adapter to return to the current page. --- debian/debian_config_common.py | 1 + hobo/context_processors.py | 17 +++++++++++++++++ hobo/multitenant/management/commands/shell.py | 3 ++- hobo/multitenant/settings_loaders.py | 2 +- tests/test_context_processors.py | 12 +++++++++++- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/debian/debian_config_common.py b/debian/debian_config_common.py index 570ce48..1dd0373 100644 --- a/debian/debian_config_common.py +++ b/debian/debian_config_common.py @@ -241,6 +241,7 @@ if 'TEMPLATE_DEBUG' in globals(): 'hobo.context_processors.template_vars', 'hobo.context_processors.theme_base', 'hobo.context_processors.portal_agent_url', + 'hobo.context_processors.user_urls', ) + TEMPLATE_CONTEXT_PROCESSORS else: assert len(TEMPLATES) diff --git a/hobo/context_processors.py b/hobo/context_processors.py index fb88d8e..a51777c 100644 --- a/hobo/context_processors.py +++ b/hobo/context_processors.py @@ -10,6 +10,7 @@ from django.conf import settings from django.core.cache import cache from django.template import Template from django.utils.encoding import smart_bytes +from django.utils.http import urlencode from django.utils.six.moves.urllib import parse as urlparse from hobo.scrutiny.wsgi.middleware import VersionMiddleware @@ -187,3 +188,19 @@ def hobo_json(request): context = TemplateVars.get_hobo_json_variables(get_hobo_json()) context['manager_homepage_url'] = context.get(settings.HOBO_MANAGER_HOMEPAGE_URL_VAR) return context + + +def user_urls(request): + template_vars = getattr(settings, 'TEMPLATE_VARS', {}) + full_path = request.get_full_path() + query_string = urlencode({'next': full_path}) + context = { + 'login_url': '/login/?' + query_string, + 'logout_url': '/logout/?' + query_string, + } + if 'idp_registration_url' in template_vars: + absolute_uri = request.build_absolute_uri() + context['registration_url'] = ( + template_vars['idp_registration_url'] + '?' + urlencode({'next': absolute_uri}) + ) + return context diff --git a/hobo/multitenant/management/commands/shell.py b/hobo/multitenant/management/commands/shell.py index cbc01f8..a5a0eb8 100644 --- a/hobo/multitenant/management/commands/shell.py +++ b/hobo/multitenant/management/commands/shell.py @@ -7,5 +7,6 @@ class Command(TenantWrappedCommand): COMMAND = shell.Command def handle(self, *args, **kwargs): - disable_global_logging() + import pdb + super(Command, self).handle(*args, **kwargs) diff --git a/hobo/multitenant/settings_loaders.py b/hobo/multitenant/settings_loaders.py index c8665a5..69004f4 100644 --- a/hobo/multitenant/settings_loaders.py +++ b/hobo/multitenant/settings_loaders.py @@ -183,9 +183,9 @@ class TemplateVars(FileBaseSettingsLoader): # expect authentic to search first in the default ou params['service'] = variables['portal_user_slug'] if params: - variables['idp_registration_url'] += '?%s' % urlencode(params) variables['idp_service_params'] = urlencode({k: v for k, v in params.items() if k != 'next'}) variables['idp_service_and_next_params'] = urlencode(params) + variables['portal_slug_on_idp'] = params['service'] if getattr(settings, 'HOBO_MANAGER_HOMEPAGE_TITLE_VAR', None): variables['manager_homepage_title'] = variables.get(settings.HOBO_MANAGER_HOMEPAGE_TITLE_VAR) diff --git a/tests/test_context_processors.py b/tests/test_context_processors.py index a0defc3..8909900 100644 --- a/tests/test_context_processors.py +++ b/tests/test_context_processors.py @@ -6,7 +6,7 @@ from django.core.cache import cache from django.test import override_settings from httmock import HTTMock, urlmatch -from hobo.context_processors import theme_base +from hobo.context_processors import theme_base, user_urls def test_theme_base(settings, rf): @@ -66,3 +66,13 @@ def test_theme_base(settings, rf): context = theme_base(rf.get('/page1/page2/')) check(context, TEMPLATE_PAGE2) assert len(seen_urls) == 0 + + +def test_user_urls(settings, rf): + settings.TEMPLATE_VARS = {'idp_registration_url': 'https://idp/register/'} + request = rf.get('/page/') + assert user_urls(request) == { + 'login_url': '/login/?next=%2Fpage%2F', + 'logout_url': '/logout/?next=%2Fpage%2F', + 'registration_url': 'https://idp/register/?next=http%3A%2F%2Ftestserver%2Fpage%2F', + } -- 2.34.1