added option for linking SSO accounts to existing accounts

This commit is contained in:
Jenny Danzmayr 2024-12-22 19:42:47 +01:00
parent de006a5761
commit b70f89a341
2 changed files with 27 additions and 2 deletions

View file

@ -48,6 +48,17 @@
<a class="button" href="{% url 'site.api_secret_list' %}">{% trans 'Manage API secrets' %}</a> <a class="button" href="{% url 'site.api_secret_list' %}">{% trans 'Manage API secrets' %}</a>
</p> </p>
{% if sso_backends %}
<hr>
<p>{% trans %}SSO Connections:{% endtrans %}</p>
{% for backend, name in sso_backends.not_associated.items %}
<p><a class="button" href="{% url 'social:begin' backend=backend %}?next={% url 'site.account' %}">Link {{ name }}</a></p>
{% endfor %}
{% for backend, name in sso_backends.associated.items %}
<p><a class="button delete" href="{% url 'social:disconnect' backend=backend %}?next={% url 'site.account' %}">Unlink {{ name }}</a></p>
{% endfor %}
{% endif %}
<hr> <hr>
<p> <p>
<a class="button" href="{% url 'site.logout' %}">{% trans 'Log out' %}</a> <a class="button" href="{% url 'site.logout' %}">{% trans 'Log out' %}</a>

View file

@ -416,9 +416,23 @@ def delete_account_view(request):
@never_cache @never_cache
@login_required(login_url='site.login') @login_required(login_url='site.login')
def account_view(request): def account_view(request):
return render(request, 'site/account.html', { ctx = {
'user_has_reports': Report.user_has_reports(request.user), 'user_has_reports': Report.user_has_reports(request.user),
}) }
if settings.SSO_ENABLED:
from social_core.backends.utils import user_backends_data
from social_django.utils import Storage
from c3nav.control.sso import get_sso_services
sso_services = get_sso_services()
ctx['sso_services'] = sso_services
backends = user_backends_data(
request.user, settings.AUTHENTICATION_BACKENDS, Storage
)
ctx['sso_backends'] = {
'associated': {backend.provider: sso_services[backend.provider] for backend in backends["associated"] },
'not_associated': {backend: sso_services[backend] for backend in backends["not_associated"] },
}
return render(request, 'site/account.html', ctx)
@never_cache @never_cache