From 6deff28389d4b46ff18f521d51dbe8cb8f0930b0 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Thu, 27 Jan 2022 11:47:27 +0100 Subject: [PATCH] #31 API Token mail * sends an email to the support address if a new token has been generated --- konova/sub_settings/django_settings.py | 1 + konova/utils/mailer.py | 23 ++++++++++- locale/de/LC_MESSAGES/django.mo | Bin 35548 -> 36201 bytes locale/de/LC_MESSAGES/django.po | 53 +++++++++++++++++-------- templates/email/api/verify_token.html | 23 +++++++++++ user/views.py | 8 +++- 6 files changed, 89 insertions(+), 19 deletions(-) create mode 100644 templates/email/api/verify_token.html diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index 052332f9..84039b59 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -213,6 +213,7 @@ EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location DEFAULT_FROM_EMAIL = "service@ksp.de" # The default email address for the 'from' element EMAIL_HOST = "localhost" EMAIL_REPLY_TO = "ksp-servicestelle@sgdnord.rlp.de" +SUPPORT_MAIL_RECIPIENT = EMAIL_REPLY_TO EMAIL_PORT = "25" #EMAIL_HOST_USER = "" #EMAIL_HOST_PASSWORD = "" diff --git a/konova/utils/mailer.py b/konova/utils/mailer.py index 9c273ff6..ee0ac9e5 100644 --- a/konova/utils/mailer.py +++ b/konova/utils/mailer.py @@ -11,7 +11,7 @@ from django.core.mail import send_mail from django.template.loader import render_to_string from django.utils.translation import gettext_lazy as _ -from konova.sub_settings.django_settings import DEFAULT_FROM_EMAIL, EMAIL_REPLY_TO +from konova.sub_settings.django_settings import DEFAULT_FROM_EMAIL, EMAIL_REPLY_TO, SUPPORT_MAIL_RECIPIENT logger = logging.getLogger(__name__) @@ -181,3 +181,24 @@ class Mailer: msg ) + def send_mail_verify_api_token(self, user): + """ Send a mail if a user creates a new token + + Args: + user (User): The user, having a new api token + + Returns: + + """ + context = { + "user": user, + "EMAIL_REPLY_TO": EMAIL_REPLY_TO, + } + msg = render_to_string("email/api/verify_token.html", context) + user_mail_address = [SUPPORT_MAIL_RECIPIENT] + self.send( + user_mail_address, + _("Request for new API token"), + msg + ) + diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index e0a53a9ad114fb2bb1bc1e45e88e2f237fbbc59e..714249f64471928803f5bb65d070024d03973544 100644 GIT binary patch delta 11013 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 G`TY-t8HZ~C delta 10396 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 UzdHJwOa9HVbA9r+%-HSnKl#G3J^%m! diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 7e1e684e..c3e256ff 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-27 11:35+0100\n" +"POT-Creation-Date: 2022-01-27 11:44+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1804,6 +1804,10 @@ msgstr "{} - Freigegebene Daten gelöscht" msgid "{} - Shared data checked" msgstr "{} - Freigegebene Daten geprüft" +#: konova/utils/mailer.py:201 templates/email/api/verify_token.html:4 +msgid "Request for new API token" +msgstr "Anfrage für neuen API Token" + #: konova/utils/message_templates.py:11 msgid "There was an error on this form." msgstr "Es gab einen Fehler im Formular." @@ -1938,6 +1942,32 @@ msgstr "" msgid "Something happened. We are working on it!" msgstr "Irgendetwas ist passiert. Wir arbeiten daran!" +#: templates/email/api/verify_token.html:7 +msgid "Hello support" +msgstr "Hallo Support" + +#: templates/email/api/verify_token.html:9 +msgid "you need to verify the API token for user" +msgstr "Sie müssen einen API Token für folgenden Nutzer freischalten" + +#: templates/email/api/verify_token.html:13 +msgid "" +"If unsure, please contact the user. The API token can not be used until you " +"activated it in the admin backend." +msgstr "" +"Falls Sie sich unsicher sind, kontaktieren Sie den Nutzer vorher. Der API Token kann so lange nicht verwendet werden, " +"wie er noch nicht von Ihnen im Admin Backend aktiviert worden ist." + +#: templates/email/api/verify_token.html:16 +#: templates/email/checking/shared_data_checked.html:17 +#: templates/email/deleting/shared_data_deleted.html:17 +#: templates/email/recording/shared_data_recorded.html:17 +#: templates/email/recording/shared_data_unrecorded.html:17 +#: templates/email/sharing/shared_access_given.html:18 +#: templates/email/sharing/shared_access_removed.html:18 +msgid "Best regards" +msgstr "Beste Grüße" + #: templates/email/checking/shared_data_checked.html:4 msgid "Shared data checked" msgstr "Freigegebene Daten geprüft" @@ -1963,15 +1993,6 @@ msgstr "" "Das bedeutet, dass die zuständige Zulassungsbehörde die Korrektheit des " "Datensatzes soeben bestätigt hat." -#: templates/email/checking/shared_data_checked.html:17 -#: templates/email/deleting/shared_data_deleted.html:17 -#: templates/email/recording/shared_data_recorded.html:17 -#: templates/email/recording/shared_data_unrecorded.html:17 -#: templates/email/sharing/shared_access_given.html:18 -#: templates/email/sharing/shared_access_removed.html:18 -msgid "Best regards" -msgstr "Beste Grüße" - #: templates/email/deleting/shared_data_deleted.html:4 msgid "Shared data deleted" msgstr "Freigegebene Daten gelöscht" @@ -2315,7 +2336,7 @@ msgstr "Benachrichtigungen" #: user/templates/user/index.html:58 msgid "See or edit your API token" -msgstr "" +msgstr "API token einsehen oder neu generieren" #: user/templates/user/index.html:61 msgid "API" @@ -2345,23 +2366,23 @@ msgstr "Token noch nicht freigeschaltet" msgid "Valid until" msgstr "Läuft ab am" -#: user/views.py:30 +#: user/views.py:31 msgid "User settings" msgstr "Einstellungen" -#: user/views.py:56 +#: user/views.py:57 msgid "Notifications edited" msgstr "Benachrichtigungen bearbeitet" -#: user/views.py:68 +#: user/views.py:69 msgid "User notifications" msgstr "Benachrichtigungen" -#: user/views.py:90 +#: user/views.py:92 msgid "New token generated. Administrators need to validate." msgstr "Neuer Token generiert. Administratoren sind informiert." -#: user/views.py:99 +#: user/views.py:103 msgid "User API token" msgstr "API Nutzer Token" diff --git a/templates/email/api/verify_token.html b/templates/email/api/verify_token.html new file mode 100644 index 00000000..bd12a0fe --- /dev/null +++ b/templates/email/api/verify_token.html @@ -0,0 +1,23 @@ +{% load i18n %} + +
+

{% trans 'Request for new API token' %}

+
+
+ {% trans 'Hello support' %}, +
+ {% trans 'you need to verify the API token for user' %}: +
+
+ {{user.username}} +
+
+ {% trans 'If unsure, please contact the user. The API token can not be used until you activated it in the admin backend.' %} +
+
+ {% trans 'Best regards' %} +
+ KSP +
+
+ diff --git a/user/views.py b/user/views.py index 2c826418..ee6aee50 100644 --- a/user/views.py +++ b/user/views.py @@ -2,6 +2,7 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER +from konova.utils.mailer import Mailer from konova.utils.message_templates import FORM_INVALID from user.models import User from django.http import HttpRequest @@ -83,18 +84,21 @@ def api_token_view(request: HttpRequest): """ template = "user/token.html" - form = UserAPITokenForm(request.POST or None, instance=request.user) + user = request.user + form = UserAPITokenForm(request.POST or None, instance=user) if request.method == "POST": if form.is_valid(): token = form.save() messages.info(request, _("New token generated. Administrators need to validate.")) + mailer = Mailer() + mailer.send_mail_verify_api_token(user) return redirect("user:api-token") else: messages.error(request, FORM_INVALID, extra_tags="danger") elif request.method != "GET": raise NotImplementedError context = { - "user": request.user, + "user": user, "form": form, TAB_TITLE_IDENTIFIER: _("User API token"), }