emails: fixed newlines in email templates that can break email sending code.

This commit is contained in:
Marcin Kuzminski 2017-05-03 18:44:10 +02:00
parent 9d45467ca3
commit 37094cb9b3
11 changed files with 69 additions and 9 deletions

View file

@ -332,14 +332,19 @@ class EmailNotificationModel(BaseModel):
:param kwargs:
"""
kwargs['rhodecode_instance_name'] = self.rhodecode_instance_name
_kwargs = {
'instance_url': h.url('home', qualified=True),
'whitespace_filter': self.whitespace_filter
}
_kwargs.update(kwargs)
return _kwargs
def whitespace_filter(self, text):
return text.replace('\n', '').replace('\t', '')
def get_renderer(self, type_):
template_name = self.email_types[type_]
return PartialRenderer(template_name)

View file

@ -3,7 +3,7 @@
<%namespace name="base" file="base.mako"/>
## EMAIL SUBJECT
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
<%
data = {
'user': h.person(user),

View file

@ -1,7 +1,7 @@
## -*- coding: utf-8 -*-
<%inherit file="base.mako"/>
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
RhodeCode test email: ${h.format_date(date)}
</%def>

View file

@ -1,7 +1,7 @@
## -*- coding: utf-8 -*-
<%inherit file="base.mako"/>
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
</%def>

View file

@ -1,7 +1,7 @@
## -*- coding: utf-8 -*-
<%inherit file="base.mako"/>
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
RhodeCode Password reset
</%def>

View file

@ -1,7 +1,7 @@
## -*- coding: utf-8 -*-
<%inherit file="base.mako"/>
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
Your new RhodeCode password
</%def>

View file

@ -3,7 +3,7 @@
<%namespace name="base" file="base.mako"/>
## EMAIL SUBJECT
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
<%
data = {
'user': h.person(user),

View file

@ -2,7 +2,7 @@
<%inherit file="base.mako"/>
<%namespace name="base" file="base.mako"/>
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
<%
data = {
'user': h.person(user),

View file

@ -1,7 +1,7 @@
## -*- coding: utf-8 -*-
<%inherit file="base.mako"/>
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
Test "Subject" ${_('hello "world"')|n}
</%def>

View file

@ -1,7 +1,7 @@
## -*- coding: utf-8 -*-
<%inherit file="base.mako"/>
<%def name="subject()" filter="n,trim">
<%def name="subject()" filter="n,trim,whitespace_filter">
RhodeCode new user registration: ${user.username}
</%def>

View file

@ -3,6 +3,7 @@ import collections
import pytest
from rhodecode.lib.utils import PartialRenderer
from rhodecode.lib.utils2 import AttributeDict
from rhodecode.model.notification import EmailNotificationModel
@ -66,3 +67,57 @@ def test_render_pr_email(pylonsapp, user_admin):
# subject
assert subject == 'Marcin Kuzminski wants you to review pull request #200: "Example Pull Request"'
@pytest.mark.parametrize('mention', [
True,
False
])
@pytest.mark.parametrize('email_type', [
EmailNotificationModel.TYPE_COMMIT_COMMENT,
EmailNotificationModel.TYPE_PULL_REQUEST_COMMENT
])
def test_render_comment_subject_no_newlines(pylonsapp, mention, email_type):
ref = collections.namedtuple('Ref',
'name, type')(
'fxies123', 'book'
)
pr = collections.namedtuple('PullRequest',
'pull_request_id, title, description, source_ref_parts, source_ref_name, target_ref_parts, target_ref_name')(
200, 'Example Pull Request', 'Desc of PR', ref, 'bookmark', ref, 'Branch')
source_repo = target_repo = collections.namedtuple('Repo',
'type, repo_name')(
'hg', 'pull_request_1')
kwargs = {
'user': '<marcin@rhodecode.com> Marcin Kuzminski',
'commit': AttributeDict(raw_id='a'*40, message='Commit message'),
'status_change': 'approved',
'commit_target_repo': AttributeDict(),
'repo_name': 'test-repo',
'comment_file': 'test-file.py',
'comment_line': 'n100',
'comment_type': 'note',
'commit_comment_url': 'http://comment-url',
'instance_url': 'http://rc-instance',
'comment_body': 'hello world',
'mention': mention,
'pr_comment_url': 'http://comment-url',
'pr_source_repo': AttributeDict(repo_name='foobar'),
'pr_source_repo_url': 'http://soirce-repo/url',
'pull_request': pr,
'pull_request_commits': [],
'pull_request_target_repo': target_repo,
'pull_request_target_repo_url': 'x',
'pull_request_source_repo': source_repo,
'pull_request_source_repo_url': 'x',
}
subject, headers, body, body_plaintext = EmailNotificationModel().render_email(
email_type, **kwargs)
assert '\n' not in subject