80 lines
3.3 KiB
JavaScript
80 lines
3.3 KiB
JavaScript
// Debug
|
|
const { DebugBuilder } = require("../utilities/debugBuilder.js");
|
|
const log = new DebugBuilder("server", "nodesController");
|
|
// Utilities
|
|
const mysqlHander = require("../utilities/mysqlHandler");
|
|
const utils = require("../utilities/utils");
|
|
|
|
exports.listAllNodes = async (req, res) => {
|
|
mysqlHander.getAllNodes((allNodes) => {
|
|
res.status(200).json({
|
|
"nodes_online": allNodes
|
|
});
|
|
});
|
|
}
|
|
|
|
// Add a new node to the
|
|
exports.newNode = async (req, res) => {
|
|
if (!req.body.name) return res.send(400)
|
|
|
|
try {
|
|
// Try to add the new user with defaults if missing options
|
|
mysqlHander.addNewNode({
|
|
'name': req.body.name,
|
|
'ip': req.body.ip ?? null,
|
|
'port': req.body.port ?? null,
|
|
'location': req.body.location ?? null,
|
|
'nearbySystems': req.body.nearbySystems ?? null,
|
|
'online': req.body.online ?? 0
|
|
}, (queryResults) => {
|
|
// Send back a success if the user has been added and the ID for the client to keep track of
|
|
res.status(202).json({"nodeId": queryResults.insertId});
|
|
})
|
|
}
|
|
catch (err) {
|
|
// Catch any errors
|
|
if (err === "No name provided") {
|
|
return res.sendStatus(400);
|
|
}
|
|
else log.ERROR(err)
|
|
return res.sendStatus(500);
|
|
}
|
|
}
|
|
|
|
// Get the known info for the node specified
|
|
exports.getNodeInfo = async (req, res) => {
|
|
if (!req.query.id) return res.status(400).json("No id specified");
|
|
mysqlHander.getNodeInfoFromId(req.query.id, (nodeInfo) => {
|
|
res.status(200).json(nodeInfo);
|
|
})
|
|
}
|
|
|
|
// Updates the information received from the client based on ID
|
|
exports.nodeCheckIn = async (req, res) => {
|
|
if (!req.body.id) return res.status(400).json("No id specified");
|
|
mysqlHander.getNodeInfoFromId(req.body.id, (nodeInfo) => {
|
|
let nodeObject = {};
|
|
// Convert the DB systems buffer to a JSON object to be worked with
|
|
nodeInfo.nearbySystems = utils.BufferToJson(nodeInfo.nearbySystems)
|
|
// Convert the online status to a boolean to be worked with
|
|
nodeInfo.online = nodeInfo.online !== 0;
|
|
|
|
if (req.body.name && req.body.name !== nodeInfo.name) nodeObject.name = req.body.name
|
|
if (req.body.ip && req.body.ip !== nodeInfo.ip) nodeObject.ip = req.body.ip
|
|
if (req.body.port && req.body.port !== nodeInfo.port) nodeObject.port = req.body.port
|
|
if (req.body.location && req.body.location !== nodeInfo.location) nodeObject.location = req.body.location
|
|
if (req.body.nearbySystems && JSON.stringify(req.body.nearbySystems) !== JSON.stringify(nodeInfo.nearbySystems)) nodeObject.nearbySystems = req.body.nearbySystems
|
|
if (req.body.online && req.body.online !== nodeInfo.online) nodeObject.online = req.body.online
|
|
|
|
// If no changes are made tell the client
|
|
if (Object.keys(nodeObject).length === 0) return res.status(200).json("No keys updated");
|
|
|
|
log.INFO("Updating the following keys for ID: ", req.body.id, nodeObject);
|
|
// Adding the ID key to the body so that the client can double-check their ID
|
|
nodeObject.id = req.body.id;
|
|
mysqlHander.updateNodeInfo(nodeObject, () => {
|
|
return res.status(202).json({"updatedKeys": nodeObject});
|
|
})
|
|
})
|
|
|
|
} |