File Explorer

/proc/thread-self/root/proc/thread-self/root/proc/thread-self/root/var/task/_ssr

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

router-C56V3RPr.mjs5.8 KB · 222 lines
import { c as HeadContent, f as createFileRoute, g as require_jsx_runtime, p as createRootRoute, s as Scripts, u as createRouter } from "../_libs/@tanstack/react-router+[...].mjs";import { t as Route$3 } from "./routes-mG7B1J6r.mjs";import { promises } from "node:fs";import * as path from "node:path";//#region node_modules/.nitro/vite/services/ssr/assets/router-C56V3RPr.jsvar import_jsx_runtime = require_jsx_runtime();var styles_default = "/assets/styles-D_f87ztO.css";var SITE_TITLE = "File Explorer";var SITE_DESCRIPTION = "A fast, mobile-friendly explorer for browsing files and folders across the filesystem.";var Route$2 = createRootRoute({	head: () => ({		meta: [			{ charSet: "utf-8" },			{				name: "viewport",				content: "width=device-width, initial-scale=1, viewport-fit=cover"			},			{				name: "robots",				content: "noindex, nofollow"			},			{ title: SITE_TITLE },			{				name: "description",				content: SITE_DESCRIPTION			},			{				name: "theme-color",				content: "#05070a"			},			{				property: "og:title",				content: SITE_TITLE			},			{				property: "og:description",				content: SITE_DESCRIPTION			},			{				property: "og:type",				content: "website"			},			{				property: "og:image",				content: "/api/og"			},			{				name: "twitter:card",				content: "summary_large_image"			},			{				name: "twitter:title",				content: SITE_TITLE			},			{				name: "twitter:description",				content: SITE_DESCRIPTION			},			{				name: "twitter:image",				content: "/api/og"			}		],		links: [			{				rel: "stylesheet",				href: styles_default			},			{				rel: "icon",				href: "/favicon.svg",				type: "image/svg+xml"			},			{				rel: "icon",				href: "/favicon.ico",				sizes: "any"			}		]	}),	shellComponent: RootDocument});function RootDocument({ children }) {	return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("html", {		lang: "en",		className: "dark",		children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("head", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HeadContent, {}) }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("body", { children: [children, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Scripts, {})] })]	});}var ROOT = "/";var MAX_FILE_BYTES = 50 * 1024 * 1024;function resolveSafe(relPath) {	const cleaned = (relPath ?? "").replace(/^\/+/, "").replace(/\\/g, "/");	if (cleaned.includes("\0")) throw new Error("Invalid path");	const abs = path.resolve(ROOT, cleaned);	const rootResolved = path.resolve(ROOT);	if (abs !== rootResolved && !abs.startsWith(rootResolved)) throw new Error("Path escapes allowed root");	return abs;}function toRel(abs) {	return path.relative(path.resolve(ROOT), abs).split(path.sep).join("/");}function safeName(name) {	const out = (path.basename(name || "").replace(/\\/g, "/").split("/").pop() || "").replace(/[\u0000-\u001f]/g, "").replace(/^\.+/, (m) => m.slice(0, 0) + m).trim().replace(/[/]/g, "_");	if (!out || out === "." || out === "..") return "upload";	return out.slice(0, 255);}async function uniqueName(dirAbs, name) {	const ext = path.extname(name);	const stem = name.slice(0, name.length - ext.length);	let candidate = name;	let n = 1;	while (n < 1e3) try {		await promises.access(path.join(dirAbs, candidate));		candidate = `${stem} (${n})${ext}`;		n++;	} catch {		return candidate;	}	return `${stem} (${Date.now()})${ext}`;}var Route$1 = createFileRoute("/api/upload")({ server: { handlers: { POST: async ({ request }) => {	let form;	try {		form = await request.formData();	} catch {		return Response.json({			ok: false,			error: "Invalid upload request"		}, { status: 400 });	}	const dirInput = String(form.get("dir") ?? "");	let dirAbs;	let dirRel;	try {		dirAbs = resolveSafe(dirInput);		if (!(await promises.stat(dirAbs)).isDirectory()) dirAbs = path.dirname(dirAbs);		dirRel = toRel(dirAbs);	} catch {		return Response.json({			ok: false,			error: "Target folder isn't available"		}, { status: 400 });	}	const files = form.getAll("file").filter((f) => f instanceof File);	if (files.length === 0) return Response.json({		ok: false,		error: "No files were provided"	}, { status: 400 });	const saved = [];	const failed = [];	for (const file of files) {		const original = safeName(file.name);		try {			if (file.size > MAX_FILE_BYTES) {				failed.push({					name: original,					error: "Too large (over 50 MB)"				});				continue;			}			const name = await uniqueName(dirAbs, original);			const buf = Buffer.from(await file.arrayBuffer());			const dest = path.join(dirAbs, name);			await promises.writeFile(dest, buf);			const st = await promises.stat(dest);			saved.push({				name,				relPath: toRel(dest),				size: st.size			});		} catch (e) {			const code = e?.code;			const msg = code === "EACCES" || code === "EPERM" ? "Permission denied" : code === "ENOSPC" ? "No space left" : "Could not write file";			failed.push({				name: original,				error: msg			});		}	}	return Response.json({		ok: failed.length === 0,		dir: dirRel,		saved,		failed	});} } } });var Route = createFileRoute("/api/og")({ server: { handlers: { GET: async ({ request }) => {	const fallback = new URL("/og.jpg", request.url).toString();	return Response.redirect(fallback, 302);} } } });var IndexRoute = Route$3.update({	id: "/",	path: "/",	getParentRoute: () => Route$2});var ApiUploadRoute = Route$1.update({	id: "/api/upload",	path: "/api/upload",	getParentRoute: () => Route$2});var rootRouteChildren = {	IndexRoute,	ApiOgRoute: Route.update({		id: "/api/og",		path: "/api/og",		getParentRoute: () => Route$2	}),	ApiUploadRoute};var routeTree = Route$2._addFileChildren(rootRouteChildren)._addFileTypes();function getRouter() {	return createRouter({		routeTree,		scrollRestoration: true,		defaultPreload: "intent",		defaultPreloadStaleTime: 0	});}//#endregionexport { getRouter };