From 40f36270aa5bbc54a5b7ea0923758da065ef20fd Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Tue, 12 Sep 2023 19:16:19 +0000 Subject: [PATCH] simplify requestPVE args --- src/package.js | 9 ++++++++- src/pve.js | 41 +++++++++++++++++++------------------- src/routes/cluster.js | 8 ++++---- src/routes/cluster/disk.js | 20 +++++++++---------- src/routes/cluster/net.js | 12 +++++------ src/routes/cluster/pci.js | 20 +++++++++---------- src/routes/proxmox.js | 4 ++-- src/routes/sync.js | 6 +++--- src/routes/user.js | 2 +- src/utils.js | 4 ++-- 10 files changed, 66 insertions(+), 60 deletions(-) diff --git a/src/package.js b/src/package.js index 0fc84d3..fa00582 100644 --- a/src/package.js +++ b/src/package.js @@ -1,4 +1,11 @@ import { readFileSync } from "fs"; +import { exit } from "process"; export default (path) => { - return JSON.parse(readFileSync(path)); + try { + return JSON.parse(readFileSync(path)); + } + catch (e) { + console.log(`Error: ${path} was not found.`); + exit(1); + } }; diff --git a/src/pve.js b/src/pve.js index 9c3e8f1..a24c341 100644 --- a/src/pve.js +++ b/src/pve.js @@ -4,12 +4,11 @@ import axios from "axios"; * Send HTTP request to proxmox API. Allows requests to be made with user cookie credentials or an API token for controlled priviledge elevation. * @param {string} path HTTP path, prepended with the proxmox API base path. * @param {string} method HTTP method. - * @param {Object} cookies user cookies for authorization if an API token is not used. Safest option for authentication. + * @param {Object} auth authentication method. Set auth.cookies with user cookies or auth.token with PVE API Token. Optional. * @param {string} body body parameters and data to be sent. Optional. - * @param {string} token proxmox API token to be used for controled priviledge elevation, allows user requests to perform admin actions safely. Optional - * @returns {Object} HTTP response object or HTTP error object + * @returns {Object} HTTP response object or HTTP error object. */ -export async function requestPVE (path, method, cookies, body = null, token = null) { +export async function requestPVE (path, method, auth = null, body = null) { const pveAPI = global.db.pveAPI; const url = `${pveAPI}${path}`; const content = { @@ -21,12 +20,12 @@ export async function requestPVE (path, method, cookies, body = null, token = nu } }; - if (token) { - content.headers.Authorization = `PVEAPIToken=${token.user}@${token.realm}!${token.id}=${token.uuid}`; + if (auth && auth.cookies) { + content.headers.CSRFPreventionToken = auth.cookies.CSRFPreventionToken; + content.headers.Cookie = `PVEAuthCookie=${auth.cookies.PVEAuthCookie}; CSRFPreventionToken=${auth.cookies.CSRFPreventionToken}`; } - else if (cookies) { - content.headers.CSRFPreventionToken = cookies.CSRFPreventionToken; - content.headers.Cookie = `PVEAuthCookie=${cookies.PVEAuthCookie}; CSRFPreventionToken=${cookies.CSRFPreventionToken}`; + else if (auth && auth.token) { + content.headers.Authorization = `PVEAPIToken=${auth.token.user}@${auth.token.realm}!${auth.token.id}=${auth.token.uuid}`; } if (body) { @@ -55,21 +54,21 @@ export async function handleResponse (node, result, res) { const waitFor = delay => new Promise(resolve => setTimeout(resolve, delay)); if (result.data.data && typeof (result.data.data) === "string" && result.data.data.startsWith("UPID:")) { const upid = result.data.data; - let taskStatus = await requestPVE(`/nodes/${node}/tasks/${upid}/status`, "GET", null, null, pveAPIToken); + let taskStatus = await requestPVE(`/nodes/${node}/tasks/${upid}/status`, "GET", { token: pveAPIToken }); while (taskStatus.data.data.status !== "stopped") { await waitFor(1000); - taskStatus = await requestPVE(`/nodes/${node}/tasks/${upid}/status`, "GET", null, null, pveAPIToken); + taskStatus = await requestPVE(`/nodes/${node}/tasks/${upid}/status`, "GET", { token: pveAPIToken }); } if (taskStatus.data.data.exitstatus === "OK") { const result = taskStatus.data.data; - const taskLog = await requestPVE(`/nodes/${node}/tasks/${upid}/log`, "GET", null, null, pveAPIToken); + const taskLog = await requestPVE(`/nodes/${node}/tasks/${upid}/log`, "GET", { token: pveAPIToken }); result.log = taskLog.data.data; res.status(200).send(result); res.end(); } else { const result = taskStatus.data.data; - const taskLog = await requestPVE(`/nodes/${node}/tasks/${upid}/log`, "GET", null, null, pveAPIToken); + const taskLog = await requestPVE(`/nodes/${node}/tasks/${upid}/log`, "GET", { token: pveAPIToken }); result.log = taskLog.data.data; res.status(500).send(result); res.end(); @@ -88,7 +87,7 @@ export async function handleResponse (node, result, res) { * @returns {Object} k-v pairs of resource name and used amounts */ export async function getUsedResources (req, resourceMeta) { - const response = await requestPVE("/cluster/resources", "GET", req.cookies); + const response = await requestPVE("/cluster/resources", "GET", { cookies: req.cookies }); const used = {}; const diskprefixes = []; for (const resourceName of Object.keys(resourceMeta)) { @@ -107,7 +106,7 @@ export async function getUsedResources (req, resourceMeta) { } for (const instance of response.data.data) { if (instance.type === "lxc" || instance.type === "qemu") { - let config = await requestPVE(`/nodes/${instance.node}/${instance.type}/${instance.vmid}/config`, "GET", req.cookies); + let config = await requestPVE(`/nodes/${instance.node}/${instance.type}/${instance.vmid}/config`, "GET", { cookies: req.cookies }); config = config.data.data; for (const key of Object.keys(config)) { if (Object.keys(used).includes(key) && resourceMeta[key].type === "numeric") { @@ -145,10 +144,10 @@ export async function getUsedResources (req, resourceMeta) { export async function getDiskInfo (node, type, vmid, disk) { const pveAPIToken = global.db.pveAPIToken; try { - const config = await requestPVE(`/nodes/${node}/${type}/${vmid}/config`, "GET", null, null, pveAPIToken); + const config = await requestPVE(`/nodes/${node}/${type}/${vmid}/config`, "GET", { token: pveAPIToken }); const storageID = config.data.data[disk].split(":")[0]; const volID = config.data.data[disk].split(",")[0]; - const volInfo = await requestPVE(`/nodes/${node}/storage/${storageID}/content/${volID}`, "GET", null, null, pveAPIToken); + const volInfo = await requestPVE(`/nodes/${node}/storage/${storageID}/content/${volID}`, "GET", { token: pveAPIToken }); volInfo.data.data.storage = storageID; return volInfo.data.data; } @@ -168,7 +167,7 @@ export async function getDiskInfo (node, type, vmid, disk) { export async function getDeviceInfo (node, type, vmid, qid) { const pveAPIToken = global.db.pveAPIToken; try { - const result = (await requestPVE(`/nodes/${node}/hardware/pci`, "GET", null, null, pveAPIToken)).data.data; + const result = (await requestPVE(`/nodes/${node}/hardware/pci`, "GET", { token: pveAPIToken })).data.data; const deviceData = []; result.forEach((element) => { if (element.id.startsWith(qid)) { @@ -196,11 +195,11 @@ export async function getDeviceInfo (node, type, vmid, qid) { export async function getNodeAvailDevices (node, cookies) { const pveAPIToken = global.db.pveAPIToken; // get node pci devices - let nodeAvailPci = (await requestPVE(`/nodes/${node}/hardware/pci`, "GET", cookies, null, pveAPIToken)).data.data; + let nodeAvailPci = (await requestPVE(`/nodes/${node}/hardware/pci`, "GET", { token: pveAPIToken })).data.data; // for each node container, get its config and remove devices which are already used - const vms = (await requestPVE(`/nodes/${node}/qemu`, "GET", cookies, null, pveAPIToken)).data.data; + const vms = (await requestPVE(`/nodes/${node}/qemu`, "GET", { token: pveAPIToken })).data.data; for (const vm of vms) { - const config = (await requestPVE(`/nodes/${node}/qemu/${vm.vmid}/config`, "GET", cookies, null, pveAPIToken)).data.data; + const config = (await requestPVE(`/nodes/${node}/qemu/${vm.vmid}/config`, "GET", { token: pveAPIToken })).data.data; Object.keys(config).forEach((key) => { if (key.startsWith("hostpci")) { const deviceID = config[key].split(",")[0]; diff --git a/src/routes/cluster.js b/src/routes/cluster.js index ffd6b1b..c72078f 100644 --- a/src/routes/cluster.js +++ b/src/routes/cluster.js @@ -88,7 +88,7 @@ router.post(`${basePath}/resources`, async (req, res) => { return; } // get current config - const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", null, null, pveAPIToken); + const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", { token: pveAPIToken }); const request = { cores: Number(params.cores) - Number(currentConfig.data.data.cores), memory: Number(params.memory) - Number(currentConfig.data.data.memory) @@ -117,7 +117,7 @@ router.post(`${basePath}/resources`, async (req, res) => { action = JSON.stringify(action); const method = params.type === "qemu" ? "POST" : "PUT"; // commit action - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -229,7 +229,7 @@ router.post(`${basePath}/create`, async (req, res) => { } action = JSON.stringify(action); // commit action - const result = await requestPVE(`/nodes/${params.node}/${params.type}`, "POST", req.cookies, action, pveAPIToken); + const result = await requestPVE(`/nodes/${params.node}/${params.type}`, "POST", { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -257,6 +257,6 @@ router.delete(`${basePath}/delete`, async (req, res) => { return; } // commit action - const result = await requestPVE(vmpath, "DELETE", req.cookies, null, pveAPIToken); + const result = await requestPVE(vmpath, "DELETE", { token: pveAPIToken }); await handleResponse(params.node, result, res); }); diff --git a/src/routes/cluster/disk.js b/src/routes/cluster/disk.js index 8cac8f0..51d6ea1 100644 --- a/src/routes/cluster/disk.js +++ b/src/routes/cluster/disk.js @@ -37,7 +37,7 @@ router.post("/:disk/detach", async (req, res) => { return; } // get current config - const config = (await requestPVE(`${vmpath}/config`, "GET", req.cookies, null, null)).data.data; + const config = (await requestPVE(`${vmpath}/config`, "GET", { cookies: req.cookies })).data.data; // disk must exist if (!config[params.disk]) { res.status(500).send({ error: `Disk ${params.disk} does not exist.` }); @@ -52,7 +52,7 @@ router.post("/:disk/detach", async (req, res) => { } const action = JSON.stringify({ delete: params.disk }); const method = params.type === "qemu" ? "POST" : "PUT"; - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -86,7 +86,7 @@ router.post("/:disk/attach", async (req, res) => { return; } // get current config - const config = (await requestPVE(`${vmpath}/config`, "GET", req.cookies, null, null)).data.data; + const config = (await requestPVE(`${vmpath}/config`, "GET", { cookies: req.cookies })).data.data; // disk must exist if (!config[`unused${params.source}`]) { res.status(403).send({ error: `Requested disk unused${params.source} does not exist.` }); @@ -107,7 +107,7 @@ router.post("/:disk/attach", async (req, res) => { action = JSON.stringify(action); const method = params.type === "qemu" ? "POST" : "PUT"; // commit action - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -160,7 +160,7 @@ router.post("/:disk/resize", async (req, res) => { } // action approved, commit to action const action = JSON.stringify({ disk: params.disk, size: `+${params.size}G` }); - const result = await requestPVE(`${vmpath}/resize`, "PUT", req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/resize`, "PUT", { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -227,7 +227,7 @@ router.post("/:disk/move", async (req, res) => { action = JSON.stringify(action); const route = params.type === "qemu" ? "move_disk" : "move_volume"; // commit action - const result = await requestPVE(`${vmpath}/${route}`, "POST", req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/${route}`, "POST", { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -259,7 +259,7 @@ router.delete("/:disk/delete", async (req, res) => { return; } // get current config - const config = (await requestPVE(`${vmpath}/config`, "GET", req.cookies, null, null)).data.data; + const config = (await requestPVE(`${vmpath}/config`, "GET", { cookies: req.cookies })).data.data; // disk must exist if (!config[params.disk]) { res.status(403).send({ error: `Requested disk unused${params.source} does not exist.` }); @@ -276,7 +276,7 @@ router.delete("/:disk/delete", async (req, res) => { const action = JSON.stringify({ delete: params.disk }); const method = params.type === "qemu" ? "POST" : "PUT"; // commit action - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -314,7 +314,7 @@ router.post("/:disk/create", async (req, res) => { return; } // get current config - const config = (await requestPVE(`${vmpath}/config`, "GET", req.cookies, null, null)).data.data; + const config = (await requestPVE(`${vmpath}/config`, "GET", { cookies: req.cookies })).data.data; // disk must not exist if (config[params.disk]) { res.status(403).send({ error: `Requested disk ${params.disk} already exists.` }); @@ -354,6 +354,6 @@ router.post("/:disk/create", async (req, res) => { action = JSON.stringify(action); const method = params.type === "qemu" ? "POST" : "PUT"; // commit action - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); diff --git a/src/routes/cluster/net.js b/src/routes/cluster/net.js index 708011e..46012e6 100644 --- a/src/routes/cluster/net.js +++ b/src/routes/cluster/net.js @@ -41,7 +41,7 @@ router.post("/:netid/create", async (req, res) => { return; } // get current config - const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", null, null, pveAPIToken); + const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", { token: pveAPIToken }); // net interface must not exist if (currentConfig.data.data[`net${params.netid}`]) { res.status(500).send({ error: `Network interface net${params.netid} already exists.` }); @@ -74,7 +74,7 @@ router.post("/:netid/create", async (req, res) => { action = JSON.stringify(action); const method = params.type === "qemu" ? "POST" : "PUT"; // commit action - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -109,7 +109,7 @@ router.post("/:netid/modify", async (req, res) => { return; } // get current config - const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", null, null, pveAPIToken); + const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", { token: pveAPIToken }); // net interface must already exist if (!currentConfig.data.data[`net${params.netid}`]) { res.status(500).send({ error: `Network interface net${params.netid} does not exist.` }); @@ -133,7 +133,7 @@ router.post("/:netid/modify", async (req, res) => { action = JSON.stringify(action); const method = params.type === "qemu" ? "POST" : "PUT"; // commit action - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); @@ -165,7 +165,7 @@ router.delete("/:netid/delete", async (req, res) => { return; } // get current config - const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", null, null, pveAPIToken); + const currentConfig = await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", { token: pveAPIToken }); // net interface must already exist if (!currentConfig.data.data[`net${params.netid}`]) { res.status(500).send({ error: `Network interface net${params.netid} does not exist.` }); @@ -176,6 +176,6 @@ router.delete("/:netid/delete", async (req, res) => { const action = JSON.stringify({ delete: `net${params.netid}` }); const method = params.type === "qemu" ? "POST" : "PUT"; // commit action - const result = await requestPVE(`${vmpath}/config`, method, req.cookies, action, pveAPIToken); + const result = await requestPVE(`${vmpath}/config`, method, { token: pveAPIToken }, action); await handleResponse(params.node, result, res); }); diff --git a/src/routes/cluster/pci.js b/src/routes/cluster/pci.js index 8468bc4..574e8a4 100644 --- a/src/routes/cluster/pci.js +++ b/src/routes/cluster/pci.js @@ -37,7 +37,7 @@ router.get("/:hostpci", async (req, res) => { return; } // check device is in instance config - const config = (await requestPVE(`${vmpath}/config`, "GET", req.cookies)).data.data; + const config = (await requestPVE(`${vmpath}/config`, "GET", { cookies: req.cookies })).data.data; if (!config[`hostpci${params.hostpci}`]) { res.status(500).send({ error: `Could not find hostpci${params.hostpci} in ${params.vmid}.` }); res.end(); @@ -95,7 +95,7 @@ router.post("/:hostpci/modify", async (req, res) => { // force all functions params.device = params.device.split(".")[0]; // get instance config to check if device has not changed - const config = (await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", params.cookies, null, pveAPIToken)).data.data; + const config = (await requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", { token: pveAPIToken })).data.data; const currentDeviceData = await getDeviceInfo(params.node, params.type, params.vmid, config[`hostpci${params.hostpci}`].split(",")[0]); if (!currentDeviceData) { res.status(500).send({ error: `No device in hostpci${params.hostpci}.` }); @@ -126,7 +126,7 @@ router.post("/:hostpci/modify", async (req, res) => { action[`hostpci${params.hostpci}`] = `${params.device},pcie=${params.pcie}`; action = JSON.stringify(action); // commit action - const rootauth = await requestPVE("/access/ticket", "POST", null, JSON.stringify(db.getGlobalConfig().application.pveroot), null); + const rootauth = await requestPVE("/access/ticket", "POST", null, JSON.stringify(db.getGlobalConfig().application.pveroot)); if (!(rootauth.status === 200)) { res.status(rootauth.status).send({ auth: false, error: "API could not authenticate as root user." }); res.end(); @@ -136,7 +136,7 @@ router.post("/:hostpci/modify", async (req, res) => { PVEAuthCookie: rootauth.data.data.ticket, CSRFPreventionToken: rootauth.data.data.CSRFPreventionToken }; - const result = await requestPVE(`${vmpath}/config`, "POST", rootcookies, action, null); + const result = await requestPVE(`${vmpath}/config`, "POST", { cookies: rootcookies }, action); await handleResponse(params.node, result, res); }); @@ -178,7 +178,7 @@ router.post("/create", async (req, res) => { // force all functions params.device = params.device.split(".")[0]; // get instance config to find next available hostpci slot - const config = requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", params.cookies, null, null); + const config = requestPVE(`/nodes/${params.node}/${params.type}/${params.vmid}/config`, "GET", { cookies: params.cookies }); let hostpci = 0; while (config[`hostpci${hostpci}`]) { hostpci++; @@ -206,7 +206,7 @@ router.post("/create", async (req, res) => { action[`hostpci${hostpci}`] = `${params.device},pcie=${params.pcie}`; action = JSON.stringify(action); // commit action - const rootauth = await requestPVE("/access/ticket", "POST", null, JSON.stringify(db.getGlobalConfig().application.pveroot), null); + const rootauth = await requestPVE("/access/ticket", "POST", null, JSON.stringify(db.getGlobalConfig().application.pveroot)); if (!(rootauth.status === 200)) { res.status(rootauth.status).send({ auth: false, error: "API could not authenticate as root user." }); res.end(); @@ -216,7 +216,7 @@ router.post("/create", async (req, res) => { PVEAuthCookie: rootauth.data.data.ticket, CSRFPreventionToken: rootauth.data.data.CSRFPreventionToken }; - const result = await requestPVE(`${vmpath}/config`, "POST", rootcookies, action, null); + const result = await requestPVE(`${vmpath}/config`, "POST", { cookies: rootcookies }, action); await handleResponse(params.node, result, res); }); @@ -254,7 +254,7 @@ router.delete("/:hostpci/delete", async (req, res) => { return; } // check device is in instance config - const config = (await requestPVE(`${vmpath}/config`, "GET", req.cookies)).data.data; + const config = (await requestPVE(`${vmpath}/config`, "GET", { cookies: req.cookies })).data.data; if (!config[`hostpci${params.hostpci}`]) { res.status(500).send({ error: `Could not find hostpci${params.hostpci} in ${params.vmid}.` }); res.end(); @@ -263,7 +263,7 @@ router.delete("/:hostpci/delete", async (req, res) => { // setup action const action = JSON.stringify({ delete: `hostpci${params.hostpci}` }); // commit action, need to use root user here because proxmox api only allows root to modify hostpci for whatever reason - const rootauth = await requestPVE("/access/ticket", "POST", null, JSON.stringify(db.getGlobalConfig().application.pveroot), null); + const rootauth = await requestPVE("/access/ticket", "POST", null, JSON.stringify(db.getGlobalConfig().application.pveroot)); if (!(rootauth.status === 200)) { res.status(rootauth.status).send({ auth: false, error: "API could not authenticate as root user." }); res.end(); @@ -273,6 +273,6 @@ router.delete("/:hostpci/delete", async (req, res) => { PVEAuthCookie: rootauth.data.data.ticket, CSRFPreventionToken: rootauth.data.data.CSRFPreventionToken }; - const result = await requestPVE(`${vmpath}/config`, "POST", rootcookies, action, null); + const result = await requestPVE(`${vmpath}/config`, "POST", { cookies: rootcookies }, action); await handleResponse(params.node, result, res); }); diff --git a/src/routes/proxmox.js b/src/routes/proxmox.js index 3e1aedf..db37e5e 100644 --- a/src/routes/proxmox.js +++ b/src/routes/proxmox.js @@ -10,7 +10,7 @@ const requestPVE = global.pve.requestPVE; router.get("/*", async (req, res) => { // proxy endpoint for GET proxmox api with no token console.log(req.url); const path = req.url.replace("/api/proxmox", ""); - const result = await requestPVE(path, "GET", req.cookies); + const result = await requestPVE(path, "GET", { cookies: req.cookies }); res.status(result.status).send(result.data); }); @@ -20,6 +20,6 @@ router.get("/*", async (req, res) => { // proxy endpoint for GET proxmox api wit */ router.post("/*", async (req, res) => { // proxy endpoint for POST proxmox api with no token const path = req.url.replace("/api/proxmox", ""); - const result = await requestPVE(path, "POST", req.cookies, JSON.stringify(req.body)); // need to stringify body because of other issues + const result = await requestPVE(path, "POST", { cookies: req.cookies }, JSON.stringify(req.body)); // need to stringify body because of other issues res.status(result.status).send(result.data); }); diff --git a/src/routes/sync.js b/src/routes/sync.js index 8c43198..076a8ba 100644 --- a/src/routes/sync.js +++ b/src/routes/sync.js @@ -55,7 +55,7 @@ if (schemes.hash.enabled) { return; } // get current cluster resources - const status = (await requestPVE("/cluster/resources", "GET", req.cookies)).data.data; + const status = (await requestPVE("/cluster/resources", "GET", { cookies: req.cookies })).data.data; // filter out just state information of resources that are needed const state = extractClusterState(status, resourceTypes); res.status(200).send(getObjectHash(state)); @@ -158,7 +158,7 @@ if (schemes.interrupt.enabled) { // handle the wss upgrade request global.server.on("upgrade", async (req, socket, head) => { const cookies = cookie.parse(req.headers.cookie || ""); - const auth = (await requestPVE("/version", "GET", cookies)).status === 200; + const auth = (await requestPVE("/version", "GET", { cookies })).status === 200; if (!auth) { socket.destroy(); } @@ -185,7 +185,7 @@ if (schemes.interrupt.enabled) { return; } // get current cluster resources - const status = (await requestPVE("/cluster/resources", "GET", null, null, pveAPIToken)).data.data; + const status = (await requestPVE("/cluster/resources", "GET", { token: pveAPIToken })).data.data; // filter out just state information of resources that are needed, and hash each one const currState = extractClusterState(status, resourceTypes, true); // get a map of users to send sync notifications diff --git a/src/routes/user.js b/src/routes/user.js index 329253f..41afe86 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -66,7 +66,7 @@ router.get("/iso", async (req, res) => { // get user iso config const userIsoConfig = db.getGlobalConfig().useriso; // get all isos - const isos = (await requestPVE(`/nodes/${userIsoConfig.node}/storage/${userIsoConfig.storage}/content?content=iso`, "GET", null, null, pveAPIToken)).data.data; + const isos = (await requestPVE(`/nodes/${userIsoConfig.node}/storage/${userIsoConfig.storage}/content?content=iso`, "GET", { token: pveAPIToken })).data.data; const userIsos = []; isos.forEach((iso) => { iso.name = iso.volid.replace(`${userIsoConfig.storage}:iso/`, ""); diff --git a/src/utils.js b/src/utils.js index e360f7e..3bcc699 100644 --- a/src/utils.js +++ b/src/utils.js @@ -24,11 +24,11 @@ export async function checkAuth (cookies, res, vmpath = null) { } if (vmpath) { - const result = await requestPVE(`/${vmpath}/config`, "GET", cookies); + const result = await requestPVE(`/${vmpath}/config`, "GET", { cookies }); auth = result.status === 200; } else { // if no path is specified, then do a simple authentication - const result = await requestPVE("/version", "GET", cookies); + const result = await requestPVE("/version", "GET", { cookies }); auth = result.status === 200; }