Nunjucks: Как обойти autoescape с пользовательским расширением?

С SSL шифрование находится на транспортном уровне, поэтому оно выполняется до отправки запроса.

Таким образом, все в запросе зашифровано.

0
задан Mark Odey 21 February 2019 в 03:52
поделиться

1 ответ

У вас есть доступ ко всем внутренним фильтрам, поэтому ответ - cb(null, nunjucks.filters.safe(html));.

var nunjucks = require('nunjucks');

var MyLoader = nunjucks.Loader.extend({
    async: true,
    getSource: function(name, callback) {
        var res = '...';
        callback(err, res);
    }
});

var env = new nunjucks.Environment(new MyLoader(), {autoescape: true}); // !

function CustomExtension(cb) {
    this.tags = ['docs'];

    this.parse = function(parser, nodes, lexer) {
        var tok = parser.nextToken();
        var args = parser.parseSignature(null, true);
        parser.nextToken();
        var body = parser.parseUntilBlocks('enddocs');
        parser.advanceAfterBlockEnd();
        return new nodes.CallExtensionAsync(this, 'run', args, [body], cb);
    };

    this.run = function(context, args, body, cb) {
        var res = env.filters.safe(args + ':' + body()); // prevent escape
        cb(null, res);
    };
}    
env.addExtension('CustomExtension', new CustomExtension());

env.renderString('{% docs "<TEST>" %}"OK"{% enddocs %}', console.log);
0
ответ дан Aikon Mogwai 21 February 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: