Reaperxxxx commited on
Commit
becc448
·
verified ·
1 Parent(s): f3f2ec1

Update backend/server.js

Browse files
Files changed (1) hide show
  1. backend/server.js +50 -42
backend/server.js CHANGED
@@ -5,40 +5,43 @@ const path = require("path");
5
  const { exec } = require("child_process");
6
  const fs = require("fs-extra");
7
  const { handleTerminal } = require("./terminalManager");
8
- const app = express();
9
  const {
10
  isValidDirectoryName,
11
  createUserDirectory,
12
- deleteUserDirectory, // Add this
13
  logMessage
14
  } = require("./utils");
15
 
 
 
 
16
  app.use(bodyParser.json());
17
  app.use(cors({
18
- origin: "*", // Consider limiting this for security
19
  methods: ["GET", "POST"],
20
  }));
21
  app.use(express.static(path.join(__dirname, "../frontend")));
22
 
23
  const userDirectories = "./userDirectories";
24
 
25
- // Ensure user directories exist
26
  if (!fs.existsSync(userDirectories)) {
27
  fs.mkdirSync(userDirectories);
28
  }
29
 
30
- const runningProcesses = new Map(); // Tracks active processes by directory name
31
 
 
32
  app.get("/", (req, res) => {
33
  res.sendFile(path.join(__dirname, "../frontend/index.html"));
34
  });
35
 
36
- // Start Directory
37
  app.post("/start", async (req, res) => {
38
  const { directoryName, password, repoURL } = req.body;
39
 
40
  try {
41
- // Validate inputs
42
  if (!directoryName || !password || !repoURL) {
43
  return res.status(400).send("Invalid inputs");
44
  }
@@ -47,69 +50,74 @@ app.post("/start", async (req, res) => {
47
  return res.status(400).send("Invalid directory name format");
48
  }
49
 
50
- // Check if a process is already running for this directory
51
  if (runningProcesses.has(directoryName)) {
52
  return res.status(400).send("A process is already running for this directory.");
53
  }
54
 
55
  const userDir = path.join(userDirectories, directoryName);
56
 
57
- // Create user directory and store hashed password
58
-
59
- try {
60
- createUserDirectory(userDirectories, directoryName, password);
61
- } catch (err) {
62
- logMessage(`Failed to create directory: ${err.message}`);
63
  return res.status(500).send("Failed to create user directory");
64
- }
65
 
66
- // Clone GitHub repo into the user directory
67
- exec(`git clone ${repoURL} ${userDir}`, async (cloneError) => {
68
  if (cloneError) {
69
  logMessage(`Error cloning repo: ${cloneError.message}`);
70
- return res.status(500).send("Error cloning the repository");
 
71
  }
72
 
73
- // Install dependencies using global `node_modules`
74
- exec(`git clone ${repoURL} ${userDir}`, (cloneError, stdout, stderr) => {
75
- if (cloneError) {
76
- logMessage(`Error cloning repo: ${cloneError.message}`);
77
- logMessage(`STDERR: ${stderr}`);
78
- return res.status(500).send(`Error cloning repository: ${stderr}`);
79
- }
80
- });
81
 
82
- // Start the user terminal process
83
- handleTerminal(directoryName, userDir);
 
 
 
 
 
84
 
85
- // Track the running process
86
- runningProcesses.set(directoryName, true);
87
 
88
- logMessage(`Successfully initialized directory: ${directoryName}`);
89
- res.send("Directory and terminal started successfully");
90
- }
91
- );
 
 
92
  });
 
93
  } catch (error) {
94
  logMessage(`Error: ${error.message}`);
95
- res.status(500).send(error.message);
96
  }
97
  });
98
 
99
- // Corrected Delete Directory Route
100
  app.post("/delete", async (req, res) => {
101
  const { directoryName, password } = req.body;
102
 
103
  try {
 
 
 
 
104
  if (runningProcesses.has(directoryName)) {
105
- handleTerminal(directoryName, null, true);
106
- runningProcesses.delete(directoryName);
107
  }
108
 
109
- deleteUserDirectory(userDirectories, directoryName, password); // Fixed here
 
110
  res.send("Directory deleted successfully");
111
  } catch (error) {
112
- logMessage(`Error: ${error.message}`); // Fixed here
113
  res.status(500).send(error.message);
114
  }
115
  });
@@ -127,11 +135,11 @@ app.post("/stop", (req, res) => {
127
  }
128
 
129
  handleTerminal(directoryName, null, true); // Stop terminal
130
-
131
- // Remove the directory from running processes
132
  runningProcesses.delete(directoryName);
133
 
 
134
  res.send("Terminal stopped successfully");
135
  });
136
 
 
137
  app.listen(7860, () => console.log("Server is running on port 7860"));
 
5
  const { exec } = require("child_process");
6
  const fs = require("fs-extra");
7
  const { handleTerminal } = require("./terminalManager");
 
8
  const {
9
  isValidDirectoryName,
10
  createUserDirectory,
11
+ deleteUserDirectory,
12
  logMessage
13
  } = require("./utils");
14
 
15
+ const app = express();
16
+
17
+ // Middleware
18
  app.use(bodyParser.json());
19
  app.use(cors({
20
+ origin: "*", // For production, replace with specific allowed origins
21
  methods: ["GET", "POST"],
22
  }));
23
  app.use(express.static(path.join(__dirname, "../frontend")));
24
 
25
  const userDirectories = "./userDirectories";
26
 
27
+ // Ensure userDirectories exists
28
  if (!fs.existsSync(userDirectories)) {
29
  fs.mkdirSync(userDirectories);
30
  }
31
 
32
+ const runningProcesses = new Map(); // Tracks running processes
33
 
34
+ // Root Route
35
  app.get("/", (req, res) => {
36
  res.sendFile(path.join(__dirname, "../frontend/index.html"));
37
  });
38
 
39
+ // Start Directory and Terminal
40
  app.post("/start", async (req, res) => {
41
  const { directoryName, password, repoURL } = req.body;
42
 
43
  try {
44
+ // Validate input
45
  if (!directoryName || !password || !repoURL) {
46
  return res.status(400).send("Invalid inputs");
47
  }
 
50
  return res.status(400).send("Invalid directory name format");
51
  }
52
 
 
53
  if (runningProcesses.has(directoryName)) {
54
  return res.status(400).send("A process is already running for this directory.");
55
  }
56
 
57
  const userDir = path.join(userDirectories, directoryName);
58
 
59
+ // Create user directory
60
+ try {
61
+ createUserDirectory(userDirectories, directoryName, password);
62
+ } catch (err) {
63
+ logMessage(`Failed to create directory: ${err.message}`);
 
64
  return res.status(500).send("Failed to create user directory");
65
+ }
66
 
67
+ // Clone GitHub repository
68
+ exec(`git clone ${repoURL} ${userDir}`, (cloneError, stdout, stderr) => {
69
  if (cloneError) {
70
  logMessage(`Error cloning repo: ${cloneError.message}`);
71
+ logMessage(`STDERR: ${stderr}`);
72
+ return res.status(500).send(`Error cloning repository: ${stderr}`);
73
  }
74
 
75
+ logMessage(`Repository cloned successfully for ${directoryName}`);
 
 
 
 
 
 
 
76
 
77
+ // Install dependencies
78
+ exec(`yarn install --cwd ${userDir}`, (installError, installStdout, installStderr) => {
79
+ if (installError) {
80
+ logMessage(`Error installing dependencies: ${installError.message}`);
81
+ logMessage(`STDERR: ${installStderr}`);
82
+ return res.status(500).send(`Error installing dependencies: ${installStderr}`);
83
+ }
84
 
85
+ // Start the terminal process
86
+ handleTerminal(directoryName, userDir);
87
 
88
+ // Track the running process
89
+ runningProcesses.set(directoryName, true);
90
+
91
+ logMessage(`Successfully initialized directory: ${directoryName}`);
92
+ res.send("Directory and terminal started successfully");
93
+ });
94
  });
95
+
96
  } catch (error) {
97
  logMessage(`Error: ${error.message}`);
98
+ res.status(500).send("Internal Server Error");
99
  }
100
  });
101
 
102
+ // Delete Directory
103
  app.post("/delete", async (req, res) => {
104
  const { directoryName, password } = req.body;
105
 
106
  try {
107
+ if (!directoryName || !password) {
108
+ return res.status(400).send("Invalid inputs");
109
+ }
110
+
111
  if (runningProcesses.has(directoryName)) {
112
+ handleTerminal(directoryName, null, true); // Stop terminal
113
+ runningProcesses.delete(directoryName);
114
  }
115
 
116
+ deleteUserDirectory(userDirectories, directoryName, password);
117
+ logMessage(`Directory ${directoryName} deleted successfully`);
118
  res.send("Directory deleted successfully");
119
  } catch (error) {
120
+ logMessage(`Error deleting directory: ${error.message}`);
121
  res.status(500).send(error.message);
122
  }
123
  });
 
135
  }
136
 
137
  handleTerminal(directoryName, null, true); // Stop terminal
 
 
138
  runningProcesses.delete(directoryName);
139
 
140
+ logMessage(`Terminal for ${directoryName} stopped`);
141
  res.send("Terminal stopped successfully");
142
  });
143
 
144
+ // Server Listener
145
  app.listen(7860, () => console.log("Server is running on port 7860"));