From e05696dfcc8f3c711f1435795ea9676638fc12b8 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 15 Sep 2022 13:17:04 -0400 Subject: [PATCH] Fixes #10337: Display SSO links when local authentication fails --- docs/release-notes/version-3.3.md | 1 + netbox/templates/login.html | 20 ++++++++++---------- netbox/users/views.py | 27 +++++++++++++++------------ 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/docs/release-notes/version-3.3.md b/docs/release-notes/version-3.3.md index ba6e4a06e30..3f4272f95d9 100644 --- a/docs/release-notes/version-3.3.md +++ b/docs/release-notes/version-3.3.md @@ -23,6 +23,7 @@ * [#10305](https://github.com/netbox-community/netbox/issues/10305) - Fix Virtual Chassis master field cannot be null according to the API * [#10307](https://github.com/netbox-community/netbox/issues/10307) - Correct value for "Passive 48V (4-pair)" PoE type selection * [#10333](https://github.com/netbox-community/netbox/issues/10333) - Show available values for `ui_visibility` field of CustomField for CSV import +* [#10337](https://github.com/netbox-community/netbox/issues/10337) - Display SSO links when local authentication fails * [#10362](https://github.com/netbox-community/netbox/issues/10362) - Correct display of custom fields when editing an L2VPN termination --- diff --git a/netbox/templates/login.html b/netbox/templates/login.html index ea5cfc3e5db..66b5196711e 100644 --- a/netbox/templates/login.html +++ b/netbox/templates/login.html @@ -13,6 +13,16 @@ {% endif %} + {# Login form errors #} + {% if form.non_field_errors %} + + {% endif %} + {# Login form #}
@@ -48,16 +58,6 @@
{% endfor %} {% endif %} - - {# Login form errors #} - {% if form.non_field_errors %} - - {% endif %} {# Page footer #} diff --git a/netbox/users/views.py b/netbox/users/views.py index 4af273d2928..33ef3fadd85 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -47,20 +47,14 @@ def gen_auth_data(self, name, url, params): 'url': f'{url}?{urlencode(params)}', } - def get(self, request): - form = LoginForm(request) - - if request.user.is_authenticated: - logger = logging.getLogger('netbox.auth.login') - return self.redirect_to_next(request, logger) - + def get_auth_backends(self, request): auth_backends = [] saml_idps = get_saml_idps() + for name in load_backends(settings.AUTHENTICATION_BACKENDS).keys(): - url = reverse('social:begin', args=[name, ]) + url = reverse('social:begin', args=[name]) params = {} - next = request.GET.get('next') - if next: + if next := request.GET.get('next'): params['next'] = next if name.lower() == 'saml' and saml_idps: for idp in saml_idps: @@ -71,9 +65,18 @@ def get(self, request): else: auth_backends.append(self.gen_auth_data(name, url, params)) + return auth_backends + + def get(self, request): + form = LoginForm(request) + + if request.user.is_authenticated: + logger = logging.getLogger('netbox.auth.login') + return self.redirect_to_next(request, logger) + return render(request, self.template_name, { 'form': form, - 'auth_backends': auth_backends, + 'auth_backends': self.get_auth_backends(request), }) def post(self, request): @@ -107,7 +110,7 @@ def post(self, request): return render(request, self.template_name, { 'form': form, - 'auth_backends': load_backends(settings.AUTHENTICATION_BACKENDS), + 'auth_backends': self.get_auth_backends(request), }) def redirect_to_next(self, request, logger):