feat: add unpushable file checks to prevent uploading certain file types
This commit is contained in:
@@ -4,6 +4,30 @@ import fs from "fs";
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
import { createHash } from "crypto";
|
import { createHash } from "crypto";
|
||||||
|
|
||||||
|
const unpushableFiles = [
|
||||||
|
".png",
|
||||||
|
".jpg",
|
||||||
|
".jpeg",
|
||||||
|
".gif",
|
||||||
|
".bmp",
|
||||||
|
".ico",
|
||||||
|
".zip",
|
||||||
|
".tar",
|
||||||
|
".gz",
|
||||||
|
".7z",
|
||||||
|
".pdf",
|
||||||
|
".doc",
|
||||||
|
".docx",
|
||||||
|
".xls",
|
||||||
|
".xlsx",
|
||||||
|
".ppt",
|
||||||
|
".pptx",
|
||||||
|
".exe",
|
||||||
|
".dll",
|
||||||
|
".so",
|
||||||
|
".dylib"
|
||||||
|
];
|
||||||
|
|
||||||
async function deleteNonexistentFiles(
|
async function deleteNonexistentFiles(
|
||||||
currentFiles: any[],
|
currentFiles: any[],
|
||||||
files: any[],
|
files: any[],
|
||||||
@@ -19,7 +43,8 @@ async function deleteNonexistentFiles(
|
|||||||
{
|
{
|
||||||
data: { filename: currentFile.name },
|
data: { filename: currentFile.name },
|
||||||
},
|
},
|
||||||
);} catch (error: any) {
|
);
|
||||||
|
} catch (error: any) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
console.log(
|
console.log(
|
||||||
@@ -76,9 +101,6 @@ export const pushDefinition = {
|
|||||||
(f: any) => f.name === file.filename,
|
(f: any) => f.name === file.filename,
|
||||||
);
|
);
|
||||||
if (currentFile) {
|
if (currentFile) {
|
||||||
// If the file content exists in the response, we can hash it.
|
|
||||||
// Note: currentFiles from /api/function/:id/files might not have content by default depending on API,
|
|
||||||
// but the original code assumes it does.
|
|
||||||
const currentFileHash = createHash("md5")
|
const currentFileHash = createHash("md5")
|
||||||
.update(currentFile.content || "")
|
.update(currentFile.content || "")
|
||||||
.digest("hex");
|
.digest("hex");
|
||||||
@@ -92,14 +114,27 @@ export const pushDefinition = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const filenameLower = file.filename.toLowerCase();
|
||||||
|
// Unpushable file check
|
||||||
|
if (unpushableFiles.some((suffix) => filenameLower.endsWith(suffix))) {
|
||||||
|
console.log(
|
||||||
|
chalk.yellow(
|
||||||
|
`Skipping ${file.filename}, it matches unpushable patterns for function ${options.id}`,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
await client.put(`/api/function/${options.id}/file`, {
|
await client.put(`/api/function/${options.id}/file`, {
|
||||||
filename: file.filename,
|
filename: file.filename,
|
||||||
code: file.content,
|
code: file.content,
|
||||||
});
|
});
|
||||||
|
|
||||||
const byteSize = Buffer.byteLength(file.content, 'utf8');
|
const byteSize = Buffer.byteLength(file.content, "utf8");
|
||||||
console.log(
|
console.log(
|
||||||
chalk.green(`Pushed ${file.filename} (${byteSize} bytes) to function ${options.id}`),
|
chalk.green(
|
||||||
|
`Pushed ${file.filename} (${byteSize} bytes) to function ${options.id}`,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
pushedFilesCount++;
|
pushedFilesCount++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user