Adds detail page for federated servers

This commit is contained in:
Mouse Reeve 2021-03-28 12:34:55 -07:00
parent fcce8f4cbf
commit 96ea2b4477
5 changed files with 105 additions and 3 deletions

View File

@ -0,0 +1,68 @@
{% extends 'settings/admin_layout.html' %}
{% block title %}{{ server.server_name }}{% endblock %}
{% load i18n %}
{% block header %}
{{ server.server_name }}
<a href="{% url 'settings-federation' %}" class="has-text-weight-normal help">{% trans "Back to server list" %}</a>
{% endblock %}
{% block panel %}
<section class="block content">
<h2 class="title is-4">{% trans "Details" %}</h2>
<dl>
<div class="is-flex">
<dt>{% trans "Software:" %}</dt>
<dd>{{ server.application_type }}</dd>
</div>
<div class="is-flex">
<dt>{% trans "Version:" %}</dt>
<dd>{{ server.application_version }}</dd>
</div>
<div class="is-flex">
<dt>{% trans "Status:" %}</dt>
<dd>Federated</dd>
</div>
</dl>
</section>
<section class="block content">
<h2 class="title is-4">{% trans "Activity" %}</h2>
<dl>
<div class="is-flex">
<dt>{% trans "Users:" %}</dt>
<dd>
{{ users.count }}
{# {% if server.user_set.count %}(<a href="{% url 'settings-users' server=server.id %}">{% trans "View all users" %}</a>){% endif %} #}
</dd>
</div>
<div class="is-flex">
<dt>{% trans "Reports:" %}</dt>
<dd>
{{ reports.count }}
{# {% if server.user_set.count %}(<a href="{% url 'settings-users' server=server.id %}">{% trans "View all users" %}</a>){% endif %} #}
</dd>
</div>
<div class="is-flex">
<dt>{% trans "Followed by us:" %}</dt>
<dd>
{{ followed_by_us.count }}
</dd>
</div>
<div class="is-flex">
<dt>{% trans "Followed by them:" %}</dt>
<dd>
{{ followed_by_them.count }}
</dd>
</div>
<div class="is-flex">
<dt>{% trans "Blocked by us:" %}</dt>
<dd>
{{ blocked_by_us.count }}
</dd>
</div>
</dl>
</section>
{% endblock %}

View File

@ -1,5 +1,6 @@
{% extends 'settings/admin_layout.html' %} {% extends 'settings/admin_layout.html' %}
{% load i18n %} {% load i18n %}
{% block title %}{% trans "Federated Servers" %}{% endblock %}
{% block header %}{% trans "Federated Servers" %}{% endblock %} {% block header %}{% trans "Federated Servers" %}{% endblock %}
@ -13,7 +14,7 @@
</tr> </tr>
{% for server in servers %} {% for server in servers %}
<tr> <tr>
<td>{{ server.server_name }}</td> <td><a href="{% url 'settings-federated-server' server.id %}">{{ server.server_name }}</a></td>
<td>{{ server.application_type }} ({{ server.application_version }})</td> <td>{{ server.application_type }} ({{ server.application_version }})</td>
<td>{{ server.status }}</td> <td>{{ server.status }}</td>
</tr> </tr>

View File

@ -55,7 +55,14 @@ urlpatterns = [
name="settings-email-preview", name="settings-email-preview",
), ),
re_path( re_path(
r"^settings/federation", views.Federation.as_view(), name="settings-federation" r"^settings/federation/?$",
views.Federation.as_view(),
name="settings-federation",
),
re_path(
r"^settings/federation/(?P<server>\d+)/?$",
views.FederatedServer.as_view(),
name="settings-federated-server",
), ),
re_path( re_path(
r"^settings/invites/?$", views.ManageInvites.as_view(), name="settings-invites" r"^settings/invites/?$", views.ManageInvites.as_view(), name="settings-invites"

View File

@ -6,7 +6,7 @@ from .books import Book, EditBook, ConfirmEditBook, Editions
from .books import upload_cover, add_description, switch_edition, resolve_book from .books import upload_cover, add_description, switch_edition, resolve_book
from .directory import Directory from .directory import Directory
from .error import not_found_page, server_error_page from .error import not_found_page, server_error_page
from .federation import Federation from .federation import Federation, FederatedServer
from .feed import DirectMessage, Feed, Replies, Status from .feed import DirectMessage, Feed, Replies, Status
from .follow import follow, unfollow from .follow import follow, unfollow
from .follow import accept_follow_request, delete_follow_request from .follow import accept_follow_request, delete_follow_request

View File

@ -1,5 +1,6 @@
""" manage federated servers """ """ manage federated servers """
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import get_object_or_404
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.views import View from django.views import View
@ -21,3 +22,28 @@ class Federation(View):
servers = models.FederatedServer.objects.all() servers = models.FederatedServer.objects.all()
data = {"servers": servers} data = {"servers": servers}
return TemplateResponse(request, "settings/federation.html", data) return TemplateResponse(request, "settings/federation.html", data)
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.control_federation", raise_exception=True),
name="dispatch",
)
class FederatedServer(View):
""" views for handling a specific federated server """
def get(self, request, server):
""" load a server """
server = get_object_or_404(models.FederatedServer, id=server)
users = server.user_set
data = {
"server": server,
"users": users,
"reports": models.Report.objects.filter(user__in=users.all()),
"followed_by_us": users.filter(followers__local=True),
"followed_by_them": users.filter(following__local=True),
"blocked_by_us": models.UserBlocks.objects.filter(
user_subject__in=users.all()
),
}
return TemplateResponse(request, "settings/federated_server.html", data)