From ad543f46c1728a4ec573462eeab4646b88f7a34d Mon Sep 17 00:00:00 2001
From: Mouse Reeve <mousereeve@riseup.net>
Date: Mon, 5 Apr 2021 15:38:32 -0700
Subject: [PATCH] Adds block and unblock functionality

---
 .../templates/settings/federated_server.html     | 16 ++++++++++++++++
 bookwyrm/views/federation.py                     |  9 ++++++++-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/bookwyrm/templates/settings/federated_server.html b/bookwyrm/templates/settings/federated_server.html
index edab3139..147d6514 100644
--- a/bookwyrm/templates/settings/federated_server.html
+++ b/bookwyrm/templates/settings/federated_server.html
@@ -4,6 +4,10 @@
 
 {% block header %}
 {{ server.server_name }}
+
+{% if server.status == "blocked" %}<span class="icon icon-x has-text-danger is-size-5" title="{% trans 'Blocked' %}"><span class="is-sr-only">{% trans "Blocked" %}</span></span>
+{% endif %}
+
 <a href="{% url 'settings-federation' %}" class="has-text-weight-normal help">{% trans "Back to server list" %}</a>
 {% endblock %}
 
@@ -64,5 +68,17 @@
     </dl>
 </section>
 
+<section class="block content">
+    <h2 class="title is-4">{% trans "Actions" %}</h2>
+    <form class="block" method="post" action="{% url 'settings-federated-server' server.id %}">
+        {% csrf_token %}
+        {% if server.status != 'blocked' %}
+        <button class="button is-danger">{% trans "Block" %}</button>
+        {% else %}
+        <button class="button">{% trans "Un-block" %}</button>
+        {% endif %}
+    </form>
+</section>
+
 {% endblock %}
 
diff --git a/bookwyrm/views/federation.py b/bookwyrm/views/federation.py
index 464a207c..0405ebf5 100644
--- a/bookwyrm/views/federation.py
+++ b/bookwyrm/views/federation.py
@@ -1,7 +1,7 @@
 """ manage federated servers """
 from django.contrib.auth.decorators import login_required, permission_required
 from django.core.paginator import Paginator
-from django.shortcuts import get_object_or_404
+from django.shortcuts import get_object_or_404, redirect
 from django.template.response import TemplateResponse
 from django.utils.decorators import method_decorator
 from django.views import View
@@ -61,3 +61,10 @@ class FederatedServer(View):
             ),
         }
         return TemplateResponse(request, "settings/federated_server.html", data)
+
+    def post(self, request, server):  # pylint: disable=unused-argument
+        """ (un)block a server """
+        server = get_object_or_404(models.FederatedServer, id=server)
+        server.status = "blocked" if server.status == "federated" else "federated"
+        server.save()
+        return redirect("settings-federated-server", server.id)