From f0ae37c331a7d2524b80f4dc7a0341dabe8de8f7 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 10 Jan 2022 11:19:20 -0800 Subject: [PATCH] Block or approve domains --- bookwyrm/models/link.py | 6 ++++ .../settings/link_domains/link_domains.html | 35 +++++++++++++------ bookwyrm/urls.py | 5 +++ bookwyrm/views/__init__.py | 2 +- bookwyrm/views/admin/link_domains.py | 13 +++++++ 5 files changed, 49 insertions(+), 12 deletions(-) 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 %} -
- {% csrf_token %} -
-
- -
-
- -
-
-
+
+ {% if status != "approved" %} +
+ {% csrf_token %} + +
+ {% endif %} + {% if status != "blocked" %} +
+ {% csrf_token %} + +
+ {% 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")