0001-utils-handle-per-ou-template-in-send_templated_mail-.patch
src/authentic2/utils/__init__.py | ||
---|---|---|
613 | 613 | |
614 | 614 |
def send_templated_mail(user_or_email, template_names, context=None, with_html=True, |
615 | 615 |
from_email=None, request=None, legacy_subject_templates=None, |
616 |
legacy_body_templates=None, legacy_html_body_templates=None, **kwargs): |
|
616 |
legacy_body_templates=None, legacy_html_body_templates=None, |
|
617 |
per_ou_templates=False, **kwargs): |
|
617 | 618 |
'''Send mail to an user by using templates: |
618 | 619 |
- <template_name>_subject.txt for the subject |
619 | 620 |
- <template_name>_body.txt for the plain text body |
... | ... | |
622 | 623 |
from .. import middleware |
623 | 624 |
if isinstance(template_names, six.string_types): |
624 | 625 |
template_names = [template_names] |
626 |
if per_ou_templates and getattr(user_or_email, 'ou', None): |
|
627 |
new_template_names = [] |
|
628 |
for template in template_names: |
|
629 |
new_template_names.append('_'.join((template, user_or_email.ou.slug))) |
|
630 |
new_template_names.append(template) |
|
631 |
template_names = new_template_names |
|
625 | 632 |
if hasattr(user_or_email, 'email'): |
626 | 633 |
user_or_email = user_or_email.email |
627 | 634 |
if not request: |
... | ... | |
645 | 652 |
html_body = render_to_string(html_body_template_names, ctx, request=request) |
646 | 653 |
except TemplateDoesNotExist: |
647 | 654 |
html_body = None |
655 | ||
648 | 656 |
send_mail(subject, body, from_email or settings.DEFAULT_FROM_EMAIL, [user_or_email], |
649 | 657 |
html_message=html_body, **kwargs) |
650 | 658 | |
... | ... | |
751 | 759 |
'deletion_url': deletion_url} |
752 | 760 |
template_names = [ |
753 | 761 |
'authentic2/account_deletion_code'] |
754 |
if user.ou: |
|
755 |
template_names.insert(0, 'authentic2/account_deletion_code_%s' % user.ou.slug) |
|
756 |
send_templated_mail(user.email, template_names, context, request=request) |
|
762 |
send_templated_mail(user, template_names, context, request=request, per_ou_templates=True) |
|
757 | 763 |
logger.info(u'account deletion code sent to %s', user.email) |
758 | 764 | |
759 | 765 | |
... | ... | |
769 | 775 |
'site': request.get_host()} |
770 | 776 |
template_names = [ |
771 | 777 |
'authentic2/account_delete_notification'] |
772 |
if user.ou: |
|
773 |
template_names.insert(0, 'authentic2/account_delete_notification_%s' % user.ou.slug) |
|
774 |
send_templated_mail(user.email, template_names, context, request=request) |
|
778 |
send_templated_mail(user, template_names, context, request=request, per_ou_templates=True) |
|
775 | 779 |
logger.info(u'account deletion mail sent to %s', user.email) |
776 | 780 | |
777 | 781 | |
... | ... | |
826 | 830 |
set_random_password=set_random_password, |
827 | 831 |
sign_next_url=sign_next_url) |
828 | 832 | |
829 |
send_templated_mail(user.email, template_names, ctx, request=request,
|
|
833 |
send_templated_mail(user, template_names, ctx, request=request, |
|
830 | 834 |
legacy_subject_templates=legacy_subject_templates, |
831 |
legacy_body_templates=legacy_body_templates, **kwargs) |
|
835 |
legacy_body_templates=legacy_body_templates, |
|
836 |
per_ou_templates=True, **kwargs) |
|
832 | 837 |
logger.info(u'password reset request for user %s, email sent to %s ' |
833 | 838 |
'with token %s', user, user.email, token[:9]) |
834 | 839 |
src/django_rbac/test_settings.py | ||
---|---|---|
21 | 21 | |
22 | 22 |
ALLOWED_HOSTS = [] |
23 | 23 | |
24 |
BASE_DIR = os.path.dirname(__file__) |
|
25 |
TEMPLATES = [{'DIRS': []}] |
|
26 | ||
24 | 27 |
if 'AUTHENTIC2_SETTINGS_FILE' in os.environ: |
25 | 28 |
with open(os.environ['AUTHENTIC2_SETTINGS_FILE']) as fd: |
26 | 29 |
exec(fd.read()) |
tests/settings.py | ||
---|---|---|
40 | 40 | |
41 | 41 | |
42 | 42 |
ALLOWED_HOSTS = ALLOWED_HOSTS + ['example.net', 'cache1.example.com', 'cache2.example.com'] |
43 | ||
44 |
BASE_TEST_DIR = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 'tests') |
|
45 | ||
46 |
TEMPLATES[0]['DIRS'].append(os.path.join(BASE_TEST_DIR, 'templates')) |
tests/templates/custom_mail_template_body.html | ||
---|---|---|
1 |
custom_mail_template |
tests/templates/custom_mail_template_body.txt | ||
---|---|---|
1 |
custom_mail_template |
tests/templates/custom_mail_template_ou_name_body.html | ||
---|---|---|
1 |
custom_mail_template_ou_name |
tests/templates/custom_mail_template_ou_name_body.txt | ||
---|---|---|
1 |
custom_mail_template_ou_name |
tests/templates/custom_mail_template_ou_name_subject.txt | ||
---|---|---|
1 |
custom_mail_template_ou_name |
tests/templates/custom_mail_template_subject.txt | ||
---|---|---|
1 |
custom_mail_template |
tests/templates/default_mail_template_body.html | ||
---|---|---|
1 |
default_mail_template |
tests/templates/default_mail_template_body.txt | ||
---|---|---|
1 |
default_mail_template |
tests/templates/default_mail_template_ou_name_body.html | ||
---|---|---|
1 |
default_mail_template_ou_name |
tests/templates/default_mail_template_ou_name_body.txt | ||
---|---|---|
1 |
default_mail_template_ou_name |
tests/templates/default_mail_template_ou_name_subject.txt | ||
---|---|---|
1 |
default_mail_template_ou_name |
tests/templates/default_mail_template_subject.txt | ||
---|---|---|
1 |
default_mail_template |
tests/test_utils.py | ||
---|---|---|
17 | 17 | |
18 | 18 |
from django.contrib.auth.middleware import AuthenticationMiddleware |
19 | 19 |
from django.contrib.sessions.middleware import SessionMiddleware |
20 |
from django.core import mail |
|
21 | ||
22 |
from django_rbac.utils import get_ou_model |
|
20 | 23 | |
21 | 24 |
from authentic2.utils import (good_next_url, same_origin, select_next_url, |
22 | 25 |
user_can_change_password, login, |
23 |
get_authentication_events, authenticate) |
|
26 |
get_authentication_events, authenticate, |
|
27 |
send_templated_mail) |
|
24 | 28 | |
25 | 29 | |
26 | 30 |
def test_good_next_url(db, rf, settings): |
... | ... | |
116 | 120 |
request.COOKIES['preferrence'] = '1 2 3 4 5' |
117 | 121 |
prepend_remember_cookie(request, response, 'preferrence', 7) |
118 | 122 |
assert response.cookies['preferrence'].value == '7 1 2 3 4' |
123 | ||
124 | ||
125 |
def test_send_templated_mail_template_selection(simple_user): |
|
126 |
ou = get_ou_model().objects.create(slug='ou_name') |
|
127 |
simple_user.ou = ou |
|
128 |
default_template = 'default_mail_template' |
|
129 |
specific_template = 'custom_mail_template' |
|
130 |
default_template_ou = '_'.join((default_template, ou.slug)) |
|
131 |
specific_template_ou = '_'.join((specific_template, ou.slug)) |
|
132 |
template_names = [default_template] |
|
133 | ||
134 |
send_templated_mail(simple_user, template_names) |
|
135 |
assert len(mail.outbox) == 1 |
|
136 |
sent_mail = mail.outbox.pop() |
|
137 |
assert sent_mail.subject == default_template |
|
138 |
assert sent_mail.body == default_template |
|
139 | ||
140 |
send_templated_mail(simple_user, template_names, per_ou_templates=True) |
|
141 |
assert len(mail.outbox) == 1 |
|
142 |
sent_mail = mail.outbox.pop() |
|
143 |
assert sent_mail.subject == default_template_ou |
|
144 |
assert sent_mail.body == default_template_ou |
|
145 | ||
146 |
template_names.insert(0, specific_template) |
|
147 |
send_templated_mail(simple_user, template_names) |
|
148 |
assert len(mail.outbox) == 1 |
|
149 |
sent_mail = mail.outbox.pop() |
|
150 |
assert sent_mail.subject == specific_template |
|
151 |
assert sent_mail.body == specific_template |
|
152 | ||
153 |
send_templated_mail(simple_user, template_names, per_ou_templates=True) |
|
154 |
assert len(mail.outbox) == 1 |
|
155 |
sent_mail = mail.outbox.pop() |
|
156 |
assert sent_mail.subject == specific_template_ou |
|
157 |
assert sent_mail.body == specific_template_ou |
|
119 |
- |