Skip to content

Commit 8f5fd09

Browse files
add additional context to email plaintext
1 parent 88fa89b commit 8f5fd09

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

drfpasswordless/settings.py

+3
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@
6666
# A plaintext verification email message overridden by the html message. Takes one string.
6767
'PASSWORDLESS_EMAIL_VERIFICATION_PLAINTEXT_MESSAGE': "Enter this verification code: %s",
6868

69+
# Insert multiple variables into PASSWORDLESS_EMAIL_VERIFICATION_PLAINTEXT_MESSAGE, eg ["kwargs['request'].get_host()", 'user_email', 'email_token.key']
70+
'PASSWORDLESS_EMAIL_PLAINTEXT_MESSAGE_ORDERED_CONTEXT' : False,
71+
6972
# The verification email template name.
7073
'PASSWORDLESS_EMAIL_VERIFICATION_TOKEN_HTML_TEMPLATE_NAME': "passwordless_default_verification_token_email.html",
7174

drfpasswordless/utils.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -119,18 +119,26 @@ def send_email_with_callback_token(user, email_token, **kwargs):
119119
# Get email subject and message
120120
email_subject = kwargs.get('email_subject',
121121
api_settings.PASSWORDLESS_EMAIL_SUBJECT)
122+
user_email = getattr(user, api_settings.PASSWORDLESS_USER_EMAIL_FIELD_NAME)
123+
122124
email_plaintext = kwargs.get('email_plaintext',
123125
api_settings.PASSWORDLESS_EMAIL_PLAINTEXT_MESSAGE)
126+
if api_settings.PASSWORDLESS_EMAIL_PLAINTEXT_MESSAGE_ORDERED_CONTEXT:
127+
string_options = tuple()
128+
for x in api_settings.PASSWORDLESS_EMAIL_PLAINTEXT_MESSAGE_ORDERED_CONTEXT:
129+
string_options = string_options + (eval(x),)
130+
else:
131+
email_plaintext = email_plaintext % email_token.key
132+
124133
email_html = kwargs.get('email_html',
125134
api_settings.PASSWORDLESS_EMAIL_TOKEN_HTML_TEMPLATE_NAME)
126135

127136
# Inject context if user specifies.
128-
user_email = getattr(user, api_settings.PASSWORDLESS_USER_EMAIL_FIELD_NAME)
129137
context = inject_template_context({'callback_token': email_token.key, 'user_email':user_email, 'request': kwargs['request']})
130138
html_message = loader.render_to_string(email_html, context,)
131139
send_mail(
132140
email_subject,
133-
email_plaintext % email_token.key,
141+
email_plaintext,
134142
api_settings.PASSWORDLESS_EMAIL_NOREPLY_ADDRESS,
135143
[user_email],
136144
fail_silently=False,

tests/test_settings.py

+10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from django.urls import reverse
77
from drfpasswordless.settings import api_settings, DEFAULTS
88
from drfpasswordless.utils import CallbackToken
9+
from drfpasswordless.views import ObtainEmailCallbackToken
910

1011
User = get_user_model()
1112

@@ -75,6 +76,15 @@ def test_mobile_only_auth_enabled(self):
7576
mobile_response = self.client.post(self.mobile_url, self.mobile_data)
7677
self.assertEqual(mobile_response.status_code, status.HTTP_200_OK)
7778

79+
def test_email_plaintext_ordered_context(self):
80+
api_settings.PASSWORDLESS_AUTH_TYPES = ['EMAIL']
81+
api_settings.PASSWORDLESS_EMAIL_NOREPLY_ADDRESS = 'email@example.com'
82+
api_settings.PASSWORDLESS_EMAIL_PLAINTEXT_MESSAGE_ORDERED_CONTEXT = ["kwargs['request'].get_host()", 'user_email', 'email_token.key']
83+
api_settings.PASSWORDLESS_EMAIL_PLAINTEXT_MESSAGE = 'click on link to activate https://%s/login/%s/%s'
84+
85+
email_response = self.client.post(self.email_url, self.email_data)
86+
self.assertEqual(email_response.data['detail'], ObtainEmailCallbackToken.success_response)
87+
7888
def tearDown(self):
7989
api_settings.PASSWORDLESS_AUTH_TYPES = DEFAULTS['PASSWORDLESS_AUTH_TYPES']
8090
api_settings.PASSWORDLESS_EMAIL_NOREPLY_ADDRESS = DEFAULTS['PASSWORDLESS_EMAIL_NOREPLY_ADDRESS']

0 commit comments

Comments
 (0)