From 621e1a11be24b66d366b3533094563cee9c62f9f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 24 Nov 2021 01:53:25 +0100 Subject: [PATCH] scaffolder-backend: fix SecureTemplater cookiecutter compat using wrong syntax Signed-off-by: Patrik Oldsberg --- .../src/lib/templating/SecureTemplater.test.ts | 8 ++++---- .../src/lib/templating/SecureTemplater.ts | 13 ++++++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts index b149d2cfe3..899f57e295 100644 --- a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts +++ b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts @@ -49,16 +49,16 @@ describe('SecureTemplater', () => { // Same two tests repeated to make sure switching back and forth works expect( - templater.render('${{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), + templater.render('{{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), ).toBe('1'); expect( - templater.render('${{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), + templater.render('{{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), ).toBe('1'); expect(() => templater.render('${{ 1 | jsonify }}', {})).toThrow( '(unknown path)\n Error: filter not found: jsonify', ); expect( - templater.render('${{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), + templater.render('{{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), ).toBe('1'); expect(() => templater.render('${{ 1 | jsonify }}', {})).toThrow( '(unknown path)\n Error: filter not found: jsonify', @@ -70,7 +70,7 @@ describe('SecureTemplater', () => { '(unknown path)\n Error: filter not found: jsonify', ); expect( - templater.render('${{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), + templater.render('{{ 1 | jsonify }}', {}, { cookiecutterCompat: true }), ).toBe('1'); }); diff --git a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts index 2f22b3439e..c4f14cfe3f 100644 --- a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts +++ b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts @@ -35,6 +35,15 @@ const { render, renderCompat } = (() => { }, }); + const compatEnv = module.exports.configure({ + autoescape: false, + tags: { + variableStart: '{{', + variableEnd: '}}', + }, + }); + compatEnv.addFilter('jsonify', compatEnv.getFilter('dump')); + if (typeof parseRepoUrl !== 'undefined') { env.addFilter('parseRepoUrl', repoUrl => { return JSON.parse(parseRepoUrl(repoUrl)) @@ -52,7 +61,6 @@ const { render, renderCompat } = (() => { if (uninstallCompat) { uninstallCompat(); uninstallCompat = undefined; - delete env.filters.jsonify; } return env.renderString(str, JSON.parse(values)); } catch (error) { @@ -65,9 +73,8 @@ const { render, renderCompat } = (() => { try { if (!uninstallCompat) { uninstallCompat = module.exports.installJinjaCompat(); - env.filters.jsonify = env.filters.dump; } - return env.renderString(str, JSON.parse(values)); + return compatEnv.renderString(str, JSON.parse(values)); } catch (error) { // Make sure errors don't leak anything throw new Error(String(error.message));