From e51980bc123ee7aea843395a980ad63e02deeb01 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 19 Sep 2022 09:35:38 -0700 Subject: [PATCH] Use BookWyrmModel as parent for admin models This will make them more internally consistent and give them built-in permissions checking --- .../migrations/0158_auto_20220919_1634.py | 65 +++++++++++++++++++ bookwyrm/models/antispam.py | 9 ++- bookwyrm/views/admin/automod.py | 4 +- bookwyrm/views/admin/email_blocklist.py | 2 +- bookwyrm/views/admin/federation.py | 6 +- bookwyrm/views/admin/ip_blocklist.py | 2 +- bookwyrm/views/admin/user_admin.py | 2 +- 7 files changed, 77 insertions(+), 13 deletions(-) create mode 100644 bookwyrm/migrations/0158_auto_20220919_1634.py diff --git a/bookwyrm/migrations/0158_auto_20220919_1634.py b/bookwyrm/migrations/0158_auto_20220919_1634.py new file mode 100644 index 000000000..c7cce19fd --- /dev/null +++ b/bookwyrm/migrations/0158_auto_20220919_1634.py @@ -0,0 +1,65 @@ +# Generated by Django 3.2.15 on 2022-09-19 16:34 + +import bookwyrm.models.fields +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0157_auto_20220909_2338"), + ] + + operations = [ + migrations.AddField( + model_name="automod", + name="created_date", + field=models.DateTimeField( + auto_now_add=True, default=django.utils.timezone.now + ), + preserve_default=False, + ), + migrations.AddField( + model_name="automod", + name="remote_id", + field=bookwyrm.models.fields.RemoteIdField( + max_length=255, + null=True, + validators=[bookwyrm.models.fields.validate_remote_id], + ), + ), + migrations.AddField( + model_name="automod", + name="updated_date", + field=models.DateTimeField(auto_now=True), + ), + migrations.AddField( + model_name="emailblocklist", + name="remote_id", + field=bookwyrm.models.fields.RemoteIdField( + max_length=255, + null=True, + validators=[bookwyrm.models.fields.validate_remote_id], + ), + ), + migrations.AddField( + model_name="emailblocklist", + name="updated_date", + field=models.DateTimeField(auto_now=True), + ), + migrations.AddField( + model_name="ipblocklist", + name="remote_id", + field=bookwyrm.models.fields.RemoteIdField( + max_length=255, + null=True, + validators=[bookwyrm.models.fields.validate_remote_id], + ), + ), + migrations.AddField( + model_name="ipblocklist", + name="updated_date", + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/bookwyrm/models/antispam.py b/bookwyrm/models/antispam.py index dd2a6df26..628f4525c 100644 --- a/bookwyrm/models/antispam.py +++ b/bookwyrm/models/antispam.py @@ -8,13 +8,13 @@ from django.db.models import Q from django.utils.translation import gettext_lazy as _ from bookwyrm.tasks import app +from .base_model import BookWyrmModel from .user import User -class EmailBlocklist(models.Model): +class EmailBlocklist(BookWyrmModel): """blocked email addresses""" - created_date = models.DateTimeField(auto_now_add=True) domain = models.CharField(max_length=255, unique=True) is_active = models.BooleanField(default=True) @@ -29,10 +29,9 @@ class EmailBlocklist(models.Model): return User.objects.filter(email__endswith=f"@{self.domain}") -class IPBlocklist(models.Model): +class IPBlocklist(BookWyrmModel): """blocked ip addresses""" - created_date = models.DateTimeField(auto_now_add=True) address = models.CharField(max_length=255, unique=True) is_active = models.BooleanField(default=True) @@ -42,7 +41,7 @@ class IPBlocklist(models.Model): ordering = ("-created_date",) -class AutoMod(models.Model): +class AutoMod(BookWyrmModel): """rules to automatically flag suspicious activity""" string_match = models.CharField(max_length=200, unique=True) diff --git a/bookwyrm/views/admin/automod.py b/bookwyrm/views/admin/automod.py index 65eae71a9..9a32dd9ee 100644 --- a/bookwyrm/views/admin/automod.py +++ b/bookwyrm/views/admin/automod.py @@ -34,7 +34,7 @@ class AutoMod(View): """add rule""" form = forms.AutoModRuleForm(request.POST) if form.is_valid(): - form.save() + form.save(request) form = forms.AutoModRuleForm() data = automod_view_data() @@ -54,7 +54,7 @@ def schedule_automod_task(request): return TemplateResponse(request, "settings/automod/rules.html", data) with transaction.atomic(): - schedule = form.save() + schedule = form.save(request) PeriodicTask.objects.get_or_create( interval=schedule, name="automod-task", diff --git a/bookwyrm/views/admin/email_blocklist.py b/bookwyrm/views/admin/email_blocklist.py index eecad4ffb..c31fa7366 100644 --- a/bookwyrm/views/admin/email_blocklist.py +++ b/bookwyrm/views/admin/email_blocklist.py @@ -40,7 +40,7 @@ class EmailBlocklist(View): return TemplateResponse( request, "settings/email_blocklist/email_blocklist.html", data ) - form.save() + form.save(request) data["form"] = forms.EmailBlocklistForm() return TemplateResponse( diff --git a/bookwyrm/views/admin/federation.py b/bookwyrm/views/admin/federation.py index 88bd43aac..2c5368f52 100644 --- a/bookwyrm/views/admin/federation.py +++ b/bookwyrm/views/admin/federation.py @@ -86,7 +86,7 @@ class AddFederatedServer(View): return TemplateResponse( request, "settings/federation/edit_instance.html", data ) - server = form.save() + server = form.save(request) return redirect("settings-federated-server", server.id) @@ -119,7 +119,7 @@ class ImportServerBlocklist(View): server_name=server_name, ) server.notes = info_link - server.save() + server.save(request) server.block() success_count += 1 data = {"failed": failed, "succeeded": success_count} @@ -156,7 +156,7 @@ class FederatedServer(View): """update note""" server = get_object_or_404(models.FederatedServer, id=server) server.notes = request.POST.get("notes") - server.save() + server.save(request) return redirect("settings-federated-server", server.id) diff --git a/bookwyrm/views/admin/ip_blocklist.py b/bookwyrm/views/admin/ip_blocklist.py index d57a2422c..a81bc738a 100644 --- a/bookwyrm/views/admin/ip_blocklist.py +++ b/bookwyrm/views/admin/ip_blocklist.py @@ -40,7 +40,7 @@ class IPBlocklist(View): return TemplateResponse( request, "settings/ip_blocklist/ip_blocklist.html", data ) - form.save() + form.save(request) data["form"] = forms.IPBlocklistForm() return TemplateResponse( diff --git a/bookwyrm/views/admin/user_admin.py b/bookwyrm/views/admin/user_admin.py index 6ec6f93d2..c6827dcb7 100644 --- a/bookwyrm/views/admin/user_admin.py +++ b/bookwyrm/views/admin/user_admin.py @@ -88,6 +88,6 @@ class UserAdmin(View): else: form = forms.UserGroupForm(request.POST, instance=user) if form.is_valid(): - form.save() + form.save(request) data = {"user": user, "group_form": form} return TemplateResponse(request, "settings/users/user.html", data)