From 5174f6765ce809ff0380f2085e901e1fa7cf0e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 4 Oct 2016 18:12:04 +0200 Subject: [PATCH] allow overwriting oauth callback host and scheme for local testing --- src/c3nav/editor/hosters/base.py | 13 ++++++++++++- src/c3nav/settings.py | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/c3nav/editor/hosters/base.py b/src/c3nav/editor/hosters/base.py index 61e24c82..62eca861 100644 --- a/src/c3nav/editor/hosters/base.py +++ b/src/c3nav/editor/hosters/base.py @@ -1,5 +1,7 @@ from abc import ABC, abstractmethod +from urllib.parse import urlparse, urlunparse +from django.conf import settings from django.urls.base import reverse from django.utils.translation import ugettext_lazy as _ @@ -19,7 +21,16 @@ class Hoster(ABC): return Package.objects.filter(home_repo__startswith=self.base_url) def _get_callback_uri(self, request): - return request.build_absolute_uri(reverse('editor.oauth.callback', kwargs={'hoster': self.name})) + uri = request.build_absolute_uri(reverse('editor.oauth.callback', kwargs={'hoster': self.name})) + if settings.OAUTH_CALLBACK_SCHEME is None and settings.OAUTH_CALLBACK_NETLOC is None: + return uri + + parts = list(urlparse(uri)) + if settings.OAUTH_CALLBACK_SCHEME is not None: + parts[0] = settings.OAUTH_CALLBACK_SCHEME + if settings.OAUTH_CALLBACK_NETLOC is not None: + parts[1] = settings.OAUTH_CALLBACK_NETLOC + return urlunparse(parts) def _get_session_data(self, request): request.session.modified = True diff --git a/src/c3nav/settings.py b/src/c3nav/settings.py index 14c2a837..077aae8e 100644 --- a/src/c3nav/settings.py +++ b/src/c3nav/settings.py @@ -51,6 +51,8 @@ DIRECT_EDITING = config.getboolean('c3nav', 'direct_editing', fallback=DEBUG) PUBLIC_PACKAGES = [n for n in config.get('c3nav', 'public_packages', fallback='').split(',') if n] EDITOR_HOSTERS = OrderedDict((name[7:], data) for name, data in config.items() if name.startswith('hoster:')) +OAUTH_CALLBACK_SCHEME = config.get('c3nav', 'oauth_callback_scheme') +OAUTH_CALLBACK_NETLOC = config.get('c3nav', 'oauth_callback_netloc') db_backend = config.get('database', 'backend', fallback='sqlite3') DATABASES = {