Explorar el Código

Fixes #10337: Display SSO links when local authentication fails

jeremystretch hace 3 años
padre
commit
e05696dfcc
Se han modificado 3 ficheros con 26 adiciones y 22 borrados
  1. 1 0
      docs/release-notes/version-3.3.md
  2. 10 10
      netbox/templates/login.html
  3. 15 12
      netbox/users/views.py

+ 1 - 0
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
 
 ---

+ 10 - 10
netbox/templates/login.html

@@ -13,6 +13,16 @@
       </div>
     {% endif %}
 
+    {# Login form errors #}
+    {% if form.non_field_errors %}
+      <div class="alert alert-danger" role="alert">
+        <h4 class="alert-heading">Errors</h4>
+        <p>
+          {{ form.non_field_errors }}
+        </p>
+      </div>
+    {% endif %}
+
     {# Login form #}
     <div class="form-login">
       <form action="{% url 'login' %}" method="post">
@@ -48,16 +58,6 @@
         </h5>
       {% endfor %}
     {% endif %}
-
-    {# Login form errors #}
-    {% if form.non_field_errors %}
-      <div class="alert alert-danger" role="alert">
-        <h4 class="alert-heading">Errors</h4>
-        <p>
-          {{ form.non_field_errors }}
-        </p>
-      </div>
-    {% endif %}
   </main>
 
   {# Page footer #}

+ 15 - 12
netbox/users/views.py

@@ -47,20 +47,14 @@ class LoginView(View):
             '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 @@ class LoginView(View):
             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 @@ class LoginView(View):
 
         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):