Remove social connections page and restrict email settings to non-OAuth users

This commit is contained in:
krek0 2026-05-17 07:03:43 +02:00
parent 997fd760d2
commit 28f279a4ab
5 changed files with 13 additions and 69 deletions

View file

@ -15,9 +15,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
<li class="nav-item"> <li class="nav-item">
<a class="nav-link active" href="{% url 'account_email' %}">{% trans "E-mail Addresses" %}</a> <a class="nav-link active" href="{% url 'account_email' %}">{% trans "E-mail Addresses" %}</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="{% url 'socialaccount_connections' %}">{% trans "Social connections" %}</a>
</li>
</ul> </ul>
</div> </div>
<div class="card-body"> <div class="card-body">

View file

@ -72,6 +72,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
</ul> </ul>
</li> </li>
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
{% if not request.user.socialaccount_set.all %}
<li class="nav-item"> <li class="nav-item">
{% url 'account_email' as url %} {% url 'account_email' as url %}
<a class="nav-link {% if request.path_info == url %}active{% endif %}" href="{{ url }}"> <a class="nav-link {% if request.path_info == url %}active{% endif %}" href="{{ url }}">
@ -81,6 +82,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% trans "Account" %} {% trans "Account" %}
</a> </a>
</li> </li>
{% endif %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{% url 'account_logout' %}"> <a class="nav-link" href="{% url 'account_logout' %}">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-right" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-right" viewBox="0 0 16 16">

View file

@ -1,65 +0,0 @@
{% extends "socialaccount/base.html" %}
{% comment %}
This file is part of photo21
Copyright (C) 2022 Amicale des élèves de l'ENS Paris-Saclay
SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load i18n %}
{% block head_title %}{% trans "Account Connections" %}{% endblock %}
{% block content %}
<h1>{% trans "Account" %}</h1>
<div class="card">
<div class="card-header pb-0 border-bottom-0">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" href="{% url 'account_email' %}">{% trans "E-mail Addresses" %}</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="{% url 'socialaccount_connections' %}">{% trans "Social connections" %}</a>
</li>
</ul>
</div>
<div class="card-body">
{% if form.accounts %}
<p>{% blocktrans %}You can sign in to your account using any of the following third party accounts:{% endblocktrans %}</p>
<form method="post" action="{% url 'socialaccount_connections' %}">
{% csrf_token %}
<fieldset>
{% if form.non_field_errors %}
<div id="errorMsg">{{ form.non_field_errors }}</div>
{% endif %}
{% for base_account in form.accounts %}
{% with base_account.get_provider_account as account %}
<div>
<label for="id_account_{{ base_account.id }}">
<input id="id_account_{{ base_account.id }}" type="radio" name="account" value="{{ base_account.id }}"/>
<span class="socialaccount_provider {{ base_account.provider }} {{ account.get_brand.id }}">{{account.get_brand.name}}</span>
{{ account }}
</label>
</div>
{% endwith %}
{% endfor %}
<div>
<button type="submit">{% trans 'Remove' %}</button>
</div>
</fieldset>
</form>
{% else %}
<p>{% trans 'You currently have no social network accounts connected to this account.' %}</p>
{% endif %}
<h2>{% trans 'Add a 3rd Party Account' %}</h2>
<ul class="socialaccount_providers">
{% include "socialaccount/snippets/provider_list.html" with process="connect" %}
</ul>
{% include "socialaccount/snippets/login_extra.html" %}
</div>
</div>
{% endblock %}

View file

@ -17,12 +17,13 @@ from django.views.i18n import JavaScriptCatalog
if settings.DEBUG: if settings.DEBUG:
from debug_toolbar.toolbar import debug_toolbar_urls from debug_toolbar.toolbar import debug_toolbar_urls
from .views import IndexView, MediaAccess from .views import EmailView, IndexView, MediaAccess
urlpatterns = [ urlpatterns = [
path("select2/", include("django_select2.urls")), path("select2/", include("django_select2.urls")),
path("", IndexView.as_view(), name="index"), path("", IndexView.as_view(), name="index"),
path("", include("photologue.urls", namespace="photologue")), path("", include("photologue.urls", namespace="photologue")),
path("accounts/email/", EmailView.as_view(), name="account_email"),
path("accounts/", include("allauth.urls")), path("accounts/", include("allauth.urls")),
path("accounts/", include("allauth_oauth.urls")), path("accounts/", include("allauth_oauth.urls")),

View file

@ -4,14 +4,23 @@
import os import os
from allauth.account.views import EmailView as AllauthEmailView
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import FileResponse, Http404 from django.http import FileResponse, Http404
from django.shortcuts import redirect
from django.views.generic import ListView, View from django.views.generic import ListView, View
from photologue.models import Gallery, Photo, Video from photologue.models import Gallery, Photo, Video
class EmailView(AllauthEmailView):
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated and request.user.socialaccount_set.exists():
return redirect("index")
return super().dispatch(request, *args, **kwargs)
class MediaAccess(View): class MediaAccess(View):
def get(self, request, path): def get(self, request, path):
if not request.user.is_authenticated: if not request.user.is_authenticated: