diff --git a/bookwyrm/models/link.py b/bookwyrm/models/link.py
index 41760cc2..7b7273df 100644
--- a/bookwyrm/models/link.py
+++ b/bookwyrm/models/link.py
@@ -1,6 +1,7 @@
""" outlink data """
from urllib.parse import urlparse
+from django.core.exceptions import PermissionDenied
from django.db import models
from django.utils.translation import gettext_lazy as _
@@ -62,6 +63,11 @@ class LinkDomain(BookWyrmModel):
status = models.CharField(max_length=50, choices=StatusChoices, default="pending")
name = models.CharField(max_length=100)
+ def raise_not_editable(self, viewer):
+ if viewer.has_perm("moderate_post"):
+ return
+ raise PermissionDenied()
+
def save(self, *args, **kwargs):
"""set a default name"""
if not self.name:
diff --git a/bookwyrm/templates/settings/link_domains/link_domains.html b/bookwyrm/templates/settings/link_domains/link_domains.html
index 4b300a35..cb084967 100644
--- a/bookwyrm/templates/settings/link_domains/link_domains.html
+++ b/bookwyrm/templates/settings/link_domains/link_domains.html
@@ -91,17 +91,30 @@
{% include "settings/link_domains/edit_domain_modal.html" with domain=domain id=domain_modal %}
-
+
+ {% if status != "approved" %}
+
+ {% endif %}
+ {% if status != "blocked" %}
+
+ {% endif %}
+
{% endfor %}
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index 0d41e4f5..0df259b3 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -163,6 +163,11 @@ urlpatterns = [
views.LinkDomain.as_view(),
name="settings-link-domain",
),
+ re_path(
+ r"^setting/link-domains/(?P\d+)/(?P(pending|approved|blocked))/?$",
+ views.update_domain_status,
+ name="settings-link-domain-status",
+ ),
re_path(
r"^settings/ip-blocklist/?$",
views.IPBlocklist.as_view(),
diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py
index d3d80703..87cbfc69 100644
--- a/bookwyrm/views/__init__.py
+++ b/bookwyrm/views/__init__.py
@@ -9,7 +9,7 @@ from .admin.email_blocklist import EmailBlocklist
from .admin.ip_blocklist import IPBlocklist
from .admin.invite import ManageInvites, Invite, InviteRequest
from .admin.invite import ManageInviteRequests, ignore_invite_request
-from .admin.link_domains import LinkDomain
+from .admin.link_domains import LinkDomain, update_domain_status
from .admin.reports import (
Report,
Reports,
diff --git a/bookwyrm/views/admin/link_domains.py b/bookwyrm/views/admin/link_domains.py
index 4f11af11..eca4421a 100644
--- a/bookwyrm/views/admin/link_domains.py
+++ b/bookwyrm/views/admin/link_domains.py
@@ -4,6 +4,7 @@ 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
+from django.views.decorators.http import require_POST
from bookwyrm import forms, models
@@ -35,3 +36,15 @@ class LinkDomain(View):
form = forms.LinkDomainForm(request.POST, instance=domain)
form.save()
return redirect('settings-link-domain', status=status)
+
+
+@require_POST
+@login_required
+def update_domain_status(request, domain_id, status):
+ """This domain seems fine"""
+ domain = get_object_or_404(models.LinkDomain, id=domain_id)
+ domain.raise_not_editable(request.user)
+
+ domain.status = status
+ domain.save()
+ return redirect('settings-link-domain', status="pending")