summary refs log tree commit diff
diff options
context:
space:
mode:
authorErkin Alp Güney <erkinalp9035@gmail.com>2021-12-26 17:49:15 +0300
committerGitHub <noreply@github.com>2021-12-26 17:49:15 +0300
commit28f25c3593f4a2ceb39c1d28a5c09dba316a96c1 (patch)
tree25d4709a3882fd322cec173b6afa7e2209e88ee7
parentMerge pull request #556 from Thesourtimes/master (diff)
parentUpdate api/src/routes/stop.ts (diff)
downloadserver-28f25c3593f4a2ceb39c1d28a5c09dba316a96c1.tar.xz
Initial implementation of the remote server shutdown route
-rw-r--r--api/src/routes/stop.ts25
-rw-r--r--bundle/src/Server.ts8
2 files changed, 33 insertions, 0 deletions
diff --git a/api/src/routes/stop.ts b/api/src/routes/stop.ts
new file mode 100644
index 00000000..c6a3de50
--- /dev/null
+++ b/api/src/routes/stop.ts
@@ -0,0 +1,25 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { User } from "@fosscord/util";
+
+const router: Router = Router();
+
+router.post("/", route({}), async (req: Request, res: Response) => {
+	//TODO: have an "OPERATOR" platform permission implemented for this API route
+	const user = await User.findOneOrFail({ where: { id: req.user_id }, select: ["flags"] });
+	if(user.flags == '4096') {
+		console.log("user that POSTed to the API was ALLOWED");
+		console.log(user.flags);
+		res.sendStatus(200)
+		process.kill(process.pid, 'SIGTERM')
+	}
+	else {
+		console.log("operation failed");
+		console.log(user.flags);
+		res.sendStatus(403)
+	}
+});
+
+export default router;
+
+//THIS API CAN ONLY BE USED BY USERS WITH THE 'SYSTEM' FLAG ONLY IF ANY OTHER FLAGS ARE ADDED THE REQUEST WILL RETURN 403 'FORBIDDEN'
diff --git a/bundle/src/Server.ts b/bundle/src/Server.ts
index e461ec5f..c5da5fc9 100644
--- a/bundle/src/Server.ts
+++ b/bundle/src/Server.ts
@@ -22,6 +22,14 @@ const cdn = new CDNServer({ server, port, production, app });
 // @ts-ignore
 const gateway = new Gateway.Server({ server, port, production });
 
+//this is what has been added for the /stop API route
+process.on('SIGTERM', () => {
+	server.close(() => {
+		console.log("Stop API has been successfully POSTed, SIGTERM sent")
+	})
+})
+//this is what has been added for the /stop API route
+
 async function main() {
 	server.listen(port);
 	await initDatabase();