mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-01 20:23:36 +00:00
- Removed unused Electron API methods and simplified the main process. - Introduced a new workspace picker modal for improved project selection. - Enhanced error handling for authentication issues across various components. - Updated UI styles for dark mode support and added new CSS variables. - Refactored session management to utilize a centralized API access method. - Added server routes for workspace management, including directory listing and configuration checks.
114 lines
2.9 KiB
TypeScript
114 lines
2.9 KiB
TypeScript
/**
|
|
* Workspace routes
|
|
* Provides API endpoints for workspace directory management
|
|
*/
|
|
|
|
import { Router, type Request, type Response } from "express";
|
|
import fs from "fs/promises";
|
|
import path from "path";
|
|
import { addAllowedPath } from "../lib/security.js";
|
|
|
|
export function createWorkspaceRoutes(): Router {
|
|
const router = Router();
|
|
|
|
// Get workspace configuration status
|
|
router.get("/config", async (_req: Request, res: Response) => {
|
|
try {
|
|
const workspaceDir = process.env.WORKSPACE_DIR;
|
|
|
|
if (!workspaceDir) {
|
|
res.json({
|
|
success: true,
|
|
configured: false,
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Check if the directory exists
|
|
try {
|
|
const stats = await fs.stat(workspaceDir);
|
|
if (!stats.isDirectory()) {
|
|
res.json({
|
|
success: true,
|
|
configured: false,
|
|
error: "WORKSPACE_DIR is not a valid directory",
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Add workspace dir to allowed paths
|
|
addAllowedPath(workspaceDir);
|
|
|
|
res.json({
|
|
success: true,
|
|
configured: true,
|
|
workspaceDir,
|
|
});
|
|
} catch {
|
|
res.json({
|
|
success: true,
|
|
configured: false,
|
|
error: "WORKSPACE_DIR path does not exist",
|
|
});
|
|
}
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
res.status(500).json({ success: false, error: message });
|
|
}
|
|
});
|
|
|
|
// List directories in workspace
|
|
router.get("/directories", async (_req: Request, res: Response) => {
|
|
try {
|
|
const workspaceDir = process.env.WORKSPACE_DIR;
|
|
|
|
if (!workspaceDir) {
|
|
res.status(400).json({
|
|
success: false,
|
|
error: "WORKSPACE_DIR is not configured",
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Check if directory exists
|
|
try {
|
|
await fs.stat(workspaceDir);
|
|
} catch {
|
|
res.status(400).json({
|
|
success: false,
|
|
error: "WORKSPACE_DIR path does not exist",
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Add workspace dir to allowed paths
|
|
addAllowedPath(workspaceDir);
|
|
|
|
// Read directory contents
|
|
const entries = await fs.readdir(workspaceDir, { withFileTypes: true });
|
|
|
|
// Filter to directories only and map to result format
|
|
const directories = entries
|
|
.filter((entry) => entry.isDirectory() && !entry.name.startsWith("."))
|
|
.map((entry) => ({
|
|
name: entry.name,
|
|
path: path.join(workspaceDir, entry.name),
|
|
}))
|
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
|
|
// Add each directory to allowed paths
|
|
directories.forEach((dir) => addAllowedPath(dir.path));
|
|
|
|
res.json({
|
|
success: true,
|
|
directories,
|
|
});
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
res.status(500).json({ success: false, error: message });
|
|
}
|
|
});
|
|
|
|
return router;
|
|
}
|