from django.utils.translation import ugettext_lazy as _
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
+from django.template import Template, Parser, Lexer, TOKEN_BLOCK, TOKEN_VAR
from django.utils import simplejson as json
import re
+from philo.utils import LOADED_TEMPLATE_ATTR
-LOADED_TEMPLATE_ATTR = '_philo_loaded_template'
INSECURE_TAGS = (
'load',
'extends',
'include',
+ 'debug',
)
raise ValidationError(u'\'%s\' is not valid JSON' % value)
-from django.template import Template, Parser, Lexer, TOKEN_BLOCK
-
-
class TemplateValidationParser(Parser):
def __init__(self, tokens, allow=None, disallow=None, secure=True):
super(TemplateValidationParser, self).__init__(tokens)
if secure:
disallow |= set(INSECURE_TAGS)
- self.allow, self.disallow = allow, disallow
+ self.allow, self.disallow, self.secure = allow, disallow, secure
def parse(self, parse_until=None):
if parse_until is None:
return nodelist
def disallowed_tag(self, command):
- raise ValidationError("Tag not allowed: %s" % command)
+ if self.secure and command in INSECURE_TAGS:
+ raise ValidationError('Tag "%s" is not permitted for security reasons.' % command)
+ raise ValidationError('Tag "%s" is not permitted here.' % command)
class TemplateValidator(object):