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 |
tests/test_utils.py | ||
---|---|---|
15 | 15 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 |
# authentic2 |
17 | 17 | |
18 |
import pytest |
|
19 | ||
18 | 20 |
from django.contrib.auth.middleware import AuthenticationMiddleware |
19 | 21 |
from django.contrib.sessions.middleware import SessionMiddleware |
22 |
from django.core import mail |
|
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 |
@pytest.fixture |
|
126 |
def templates(settings): |
|
127 |
from django.template import engines |
|
128 |
templates = {} |
|
129 |
settings.TEMPLATES[0]['APP_DIRS'] = False |
|
130 |
loaders = settings.TEMPLATES[0]['OPTIONS'].get('loaders') |
|
131 |
settings.TEMPLATES[0]['OPTIONS']['loaders'] = [ |
|
132 |
('django.template.loaders.locmem.Loader', templates) |
|
133 |
] |
|
134 |
try: |
|
135 |
del engines.templates |
|
136 |
except AttributeError: |
|
137 |
pass |
|
138 |
engines._templates = None |
|
139 |
engines._engines = {} |
|
140 |
yield templates |
|
141 |
if loaders: |
|
142 |
settings.TEMPLATES[0]['OPTIONS']['loaders'] = loaders |
|
143 |
else: |
|
144 |
del settings.TEMPLATES[0]['OPTIONS']['loaders'] |
|
145 |
try: |
|
146 |
del engines.templates |
|
147 |
except AttributeError: |
|
148 |
pass |
|
149 |
engines._templates = None |
|
150 |
engines._engines = {} |
|
151 | ||
152 | ||
153 |
def test_send_templated_mail_template_selection(templates, simple_user): |
|
154 |
default_template = 'default_template' |
|
155 |
specific_template = 'specific_template' |
|
156 |
default_template_ou = '_'.join((default_template, simple_user.ou.slug)) |
|
157 |
specific_template_ou = '_'.join((specific_template, simple_user.ou.slug)) |
|
158 |
template_names = [specific_template, default_template] |
|
159 | ||
160 |
def add_template(template): |
|
161 |
extensions = ['_body.html', '_body.txt', '_subject.txt'] |
|
162 |
for ext in extensions: |
|
163 |
templates[template + ext] = template |
|
164 | ||
165 |
add_template(default_template) |
|
166 |
send_templated_mail(simple_user, template_names, per_ou_templates=True) |
|
167 |
assert len(mail.outbox) == 1 |
|
168 |
sent_mail = mail.outbox.pop() |
|
169 |
assert sent_mail.subject == default_template |
|
170 |
assert sent_mail.body == default_template |
|
171 | ||
172 |
add_template(default_template_ou) |
|
173 |
send_templated_mail(simple_user, template_names, per_ou_templates=True) |
|
174 |
assert len(mail.outbox) == 1 |
|
175 |
sent_mail = mail.outbox.pop() |
|
176 |
assert sent_mail.subject == default_template_ou |
|
177 |
assert sent_mail.body == default_template_ou |
|
178 | ||
179 |
add_template(specific_template) |
|
180 |
send_templated_mail(simple_user, template_names, per_ou_templates=True) |
|
181 |
assert len(mail.outbox) == 1 |
|
182 |
sent_mail = mail.outbox.pop() |
|
183 |
assert sent_mail.subject == specific_template |
|
184 |
assert sent_mail.body == specific_template |
|
185 | ||
186 |
add_template(specific_template_ou) |
|
187 |
send_templated_mail(simple_user, template_names, per_ou_templates=True) |
|
188 |
assert len(mail.outbox) == 1 |
|
189 |
sent_mail = mail.outbox.pop() |
|
190 |
assert sent_mail.subject == specific_template_ou |
|
191 |
assert sent_mail.body == specific_template_ou |
|
119 |
- |