Merge pull request #2166 from bookwyrm-social/email-config-warning

Add warning to dashboard if email sender looks misconfigured
This commit is contained in:
Mouse Reeve 2022-07-03 10:49:14 -07:00 committed by GitHub
commit 0b900dc1ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 109 additions and 82 deletions

View file

@ -37,6 +37,17 @@
</div> </div>
<div class="columns block is-multiline"> <div class="columns block is-multiline">
{% if email_config_error %}
<div class="column is-flex">
<span class="notification is-warning is-block is-flex-grow-1">
{% blocktrans trimmed %}
Your outgoing email address, <code>{{ email_sender }}</code>, may be misconfigured.
{% endblocktrans %}
{% trans "Check the <code>EMAIL_SENDER_NAME</code> and <code>EMAIL_SENDER_DOMAIN</code> in your <code>.env</code>." %}
</span>
</div>
{% endif %}
{% if reports %} {% if reports %}
<div class="column is-flex"> <div class="column is-flex">
<a href="{% url 'settings-reports' %}" class="notification is-warning is-block is-flex-grow-1"> <a href="{% url 'settings-reports' %}" class="notification is-warning is-block is-flex-grow-1">

View file

@ -1,5 +1,7 @@
""" instance overview """ """ instance overview """
from datetime import timedelta from datetime import timedelta
import re
from dateutil.parser import parse from dateutil.parser import parse
from packaging import version from packaging import version
@ -13,6 +15,7 @@ from django.views import View
from bookwyrm import models, settings from bookwyrm import models, settings
from bookwyrm.connectors.abstract_connector import get_data from bookwyrm.connectors.abstract_connector import get_data
from bookwyrm.connectors.connector_manager import ConnectorException from bookwyrm.connectors.connector_manager import ConnectorException
from bookwyrm.utils import regex
# pylint: disable= no-self-use # pylint: disable= no-self-use
@ -26,6 +29,36 @@ class Dashboard(View):
def get(self, request): def get(self, request):
"""list of users""" """list of users"""
data = get_charts_and_stats(request)
# Make sure email looks properly configured
email_config_error = re.findall(
r"[\s\@]", settings.EMAIL_SENDER_DOMAIN
) or not re.match(regex.DOMAIN, settings.EMAIL_SENDER_DOMAIN)
data["email_config_error"] = email_config_error
# pylint: disable=line-too-long
data[
"email_sender"
] = f"{settings.EMAIL_SENDER_NAME}@{settings.EMAIL_SENDER_DOMAIN}"
# check version
try:
release = get_data(settings.RELEASE_API, timeout=3)
available_version = release.get("tag_name", None)
if available_version and version.parse(available_version) > version.parse(
settings.VERSION
):
data["current_version"] = settings.VERSION
data["available_version"] = available_version
except ConnectorException:
pass
return TemplateResponse(request, "settings/dashboard/dashboard.html", data)
def get_charts_and_stats(request):
"""Defines the dashbaord charts"""
interval = int(request.GET.get("days", 1)) interval = int(request.GET.get("days", 1))
now = timezone.now() now = timezone.now()
start = request.GET.get("start") start = request.GET.get("start")
@ -87,8 +120,7 @@ class Dashboard(View):
).count() ).count()
}, },
) )
return {
data = {
"start": start.strftime("%Y-%m-%d"), "start": start.strftime("%Y-%m-%d"),
"end": end.strftime("%Y-%m-%d"), "end": end.strftime("%Y-%m-%d"),
"interval": interval, "interval": interval,
@ -99,9 +131,7 @@ class Dashboard(View):
"statuses": status_queryset.count(), "statuses": status_queryset.count(),
"works": models.Work.objects.count(), "works": models.Work.objects.count(),
"reports": models.Report.objects.filter(resolved=False).count(), "reports": models.Report.objects.filter(resolved=False).count(),
"pending_domains": models.LinkDomain.objects.filter( "pending_domains": models.LinkDomain.objects.filter(status="pending").count(),
status="pending"
).count(),
"invite_requests": models.InviteRequest.objects.filter( "invite_requests": models.InviteRequest.objects.filter(
ignored=False, invite__isnull=True ignored=False, invite__isnull=True
).count(), ).count(),
@ -111,20 +141,6 @@ class Dashboard(View):
"works_stats": works_chart.get_chart(start, end, interval), "works_stats": works_chart.get_chart(start, end, interval),
} }
# check version
try:
release = get_data(settings.RELEASE_API, timeout=3)
available_version = release.get("tag_name", None)
if available_version and version.parse(available_version) > version.parse(
settings.VERSION
):
data["current_version"] = settings.VERSION
data["available_version"] = available_version
except ConnectorException:
pass
return TemplateResponse(request, "settings/dashboard/dashboard.html", data)
class Chart: class Chart:
"""Data for a chart""" """Data for a chart"""