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 from django.db import migrations, models
@ -6,24 +6,19 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("bookwyrm", "0089_user_show_suggested_users"), ('bookwyrm', '0089_user_show_suggested_users'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name="EmailBlocklist", name='EmailBlocklist',
fields=[ fields=[
( ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('created_date', models.DateTimeField(auto_now_add=True)),
models.AutoField( ('domain', models.CharField(max_length=255, unique=True)),
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)),
], ],
options={
'ordering': ('-created_date',),
},
), ),
] ]

View file

@ -127,12 +127,17 @@ class EmailBlocklist(models.Model):
"""blocked email addresses""" """blocked email addresses"""
created_date = models.DateTimeField(auto_now_add=True) 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 @property
def users(self): def users(self):
"""find the users associated with this address""" """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 # pylint: disable=unused-argument

View file

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

View file

@ -1,5 +1,7 @@
{% extends 'settings/layout.html' %} {% extends 'settings/layout.html' %}
{% load i18n %} {% load i18n %}
{% load humanize %}
{% block title %}{% trans "Email Blocklist" %}{% endblock %} {% block title %}{% trans "Email Blocklist" %}{% endblock %}
{% block header %}{% 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." %} {% 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> </p>
<table class="table is-striped"> <table class="table is-striped is-fullwidth">
<tr> <tr>
{% url 'settings-federation' as url %} {% url 'settings-federation' as url %}
<th> <th>
{% trans "Domain" as text %} {% trans "Domain" as text %}
{% include 'snippets/table-sort-header.html' with field="server_name" sort=sort text=text %} {% include 'snippets/table-sort-header.html' with field="server_name" sort=sort text=text %}
</th> </th>
<th></th>
<th> <th>
{% trans "Options" %} {% trans "Options" %}
</th> </th>
@ -31,17 +34,30 @@
{% for domain in domains %} {% for domain in domains %}
<tr> <tr>
<td>{{ domain.domain }}</td> <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> <td>
{% trans "Delete" as button_text %} {% trans "Delete" as button_text %}
<button class="button"> <button class="button">
<span class="icon icon-x" title="{{ button_text }}" aria-hidden="true"></span> <span class="icon icon-x" title="{{ button_text }}" aria-hidden="true"></span>
<span class="is-hidden-mobile">{{ button_text }}</span> <span class="is-hidden-mobile">{{ button_text }}</span>
</button> </button>
{% trans "Block users" as button_text %}
<button class="button is-danger">
{{ button_text }}
</button>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
{% include 'snippets/pagination.html' with page=servers path=request.path %}
{% endblock %} {% endblock %}

View file

@ -22,3 +22,17 @@ class EmailBlocklist(View):
"form": forms.EmailBlocklistForm(), "form": forms.EmailBlocklistForm(),
} }
return TemplateResponse(request, "settings/email_blocklist.html", data) 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)