From f24f828a45b2e4e42ca1a60d256d7e2729e7f2ea Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Mon, 24 Feb 2020 13:19:27 +0100 Subject: [PATCH 1/4] Add html links to emails --- .../templates/registration/registration_set_password_email.html | 2 +- server/core/templates/registration/set_password_email.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/core/templates/registration/registration_set_password_email.html b/server/core/templates/registration/registration_set_password_email.html index c752eada..1774d1da 100644 --- a/server/core/templates/registration/registration_set_password_email.html +++ b/server/core/templates/registration/registration_set_password_email.html @@ -3,7 +3,7 @@ {% trans "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" %} {% block reset_link %} -{{ protocol }}://{{ domain }}{% url 'set_password_confirm' uidb64=uid token=token %} + {{ protocol }}://{{ domain }}{% url 'set_password_confirm' uidb64=uid token=token %} {% endblock %} {% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} diff --git a/server/core/templates/registration/set_password_email.html b/server/core/templates/registration/set_password_email.html index c752eada..7e2786fb 100644 --- a/server/core/templates/registration/set_password_email.html +++ b/server/core/templates/registration/set_password_email.html @@ -3,7 +3,7 @@ {% trans "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" %} {% block reset_link %} -{{ protocol }}://{{ domain }}{% url 'set_password_confirm' uidb64=uid token=token %} +{{ protocol }}://{{ domain }}{% url 'set_password_confirm' uidb64=uid token=token %} {% endblock %} {% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} From d44e38c04cc4bfb67c4c520154391369bd07f082 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Tue, 25 Feb 2020 10:28:57 +0100 Subject: [PATCH 2/4] Add tag for link generation --- .../core/templates/registration/password_reset_email.html | 7 +++++-- .../registration/registration_set_password_email.html | 7 +++++-- .../core/templates/registration/set_password_email.html | 7 +++++-- server/core/templatetags/core_tags.py | 8 +++++++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/server/core/templates/registration/password_reset_email.html b/server/core/templates/registration/password_reset_email.html index 183a52f1..41f235c8 100644 --- a/server/core/templates/registration/password_reset_email.html +++ b/server/core/templates/registration/password_reset_email.html @@ -1,9 +1,12 @@ -{% load i18n %}{% autoescape off %} +{% load i18n %} +{% load core_tags %} +{% autoescape off %} + {% blocktrans %}Du erhältst dieses E-Mail, weil dein Passwort auf {{ site_name }} zurückgesetzt wurde.{% endblocktrans %} {% trans "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" %} {% block reset_link %} -{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} +{% reset_link 'password_reset_confirm' protocol domain token uid %} {% endblock %} {% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} diff --git a/server/core/templates/registration/registration_set_password_email.html b/server/core/templates/registration/registration_set_password_email.html index 1774d1da..f848abd9 100644 --- a/server/core/templates/registration/registration_set_password_email.html +++ b/server/core/templates/registration/registration_set_password_email.html @@ -1,9 +1,12 @@ -{% load i18n %}{% autoescape off %} +{% load i18n %} +{% load core_tags %} +{% autoescape off %} + {% blocktrans %}Sie erhalten diese E-Mail, um Ihr Passwort auf mySkillbox initial zu setzen.{% endblocktrans %} {% trans "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" %} {% block reset_link %} - {{ protocol }}://{{ domain }}{% url 'set_password_confirm' uidb64=uid token=token %} +{% reset_link 'set_password_confirm' protocol domain token uid %} {% endblock %} {% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} diff --git a/server/core/templates/registration/set_password_email.html b/server/core/templates/registration/set_password_email.html index 7e2786fb..f848abd9 100644 --- a/server/core/templates/registration/set_password_email.html +++ b/server/core/templates/registration/set_password_email.html @@ -1,9 +1,12 @@ -{% load i18n %}{% autoescape off %} +{% load i18n %} +{% load core_tags %} +{% autoescape off %} + {% blocktrans %}Sie erhalten diese E-Mail, um Ihr Passwort auf mySkillbox initial zu setzen.{% endblocktrans %} {% trans "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" %} {% block reset_link %} -{{ protocol }}://{{ domain }}{% url 'set_password_confirm' uidb64=uid token=token %} +{% reset_link 'set_password_confirm' protocol domain token uid %} {% endblock %} {% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} diff --git a/server/core/templatetags/core_tags.py b/server/core/templatetags/core_tags.py index e56544e6..83fcb426 100644 --- a/server/core/templatetags/core_tags.py +++ b/server/core/templatetags/core_tags.py @@ -1,6 +1,7 @@ import json from django import template +from django.urls import reverse from rest_framework import serializers register = template.Library() @@ -18,4 +19,9 @@ def json_dumps(obj): @register.filter(name='class_name') def class_name(obj): - return str(obj.__class__.__name__) \ No newline at end of file + return str(obj.__class__.__name__) + + +@register.simple_tag +def reset_link(name, protocol, domain, token, uid): + return '{}://{}{}'.format(protocol, domain, reverse(name, kwargs={'uidb64': uid, 'token': token})) From 93798358eade7432718a141366ec95323834c685 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Tue, 25 Feb 2020 14:54:02 +0100 Subject: [PATCH 3/4] Use html emails --- server/core/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/core/views.py b/server/core/views.py index b495cfc1..7a00faf5 100644 --- a/server/core/views.py +++ b/server/core/views.py @@ -27,7 +27,7 @@ def home(request): class SetPasswordView(PasswordResetView): - email_template_name = 'registration/registration_set_password_email.html' + html_email_template_name = 'registration/registration_set_password_email.html' subject_template_name = 'registration/registration_set_password_subject.txt' success_url = reverse_lazy('registration_set_password_done') template_name = 'registration/registration_set_password_form.html' @@ -52,7 +52,7 @@ class SetPasswordCompleteView(PasswordResetCompleteView): # legacy class LegacySetPasswordView(PasswordResetView): - email_template_name = 'registration/set_password_email.html' + html_email_template_name = 'registration/set_password_email.html' subject_template_name = 'registration/set_password_subject.txt' success_url = reverse_lazy('set_password_done') template_name = 'registration/set_password_form.html' From af818f5ee75f44db82d93b87a2e7fc4c8e7999af Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Wed, 26 Feb 2020 13:51:17 +0100 Subject: [PATCH 4/4] Send registration emails as html --- server/core/settings.py | 20 ++++++++++++++++--- .../registration/password_reset_email.html | 12 ++++++++--- .../registration_set_password_email.html | 15 ++++++++++++-- server/core/urls.py | 7 ++++++- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/server/core/settings.py b/server/core/settings.py index 6d20ef89..2763936f 100644 --- a/server/core/settings.py +++ b/server/core/settings.py @@ -355,12 +355,26 @@ WAGTAIL_SITE_NAME = 'skillbox' GRAPHQL_QUERIES_DIR = os.path.join(BASE_DIR, '..', 'client', 'src', 'graphql', 'gql') GRAPHQL_MUTATIONS_DIR = os.path.join(GRAPHQL_QUERIES_DIR, 'mutations') -EMAIL_BACKEND = 'sendgrid_backend.SendgridBackend' +# Sendgrid Config + +# EMAIL_BACKEND = 'sendgrid_backend.SendgridBackend' +# +# SENDGRID_API_KEY = os.environ.get("SENDGRID_API_KEY") +# SENDGRID_SANDBOX_MODE_IN_DEBUG = False -SENDGRID_API_KEY = os.environ.get("SENDGRID_API_KEY") -SENDGRID_SANDBOX_MODE_IN_DEBUG = False DEFAULT_FROM_EMAIL = 'myskillbox ' +# Metanet Config +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' + +EMAIL_HOST = os.environ.get("EMAIL_HOST") +EMAIL_PORT = os.environ.get("EMAIL_PORT") +EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD") +EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER") +EMAIL_USE_TLS = True +EMAIL_USE_SSL = False + + TASKBASE_USER = os.environ.get("TASKBASE_USER") TASKBASE_PASSWORD = os.environ.get("TASKBASE_PASSWORD") TASKBASE_SUPERUSER = os.environ.get("TASKBASE_SUPERUSER") diff --git a/server/core/templates/registration/password_reset_email.html b/server/core/templates/registration/password_reset_email.html index 41f235c8..a8204a5d 100644 --- a/server/core/templates/registration/password_reset_email.html +++ b/server/core/templates/registration/password_reset_email.html @@ -1,15 +1,21 @@ {% load i18n %} {% load core_tags %} {% autoescape off %} +

+{% blocktrans %}Sie erhalten diese E-Mail, weil Ihr Passwort auf {{ site_name }} zurückgesetzt wurde.{% endblocktrans %} +

-{% blocktrans %}Du erhältst dieses E-Mail, weil dein Passwort auf {{ site_name }} zurückgesetzt wurde.{% endblocktrans %} - +

{% trans "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" %} +

{% block reset_link %} +

{% reset_link 'password_reset_confirm' protocol domain token uid %} +

{% endblock %} +

{% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} - +

{% trans "Ihr Skillbox Team" %} {% endautoescape %} diff --git a/server/core/templates/registration/registration_set_password_email.html b/server/core/templates/registration/registration_set_password_email.html index f848abd9..c40669be 100644 --- a/server/core/templates/registration/registration_set_password_email.html +++ b/server/core/templates/registration/registration_set_password_email.html @@ -1,15 +1,26 @@ {% load i18n %} {% load core_tags %} {% autoescape off %} - +

{% blocktrans %}Sie erhalten diese E-Mail, um Ihr Passwort auf mySkillbox initial zu setzen.{% endblocktrans %} +

+

{% trans "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:" %} +

+ +

{% block reset_link %} {% reset_link 'set_password_confirm' protocol domain token uid %} +

{% endblock %} -{% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} +

+{% trans "Ihr Benutzername lautet:" %} {{ user.get_username }} +

+ +

{% trans "Ihr mySkillbox Team" %} +

{% endautoescape %} diff --git a/server/core/urls.py b/server/core/urls.py index ef247798..fb93d8d2 100644 --- a/server/core/urls.py +++ b/server/core/urls.py @@ -2,6 +2,7 @@ from django.conf import settings from django.conf.urls import url, include from django.conf.urls.static import static from django.contrib import admin +from django.contrib.auth.views import PasswordResetView from django.urls import re_path, path from django.views.generic import RedirectView from wagtail.admin import urls as wagtailadmin_urls @@ -14,10 +15,14 @@ from core.views import LegacySetPasswordView, LegacySetPasswordDoneView, LegacyS urlpatterns = [ # django admin url(r'^guru/', admin.site.urls), - url(r'^accounts/', include('django.contrib.auth.urls')), url(r'^statistics/', include('statistics.urls', namespace='statistics')), # legacy - will be removed + # forgot password + path('accounts/password_reset/', + PasswordResetView.as_view(html_email_template_name='registration/password_reset_email.html')), + path(r'accounts/', include('django.contrib.auth.urls')), + # set password path('welcome/', LegacySetPasswordView.as_view(), name='set_password'), path('set-password/done/', LegacySetPasswordDoneView.as_view(), name='set_password_done'),