UNPKG

@internxt/scan

Version:

Use Node JS to scan files on your server with ClamAV's clamscan/clamdscan binary or via TCP to a remote server or local UNIX Domain socket. This is especially useful for scanning uploaded files provided by un-trusted sources.

56 lines (46 loc) 1.47 kB
const { resolve: resolvePath } = require('path'); const { readdir } = require('fs').promises; const isPermissionError = require('./isPermissionError'); /** * * @param dir * @param recursive */ async function getFiles(dir, recursive = true) { let items; try { items = await readdir(dir, { withFileTypes: true }); } catch (err) { if (isPermissionError(err)) { console.warn(`Skipping directory "${dir}" due to permission error.`); return null; } throw err; } const filePromises = items.map(async (item) => { const fullPath = resolvePath(dir, item.name); if (!recursive && item.isDirectory()) { return null; } if (item.isDirectory()) { try { const subitems = await readdir(fullPath, { withFileTypes: true }); if (subitems.length === 0) { return null; } return await getFiles(fullPath, true); } catch (err) { if (isPermissionError(err)) { console.warn(`Skipping subdirectory "${fullPath}" due to permission error.`); return null; } throw err; } } else { return fullPath; } }); const results = await Promise.all(filePromises); return results.filter(Boolean).flat(); } module.exports = getFiles;