Created the /server route
This commit is contained in:
parent
126861cdaf
commit
36a9dc3408
108
routes/server.js
Normal file
108
routes/server.js
Normal file
@ -0,0 +1,108 @@
|
||||
const app = require('express').Router();
|
||||
const {validateSchema} = require('../util/validate');
|
||||
const {isAuthenticatedUser} = require('../middlewares/authenticate');
|
||||
const {valLinkServer, installAddon, statusResponse, uninstallAddon} = require('../validations/server');
|
||||
const {linkServer, getServer, regenToken, listServer} = require('../controller/link');
|
||||
const {broadcastToServer, closeServerConnectionById, getInformationFromServer} = require('../server/socket');
|
||||
const {getAddonByName} = require('../controller/addon');
|
||||
|
||||
// Validates the server by the express request
|
||||
const validateServer = async (req, res, mustBeOnline = false) => {
|
||||
const server = await getServer(req.params.serverId);
|
||||
if (!server) return res.status(404).json({message: "The provided server does not exist"});
|
||||
if (!server.user_id.equals(req.user._id)) return res.status(404).json({message: "The provided server does not exist"});
|
||||
if (mustBeOnline && !server.online) return res.status(504).json({message: "The provided server is not online"});
|
||||
return server;
|
||||
}
|
||||
|
||||
// Links & creates a new server
|
||||
app.post("/link", isAuthenticatedUser, async (req, res) => {
|
||||
const validation = await validateSchema(valLinkServer, req.body);
|
||||
if (validation) return res.status(400).json({message: validation});
|
||||
|
||||
const token = await linkServer(req.user._id, req.body.name);
|
||||
if (!token) return res.status(500).json({message: "An internal error occurred"});
|
||||
|
||||
res.status(201).json({message: "Successfully created the server", token});
|
||||
});
|
||||
|
||||
// Unlinks & deletes a new server
|
||||
app.post("/:serverId/unlink", isAuthenticatedUser, async (req, res) => {
|
||||
const server = await validateServer(req, res);
|
||||
if (!server._id) return;
|
||||
|
||||
await server.delete();
|
||||
await closeServerConnectionById(req.params.serverId);
|
||||
res.json({message: "Server successfully unlinked"});
|
||||
});
|
||||
|
||||
// Regenerates the token of a server
|
||||
app.post("/:serverId/regenerate", isAuthenticatedUser, async (req, res) => {
|
||||
const server = await validateServer(req, res);
|
||||
if (!server._id) return;
|
||||
|
||||
const token = await regenToken(req.params.serverId);
|
||||
if (!token) return res.status(404).json({message: "The provided server does not exist"});
|
||||
|
||||
res.json({message: "Successfully regenerated the token", token});
|
||||
});
|
||||
|
||||
// Lists all registered servers by the client
|
||||
app.get("/list", isAuthenticatedUser, async (req, res) => {
|
||||
res.json(await listServer(req.user._id));
|
||||
});
|
||||
|
||||
/*
|
||||
The following routes need to communicate with the server directly
|
||||
*/
|
||||
|
||||
// Installs an addon the server
|
||||
app.post("/:serverId/install", isAuthenticatedUser, async (req, res) => {
|
||||
const validation = await validateSchema(installAddon, req.body);
|
||||
if (validation) return res.status(400).json({message: validation});
|
||||
|
||||
const addon = await getAddonByName(req.body.author, req.body.addon);
|
||||
if (addon === null) return res.status(404).json({message: "The provided addon does not exist"});
|
||||
|
||||
const server = await validateServer(req, res, true);
|
||||
if (!server._id) return;
|
||||
|
||||
broadcastToServer(req.params.serverId, 10, req.body);
|
||||
res.json({message: "The server now installs the provided addon"});
|
||||
});
|
||||
|
||||
// Checks if a specific addon is installed on the server
|
||||
app.get("/:serverId/status", isAuthenticatedUser, async (req, res) => {
|
||||
const validation = await validateSchema(installAddon, req.body);
|
||||
if (validation) return res.status(400).json({message: validation});
|
||||
|
||||
const addon = await getAddonByName(req.body.author, req.body.addon);
|
||||
if (addon === null) return res.status(404).json({message: "The provided addon does not exist"});
|
||||
|
||||
const server = await validateServer(req, res, true);
|
||||
if (!server._id) return;
|
||||
|
||||
const response = await getInformationFromServer(req.params.serverId, 7, req.body);
|
||||
if (await validateSchema(statusResponse, response)) return res.status(500).json({message: "The server sent an incorrect response"});
|
||||
|
||||
res.json({installed: response.status});
|
||||
});
|
||||
|
||||
// Uninstalls an addon from the server
|
||||
app.post("/:serverId/uninstall", isAuthenticatedUser, async (req, res) => {
|
||||
if (!req.body.keepFiles) req.body.keepFiles = true;
|
||||
|
||||
const validation = await validateSchema(uninstallAddon, req.body);
|
||||
if (validation) return res.status(400).json({message: validation});
|
||||
|
||||
const addon = await getAddonByName(req.body.author, req.body.addon);
|
||||
if (addon === null) return res.status(404).json({message: "The provided addon does not exist"});
|
||||
|
||||
const server = await validateServer(req, res, true);
|
||||
if (!server._id) return;
|
||||
|
||||
broadcastToServer(req.params.serverId, 11, req.body);
|
||||
res.json({message: "The server now uninstalls the provided addon"});
|
||||
});
|
||||
|
||||
module.exports = app;
|
Loading…
x
Reference in New Issue
Block a user