Initial Commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
'use strict';
|
||||
const { Router } = require('express');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const router = Router();
|
||||
|
||||
/** Return available drive letters on Windows. */
|
||||
function getWindowsRoots() {
|
||||
const roots = [];
|
||||
for (let code = 65; code <= 90; code++) {
|
||||
const drive = `${String.fromCharCode(code)}:\\`;
|
||||
try { fs.accessSync(drive); roots.push({ name: drive, path: drive }); } catch { /* skip */ }
|
||||
}
|
||||
return roots;
|
||||
}
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
const reqPath = req.query.path ? String(req.query.path) : null;
|
||||
|
||||
// No path → return filesystem roots
|
||||
if (!reqPath) {
|
||||
const isWindows = process.platform === 'win32';
|
||||
const dirs = isWindows ? getWindowsRoots() : [{ name: '/', path: '/' }];
|
||||
return res.json({ path: null, parent: null, dirs });
|
||||
}
|
||||
|
||||
// Validate: must exist and be a directory
|
||||
let stat;
|
||||
try { stat = fs.statSync(reqPath); }
|
||||
catch { return res.status(400).json({ error: 'Path does not exist' }); }
|
||||
|
||||
if (!stat.isDirectory()) {
|
||||
return res.status(400).json({ error: 'Path is not a directory' });
|
||||
}
|
||||
|
||||
// List subdirectories, excluding hidden entries
|
||||
let dirs;
|
||||
try {
|
||||
dirs = fs.readdirSync(reqPath, { withFileTypes: true })
|
||||
.filter(e => e.isDirectory() && !e.name.startsWith('.'))
|
||||
.map(e => ({ name: e.name, path: path.join(reqPath, e.name) }))
|
||||
.sort((a, b) => a.name.localeCompare(b.name));
|
||||
} catch {
|
||||
return res.status(403).json({ error: 'Cannot read directory' });
|
||||
}
|
||||
|
||||
// Compute parent; at a drive root on Windows dirname === reqPath
|
||||
const parent = path.dirname(reqPath);
|
||||
const atRoot = parent === reqPath;
|
||||
|
||||
res.json({ path: reqPath, parent: atRoot ? null : parent, dirs });
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user