// 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}); }) }) }