Check against invalid args in default provisions

This commit is contained in:
Zaid Abdulla committed 2019-10-28 18:07:33 -07:00
1 parent 85b5e12c94
commit df5e4cf454
2 files changed
+52 -3

No files matched your search

+36 -1
View File
@@ -25,6 +25,13 @@ import * as scheduling from "./scheduling";
const MAX_DEPTH = +config.get("MAX_DEPTH"); const MAX_DEPTH = +config.get("MAX_DEPTH");
export function refresh(sessionContext, provision, declarations): boolean { export function refresh(sessionContext, provision, declarations): boolean {
if (
provision.length !== 3 ||
typeof provision[1] !== "string" ||
typeof provision[2] !== "number"
)
throw new Error("Invalid arguments");
const segments = Path.parse(provision[1]).segments.slice(); const segments = Path.parse(provision[1]).segments.slice();
const l = segments.length; const l = segments.length;
segments.length = MAX_DEPTH; segments.length = MAX_DEPTH;
@@ -49,6 +56,9 @@ export function refresh(sessionContext, provision, declarations): boolean {
} }
export function value(sessionContext, provision, declarations): boolean { export function value(sessionContext, provision, declarations): boolean {
if (provision.length !== 3 || typeof provision[1] !== "string")
throw new Error("Invalid arguments");
declarations.push({ declarations.push({
path: Path.parse(provision[1]), path: Path.parse(provision[1]),
pathGet: 1, pathGet: 1,
@@ -62,6 +72,13 @@ export function value(sessionContext, provision, declarations): boolean {
} }
export function tag(sessionContext, provision, declarations): boolean { export function tag(sessionContext, provision, declarations): boolean {
if (
provision.length !== 3 ||
typeof provision[1] !== "string" ||
typeof provision[2] !== "boolean"
)
throw new Error("Invalid arguments");
declarations.push({ declarations.push({
path: Path.parse(`Tags.${provision[1]}`), path: Path.parse(`Tags.${provision[1]}`),
pathGet: 1, pathGet: 1,
@@ -75,6 +92,8 @@ export function tag(sessionContext, provision, declarations): boolean {
} }
export function reboot(sessionContext, provision, declarations): boolean { export function reboot(sessionContext, provision, declarations): boolean {
if (provision.length !== 1) throw new Error("Invalid arguments");
declarations.push({ declarations.push({
path: Path.parse("Reboot"), path: Path.parse("Reboot"),
pathGet: 1, pathGet: 1,
@@ -88,6 +107,8 @@ export function reboot(sessionContext, provision, declarations): boolean {
} }
export function reset(sessionContext, provision, declarations): boolean { export function reset(sessionContext, provision, declarations): boolean {
if (provision.length !== 1) throw new Error("Invalid arguments");
declarations.push({ declarations.push({
path: Path.parse("FactoryReset"), path: Path.parse("FactoryReset"),
pathGet: 1, pathGet: 1,
@@ -101,6 +122,17 @@ export function reset(sessionContext, provision, declarations): boolean {
} }
export function download(sessionContext, provision, declarations): boolean { export function download(sessionContext, provision, declarations): boolean {
if (
(provision.length !== 3 ||
typeof provision[1] !== "string" ||
typeof provision[2] !== "string") &&
(provision.length !== 4 ||
typeof provision[1] !== "string" ||
typeof provision[2] !== "string" ||
typeof provision[3] !== "string")
)
throw new Error("Invalid arguments");
const alias = [ const alias = [
`FileType:${JSON.stringify(provision[1] || "")}`, `FileType:${JSON.stringify(provision[1] || "")}`,
`FileName:${JSON.stringify(provision[2] || "")}`, `FileName:${JSON.stringify(provision[2] || "")}`,
@@ -135,9 +167,12 @@ export function instances(
startRevision, startRevision,
endRevision endRevision
): boolean { ): boolean {
if (provision.length !== 3 || typeof provision[1] !== "string")
throw new Error("Invalid arguments");
let count = Number(provision[2]); let count = Number(provision[2]);
if (Number.isNaN(count)) return true; if (Number.isNaN(count)) throw new Error("Invalid arguments");
const path = Path.parse(provision[1]); const path = Path.parse(provision[1]);
+16 -2
View File
@@ -537,15 +537,29 @@ async function runProvisions(
if (!allProvisions[provision[0]]) { if (!allProvisions[provision[0]]) {
if (defaultProvisions[provision[0]]) { if (defaultProvisions[provision[0]]) {
const dec = []; const dec = [];
const done = defaultProvisions[provision[0]]( let done = true;
let fault = null;
try {
done = defaultProvisions[provision[0]](
sessionContext, sessionContext,
provision, provision,
dec, dec,
startRevision, startRevision,
endRevision endRevision
); );
} catch (err) {
fault = {
code: `script.${err.name}`,
message: err.message,
detail: {
name: err.name,
message: err.message,
stack: `${err.name}: ${err.message}\n at ${provision[0]}`
}
};
}
return { return {
fault: null, fault: fault,
clear: null, clear: null,
declare: dec, declare: dec,
done: done, done: done,