refactor: [#8920] Clean-up based on PR feedback
Signed-off-by: David Zemon <david@zemon.name>
This commit is contained in:
@@ -104,7 +104,7 @@ describe('SecureTemplater', () => {
|
||||
const mockFilter2 = jest.fn((var1, var2) => `${var1} ${var2}`);
|
||||
const mockFilter3 = jest.fn((var1, var2) => ({ var1, var2 }));
|
||||
const renderWith = await SecureTemplater.loadRenderer({
|
||||
additionalFilters: { mockFilter1, mockFilter2, mockFilter3 },
|
||||
nunjucksFilters: { mockFilter1, mockFilter2, mockFilter3 },
|
||||
});
|
||||
const renderWithout = await SecureTemplater.loadRenderer();
|
||||
|
||||
|
||||
@@ -58,14 +58,10 @@ const { render, renderCompat } = (() => {
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof additionalFilters !== "undefined") {
|
||||
Object.entries(additionalFilters)
|
||||
.forEach(([filterName, filterFunction]) => {
|
||||
env.addFilter(
|
||||
filterName,
|
||||
(...args) => JSON.parse(filterFunction.apply(null, args))
|
||||
);
|
||||
});
|
||||
if (typeof nunjucksFilters !== 'undefined') {
|
||||
for (const [filterName, filterFn] of Object.entries(nunjucksFilters)) {
|
||||
env.addFilter(filterName, (...args) => JSON.parse(filterFn(...args)));
|
||||
}
|
||||
}
|
||||
|
||||
let uninstallCompat = undefined;
|
||||
@@ -109,7 +105,7 @@ export interface SecureTemplaterOptions {
|
||||
cookiecutterCompat?: boolean;
|
||||
|
||||
/* Extra user-provided nunjucks filters */
|
||||
additionalFilters?: Record<string, NunjucksFilter>;
|
||||
nunjucksFilters?: Record<string, NunjucksFilter>;
|
||||
}
|
||||
|
||||
export type SecureTemplateRenderer = (
|
||||
@@ -119,22 +115,22 @@ export type SecureTemplateRenderer = (
|
||||
|
||||
export class SecureTemplater {
|
||||
static async loadRenderer(options: SecureTemplaterOptions = {}) {
|
||||
const { parseRepoUrl, cookiecutterCompat, additionalFilters } = options;
|
||||
const { parseRepoUrl, cookiecutterCompat, nunjucksFilters } = options;
|
||||
const sandbox: Record<string, any> = {};
|
||||
|
||||
if (parseRepoUrl) {
|
||||
sandbox.parseRepoUrl = (url: string) => JSON.stringify(parseRepoUrl(url));
|
||||
}
|
||||
|
||||
if (additionalFilters) {
|
||||
sandbox.additionalFilters = Object.entries(additionalFilters)
|
||||
.filter(([_, filterFunction]) => !!filterFunction)
|
||||
.reduce((safeFilters, [filterName, filterFunction]) => {
|
||||
const newSafeFilters = { ...safeFilters };
|
||||
newSafeFilters[filterName] = (...args) =>
|
||||
JSON.stringify(filterFunction.apply(null, args));
|
||||
return newSafeFilters;
|
||||
}, {} as Record<string, NunjucksFilter>);
|
||||
if (nunjucksFilters) {
|
||||
sandbox.nunjucksFilters = Object.fromEntries(
|
||||
Object.entries(nunjucksFilters)
|
||||
.filter(([_, filterFunction]) => !!filterFunction)
|
||||
.map(([filterName, filterFunction]) => [
|
||||
filterName,
|
||||
(...args: JsonValue[]) => JSON.stringify(filterFunction(...args)),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
const vm = new VM({ sandbox });
|
||||
|
||||
@@ -186,7 +186,7 @@ export function createFetchTemplateAction(options: {
|
||||
|
||||
const renderTemplate = await SecureTemplater.loadRenderer({
|
||||
cookiecutterCompat: ctx.input.cookiecutterCompat,
|
||||
additionalFilters: nunjucksFilters,
|
||||
nunjucksFilters: nunjucksFilters,
|
||||
});
|
||||
|
||||
for (const location of allEntriesInTemplate) {
|
||||
|
||||
@@ -45,7 +45,7 @@ type NunjucksWorkflowRunnerOptions = {
|
||||
actionRegistry: TemplateActionRegistry;
|
||||
integrations: ScmIntegrations;
|
||||
logger: winston.Logger;
|
||||
additionalFilters?: Record<string, NunjucksFilter>;
|
||||
nunjucksFilters?: Record<string, NunjucksFilter>;
|
||||
};
|
||||
|
||||
type TemplateContext = {
|
||||
@@ -192,7 +192,7 @@ export class NunjucksWorkflowRunner implements WorkflowRunner {
|
||||
parseRepoUrl(url: string) {
|
||||
return parseRepoUrl(url, integrations);
|
||||
},
|
||||
additionalFilters: this.options.additionalFilters,
|
||||
nunjucksFilters: this.options.nunjucksFilters,
|
||||
});
|
||||
|
||||
try {
|
||||
|
||||
@@ -80,7 +80,7 @@ export class TaskWorker {
|
||||
integrations,
|
||||
logger,
|
||||
workingDirectory,
|
||||
additionalFilters: nunjucksFilters,
|
||||
nunjucksFilters: nunjucksFilters,
|
||||
});
|
||||
|
||||
return new TaskWorker({
|
||||
|
||||
Reference in New Issue
Block a user