#10135 refactor / cleanup

This commit is contained in:
Arthur 2022-08-25 11:04:47 -07:00
parent 63c1b7380b
commit 7fdef17957
2 changed files with 26 additions and 26 deletions

View File

@ -41,20 +41,11 @@
{% if auth_backends %} {% if auth_backends %}
<h6 class="mt-4 mb-3">Or use a single sign-on (SSO) provider:</h6> <h6 class="mt-4 mb-3">Or use a single sign-on (SSO) provider:</h6>
{% for name, backend in auth_backends.items %} {% for backend in auth_backends %}
{% if name == 'saml' and backend.saml_idps %} <h5>
{% for idp in backend.saml_idps %} {% if backend.icon_name %}<i class="mdi mdi-{{ backend.icon_name }}"></i>{% endif %}
<h5> <a href="{{ backend.url }}" class="my-2">{{ backend.display_name }}</a>
{% if backend.icon_name %}<i class="mdi mdi-{{ backend.icon_name }}"></i>{% endif %} </h5>
<a href="{% url 'social:begin' backend=name %}?idp={{idp}}" class="my-2">{{ backend.display_name }} ({{idp}})</a>
</h5>
{% endfor %}
{% else %}
<h5>
{% if backend.icon_name %}<i class="mdi mdi-{{ backend.icon_name }}"></i>{% endif %}
<a href="{% url 'social:begin' backend=name %}" class="my-2">{{ backend.display_name }}</a>
</h5>
{% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}

View File

@ -10,7 +10,7 @@ from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse from django.urls import reverse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.http import url_has_allowed_host_and_scheme from django.utils.http import url_has_allowed_host_and_scheme, urlencode
from django.views.decorators.debug import sensitive_post_parameters from django.views.decorators.debug import sensitive_post_parameters
from django.views.generic import View from django.views.generic import View
from social_core.backends.utils import load_backends from social_core.backends.utils import load_backends
@ -39,6 +39,14 @@ class LoginView(View):
def dispatch(self, *args, **kwargs): def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs) return super().dispatch(*args, **kwargs)
def gen_auth_data(self, name, url):
display_name, icon_name = get_auth_backend_display(name)
return {
'display_name': display_name,
'icon_name': icon_name,
'url': url,
}
def get(self, request): def get(self, request):
form = LoginForm(request) form = LoginForm(request)
@ -46,18 +54,19 @@ class LoginView(View):
logger = logging.getLogger('netbox.auth.login') logger = logging.getLogger('netbox.auth.login')
return self.redirect_to_next(request, logger) return self.redirect_to_next(request, logger)
auth_backends = {} auth_backends = []
saml_idps = get_saml_idps()
for name in load_backends(settings.AUTHENTICATION_BACKENDS).keys(): for name in load_backends(settings.AUTHENTICATION_BACKENDS).keys():
display_name, icon_name = get_auth_backend_display(name) url = reverse('social:begin', args=[name, ])
data = { if name.lower() == 'saml' and saml_idps:
'display_name': display_name, for idp in saml_idps:
'icon_name': icon_name, params = {'idp': idp}
} idp_url = f'{url}?{urlencode(params)}'
data = self.gen_auth_data(name, idp_url)
if name == 'saml': data['display_name'] = f'{data["display_name"]} ({idp})'
data['saml_idps'] = get_saml_idps() auth_backends.append(data)
else:
auth_backends[name] = data auth_backends.append(self.gen_auth_data(name, url))
return render(request, self.template_name, { return render(request, self.template_name, {
'form': form, 'form': form,