Skip to content

Commit 9893665

Browse files
committed
Add validation for --file flag to script
1 parent e1a4750 commit 9893665

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/commands/run-script.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { bold, red, magenta, cyan } from 'chalk';
44
import { runScriptAPI } from '../api';
55
import { dbLogger } from '../util/logger';
66
import { loadConfig, resolveConnections } from '..';
7+
import { validateScriptFileName } from '../util/fs';
78
import { printLine, printError, printInfo } from '../util/io';
89
import OperationResult from '../domain/operation/OperationResult';
910

@@ -17,7 +18,9 @@ class RunScript extends Command {
1718
description: 'Filter provided connection(s). Comma separated ids eg: id1,id2'
1819
}),
1920
file: flags.string({
21+
required: true,
2022
helpValue: 'Script Name',
23+
parse: validateScriptFileName,
2124
description: 'Name of the manual SQL/JS/TS script'
2225
}),
2326
'connection-resolver': flags.string({

src/util/fs.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as fs from 'fs';
22
import * as os from 'os';
33
import * as path from 'path';
44
import { promisify } from 'util';
5+
import FileExtensions from '../enum/FileExtensions';
56

67
export const mkdir = promisify(fs.mkdir);
78
export const readDir = promisify(fs.readdir);
@@ -141,3 +142,19 @@ export function copy(fromPath: string, toPath: string): Promise<void> {
141142
});
142143
});
143144
}
145+
146+
/**
147+
* Validate the script filename provided from CLI.
148+
*
149+
* @param {string} filename
150+
* @returns {string}
151+
*/
152+
export function validateScriptFileName(filename: string): string {
153+
const ext = filename.split('.').pop();
154+
155+
if (!ext || ![FileExtensions.JS, FileExtensions.SQL, FileExtensions.JS].includes(ext as FileExtensions)) {
156+
throw new Error('Invalid file name or extension');
157+
}
158+
159+
return filename;
160+
}

0 commit comments

Comments
 (0)