import { createServerFolder, getServerItem, listServerFiles, removeServerItem, uploadServerItem, moveServerItems, } from "../k8s/server-files.js"; import { sendError } from "../util/ExpressClientError.js"; import { checkAuthorization } from "../database/queries/server-queries.js"; export async function listFiles(req, res) { const serverSpec = req.body; if (!serverSpec) return res.sendStatus(400); if (!serverSpec.id) return res.status(400).send("Server id missing!"); const authorized = await checkAuthorization(serverSpec.id, req.cairoId); if (!authorized) return res.sendStatus(403); listServerFiles(serverSpec) .then((f) => { const fileData = f.map((fi, i) => ({ name: fi.name, isDir: fi.type === 2, id: `${fi.name}-${i}`, isHidden: fi.name.startsWith("."), isSymLink: !!fi.link, size: fi.size, })); res.json(fileData); }) .catch(sendError(res)); } export async function createFolder(req, res) { const serverSpec = req.body; if (!serverSpec) return res.sendStatus(400); if (!serverSpec.id) return res.status(400).send("Server id missing!"); if (!serverSpec.path) return res.status(400).send("Path required!"); const authorized = await checkAuthorization(serverSpec.id, req.cairoId); if (!authorized) return res.sendStatus(403); createServerFolder(serverSpec) .then(() => res.sendStatus(200)) .catch(sendError(res)); } export async function deleteItem(req, res) { const serverSpec = req.body; if (!serverSpec) return res.sendStatus(400); if (!serverSpec.id) return res.status(400).send("Server id missing!"); if (!serverSpec.path) return res.status(400).send("Path required!"); if (serverSpec.isDir === undefined || serverSpec.isDir === null) return res.status(400).send("IsDIr required!"); const authorized = await checkAuthorization(serverSpec.id, req.cairoId); if (!authorized) return res.sendStatus(403); removeServerItem(serverSpec) .then(() => res.sendStatus(200)) .catch(sendError(res)); } export async function uploadItem(req, res) { const serverSpec = req.body; if (!serverSpec.id) return res.status(400).send("Server id missing!"); if (!serverSpec.path) return res.status(400).send("Path required!"); const authorized = await checkAuthorization(serverSpec.id, req.cairoId); if (!authorized) return res.sendStatus(403); uploadServerItem(serverSpec, req.file) .then(() => res.sendStatus(200)) .catch(sendError(res)); } export async function getItem(req, res) { const serverSpec = req.body; if (!serverSpec.id) return res.status(400).send("Server id missing!"); if (!serverSpec.path) return res.status(400).send("Path required!"); const authorized = await checkAuthorization(serverSpec.id, req.cairoId); if (!authorized) return res.sendStatus(403); getServerItem(serverSpec, res) .then(({ ds, ftpTransfer }) => { ds.pipe(res).on("error", sendError(res)); return ftpTransfer; }) .catch(sendError(res)); } export async function moveItems(req, res) { const serverSpec = req.body; if (!serverSpec.id) return res.status(400).send("Server id missing!"); if (!serverSpec.destination) return res.status(400).send("Destination required!"); if (!serverSpec.origin) return res.status(400).send("Origin required!"); if (!serverSpec.files || !Array.isArray(serverSpec.files)) return res.status(400).send("Files required!"); const authorized = await checkAuthorization(serverSpec.id, req.cairoId); if (!authorized) return res.sendStatus(403); moveServerItems(serverSpec) .then(() => res.sendStatus(200)) .catch(sendError(res)); }