mirror of
https://github.com/ansible/awx.git
synced 2026-05-18 06:47:41 -02:30
GH13983 - Add additional check for bad templates
This commit is contained in:
@@ -5,6 +5,7 @@ from copy import deepcopy
|
|||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
|
import traceback
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -484,14 +485,29 @@ class JobNotificationMixin(object):
|
|||||||
if msg_template:
|
if msg_template:
|
||||||
try:
|
try:
|
||||||
msg = env.from_string(msg_template).render(**context)
|
msg = env.from_string(msg_template).render(**context)
|
||||||
except (TemplateSyntaxError, UndefinedError, SecurityError):
|
except (TemplateSyntaxError, UndefinedError, SecurityError) as e:
|
||||||
msg = ''
|
msg = '\r\n'.join([e.message, ''.join(traceback.format_exception(None, e, e.__traceback__).replace('\n', '\r\n'))])
|
||||||
|
|
||||||
if body_template:
|
if body_template:
|
||||||
try:
|
try:
|
||||||
body = env.from_string(body_template).render(**context)
|
body = env.from_string(body_template).render(**context)
|
||||||
except (TemplateSyntaxError, UndefinedError, SecurityError):
|
except (TemplateSyntaxError, UndefinedError, SecurityError) as e:
|
||||||
body = ''
|
body = '\r\n'.join([e.message, ''.join(traceback.format_exception(None, e, e.__traceback__).replace('\n', '\r\n'))])
|
||||||
|
|
||||||
|
# https://datatracker.ietf.org/doc/html/rfc2822#section-2.2
|
||||||
|
# Body should have at least 2 CRLF, some clients will interpret
|
||||||
|
# the email incorrectly with blank body. So we will check that
|
||||||
|
|
||||||
|
if len(body.strip().splitlines()) <= 2:
|
||||||
|
# blank body
|
||||||
|
body = '\r\n'.join(
|
||||||
|
[
|
||||||
|
"The template rendering return a blank body.",
|
||||||
|
"Please check the template.",
|
||||||
|
"Refer to https://github.com/ansible/awx/issues/13983",
|
||||||
|
"for further information.",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
return (msg, body)
|
return (msg, body)
|
||||||
|
|
||||||
|
|||||||
@@ -155,4 +155,4 @@ def test_build_notification_message_undefined(run_module, admin_user, organizati
|
|||||||
nt = NotificationTemplate.objects.get(id=result['id'])
|
nt = NotificationTemplate.objects.get(id=result['id'])
|
||||||
|
|
||||||
body = job.build_notification_message(nt, 'running')
|
body = job.build_notification_message(nt, 'running')
|
||||||
assert '{"started_by": "My Placeholder"}' in body[1]
|
assert 'The template rendering return a blank body' in body[1]
|
||||||
|
|||||||
Reference in New Issue
Block a user