diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 7ebe9b96..666ac612 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -479,10 +479,13 @@ def set_remote_server(user_id): get_remote_reviews.delay(user.outbox) -def get_or_create_remote_server(domain): +def get_or_create_remote_server(domain, refresh=False): """get info on a remote server""" + server = FederatedServer() try: - return FederatedServer.objects.get(server_name=domain) + server = FederatedServer.objects.get(server_name=domain) + if not refresh: + return server except FederatedServer.DoesNotExist: pass @@ -497,13 +500,15 @@ def get_or_create_remote_server(domain): application_type = data.get("software", {}).get("name") application_version = data.get("software", {}).get("version") except ConnectorException: + if server.id: + return server application_type = application_version = None - server = FederatedServer.objects.create( - server_name=domain, - application_type=application_type, - application_version=application_version, - ) + server.server_name = domain + server.application_type = application_type + server.application_version = application_version + + server.save() return server diff --git a/bookwyrm/templates/settings/federation/edit_instance.html b/bookwyrm/templates/settings/federation/edit_instance.html index 0a67895c..3d9b031b 100644 --- a/bookwyrm/templates/settings/federation/edit_instance.html +++ b/bookwyrm/templates/settings/federation/edit_instance.html @@ -4,7 +4,19 @@ {% block header %} {% trans "Add instance" %} -{% trans "Back to instance list" %} +{% endblock %} + +{% block breadcrumbs %} + {% endblock %} {% block panel %} @@ -73,9 +85,13 @@ - + + +{% endblock %} + +{% block breadcrumbs %} + {% endblock %} {% block panel %} diff --git a/bookwyrm/templates/settings/federation/instance_blocklist.html b/bookwyrm/templates/settings/federation/instance_blocklist.html index abd58091..4f1fe9cb 100644 --- a/bookwyrm/templates/settings/federation/instance_blocklist.html +++ b/bookwyrm/templates/settings/federation/instance_blocklist.html @@ -4,7 +4,19 @@ {% block header %} {% trans "Import Blocklist" %} -{% trans "Back to instance list" %} +{% endblock %} + +{% block breadcrumbs %} + {% endblock %} {% block panel %} diff --git a/bookwyrm/templates/settings/federation/instance_list.html b/bookwyrm/templates/settings/federation/instance_list.html index 61afb317..5cbec876 100644 --- a/bookwyrm/templates/settings/federation/instance_list.html +++ b/bookwyrm/templates/settings/federation/instance_list.html @@ -16,11 +16,11 @@ diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index d2caa76e..8da1cafc 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -144,6 +144,11 @@ urlpatterns = [ views.unblock_server, name="settings-federated-server-unblock", ), + re_path( + r"^settings/federation/(?P\d+)/refresh/?$", + views.refresh_server, + name="settings-federated-server-refresh", + ), re_path( r"^settings/federation/add/?$", views.AddFederatedServer.as_view(), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 76e9ff02..988fe95a 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -6,7 +6,7 @@ from .admin.automod import AutoMod, automod_delete, run_automod from .admin.dashboard import Dashboard from .admin.federation import Federation, FederatedServer from .admin.federation import AddFederatedServer, ImportServerBlocklist -from .admin.federation import block_server, unblock_server +from .admin.federation import block_server, unblock_server, refresh_server from .admin.email_blocklist import EmailBlocklist from .admin.ip_blocklist import IPBlocklist from .admin.invite import ManageInvites, Invite, InviteRequest diff --git a/bookwyrm/views/admin/federation.py b/bookwyrm/views/admin/federation.py index 19bba30d..d9555349 100644 --- a/bookwyrm/views/admin/federation.py +++ b/bookwyrm/views/admin/federation.py @@ -11,6 +11,7 @@ from django.views.decorators.http import require_POST from bookwyrm import forms, models from bookwyrm.settings import PAGE_LENGTH +from bookwyrm.models.user import get_or_create_remote_server # pylint: disable= no-self-use @@ -37,6 +38,12 @@ class Federation(View): page = paginated.get_page(request.GET.get("page")) data = { + "federated_count": models.FederatedServer.objects.filter( + status="federated" + ).count(), + "blocked_count": models.FederatedServer.objects.filter( + status="blocked" + ).count(), "servers": page, "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 @@ -157,3 +164,14 @@ def unblock_server(request, server): server = get_object_or_404(models.FederatedServer, id=server) server.unblock() return redirect("settings-federated-server", server.id) + + +@login_required +@require_POST +@permission_required("bookwyrm.control_federation", raise_exception=True) +# pylint: disable=unused-argument +def refresh_server(request, server): + """unblock a server""" + server = get_object_or_404(models.FederatedServer, id=server) + get_or_create_remote_server(server.server_name, refresh=True) + return redirect("settings-federated-server", server.id)