Create new email domain block entries

This commit is contained in:
Mouse Reeve 2021-09-08 15:30:18 -07:00
parent c705178c3b
commit 8717d8a675
5 changed files with 59 additions and 24 deletions

View file

@ -1,4 +1,4 @@
# Generated by Django 3.2.4 on 2021-09-08 21:37
# Generated by Django 3.2.4 on 2021-09-08 22:21
from django.db import migrations, models
@ -6,24 +6,19 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0089_user_show_suggested_users"),
('bookwyrm', '0089_user_show_suggested_users'),
]
operations = [
migrations.CreateModel(
name="EmailBlocklist",
name='EmailBlocklist',
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("domain", models.CharField(max_length=255)),
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_date', models.DateTimeField(auto_now_add=True)),
('domain', models.CharField(max_length=255, unique=True)),
],
options={
'ordering': ('-created_date',),
},
),
]

View file

@ -127,12 +127,17 @@ class EmailBlocklist(models.Model):
"""blocked email addresses"""
created_date = models.DateTimeField(auto_now_add=True)
domain = models.CharField(max_length=255)
domain = models.CharField(max_length=255, unique=True)
class Meta:
"""default sorting"""
ordering = ("-created_date",)
@property
def users(self):
"""find the users associated with this address"""
User.objects.filter(email__endswith=f"@{self.domain}")
return User.objects.filter(email__endswith=f"@{self.domain}")
# pylint: disable=unused-argument

View file

@ -8,13 +8,18 @@
{% block form %}
<form name="add-domain" method="post" action="{% url 'settings-email-blocks' %}">
{% csrf_token %}
<div class="field">
<label class="label" for="id_event_date">{% trans "Domain:" %}</label>
{{ form.domain }}
{% for error in form.domain.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<label class="label" for="id_event_date">{% trans "Domain:" %}</label>
<div class="field has-addons">
<div class="control">
<div class="button is-disabled">@</div>
</div>
<div class="control">
{{ form.domain }}
</div>
</div>
{% for error in form.domain.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<div class="field">
<div class="control">

View file

@ -1,5 +1,7 @@
{% extends 'settings/layout.html' %}
{% load i18n %}
{% load humanize %}
{% block title %}{% trans "Email Blocklist" %}{% endblock %}
{% block header %}{% trans "Email Blocklist" %}{% endblock %}
@ -17,13 +19,14 @@
{% trans "When someone tries to register with an email from this domain, no account will be created. The registration process will appear to have worked." %}
</p>
<table class="table is-striped">
<table class="table is-striped is-fullwidth">
<tr>
{% url 'settings-federation' as url %}
<th>
{% trans "Domain" as text %}
{% include 'snippets/table-sort-header.html' with field="server_name" sort=sort text=text %}
</th>
<th></th>
<th>
{% trans "Options" %}
</th>
@ -31,17 +34,30 @@
{% for domain in domains %}
<tr>
<td>{{ domain.domain }}</td>
<td>
<a href="{% url 'settings-users' %}?email=@{{ domain.domain }}">
{% with user_count=domain.users.count %}
{% blocktrans trimmed count conter=user_count with display_count=user_count|intcomma %}
{{ display_count }} user
{% plural %}
{{ display_count }} users
{% endblocktrans %}
{% endwith %}
</a>
<td>
{% trans "Delete" as button_text %}
<button class="button">
<span class="icon icon-x" title="{{ button_text }}" aria-hidden="true"></span>
<span class="is-hidden-mobile">{{ button_text }}</span>
</button>
{% trans "Block users" as button_text %}
<button class="button is-danger">
{{ button_text }}
</button>
</td>
</tr>
{% endfor %}
</table>
{% include 'snippets/pagination.html' with page=servers path=request.path %}
{% endblock %}

View file

@ -22,3 +22,17 @@ class EmailBlocklist(View):
"form": forms.EmailBlocklistForm(),
}
return TemplateResponse(request, "settings/email_blocklist.html", data)
def post(self, request):
"""create a new domain block"""
form = forms.EmailBlocklistForm(request.POST)
data = {
"domains": models.EmailBlocklist.objects.order_by("-created_date").all(),
"form": form,
}
if not form.is_valid():
return TemplateResponse(request, "settings/email_blocklist.html", data)
form.save()
data["form"] = forms.EmailBlocklistForm()
return TemplateResponse(request, "settings/email_blocklist.html", data)