update to es6 and fix some syntax errors

This commit is contained in:
Arthur Lu 2023-04-26 01:18:05 +00:00
parent 8650ea4d2e
commit 3209c33b4e
5 changed files with 41 additions and 45 deletions

20
db.js
View File

@ -1,9 +1,9 @@
const fs = require("fs");
import { readFileSync, writeFileSync } from "fs";
template = "localdb.json.template"
filename = "localdb.json";
let template = "localdb.json.template"
let filename = "localdb.json";
let db = JSON.parse(fs.readFileSync(template));
let db = JSON.parse(readFileSync(template));
try {
load();
}
@ -12,19 +12,17 @@ catch {
}
function load () {
db = JSON.parse(fs.readFileSync(filename));
db = JSON.parse(readFileSync(filename));
}
function save () {
fs.writeFileSync(filename, JSON.stringify(db));
writeFileSync(filename, JSON.stringify(db));
}
function getResourceConfig() {
export function getResourceConfig() {
return db.resources;
}
function getUserConfig (username) {
export function getUserConfig (username) {
return db.users[username];
}
module.exports = {getUserConfig, getResourceConfig};
}

29
main.js
View File

@ -1,14 +1,15 @@
const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser")
const cors = require("cors");
const helmet = require("helmet");
const morgan = require("morgan");
var api = require("./package.json");
import express from "express";
import bodyParser from "body-parser";
import cookieParser from "cookie-parser";
import cors from "cors";
import helmet from "helmet";
import morgan from "morgan";
//import { version as _version } from "./package.json";
let api = {version: "0.0.1"};
const {pveAPIToken, listenPort, domain} = require("./vars.js");
const {checkAuth, requestPVE, handleResponse, getDiskInfo} = require("./pve.js");
const {getUserData, approveResources} = require("./utils.js")
import { pveAPIToken, listenPort, domain } from "./vars.js";
import { checkAuth, requestPVE, handleResponse, getDiskInfo } from "./pve.js";
import { getUserData, approveResources } from "./utils.js";
const app = express();
app.use(helmet());
@ -19,7 +20,7 @@ app.use(morgan("combined"));
app.get("/api/version", (req, res) => {
res.status(200).send({version: api.version});
res.status(200).send({version: _version});
});
app.get("/api/echo", (req, res) => {
@ -32,13 +33,13 @@ app.get("/api/auth", async (req, res) => {
});
app.get("/api/proxmox/*", async (req, res) => { // proxy endpoint for GET proxmox api with no token
path = req.url.replace("/api/proxmox", "");
let path = req.url.replace("/api/proxmox", "");
let result = await requestPVE(path, "GET", req.cookies);
res.status(result.status).send(result.data);
});
app.post("/api/proxmox/*", async (req, res) => { // proxy endpoint for POST proxmox api with no token
path = req.url.replace("/api/proxmox", "");
let path = req.url.replace("/api/proxmox", "");
let result = await requestPVE(path, "POST", req.cookies, JSON.stringify(req.body)); // need to stringify body because of other issues
res.status(result.status).send(result.data);
});
@ -235,7 +236,7 @@ app.post("/api/instance", async (req, res) => {
memory: req.body.memory,
pool: user.instances.pool
};
for (key of Object.keys(user.instances.templates[req.body.type])) {
for (let key of Object.keys(user.instances.templates[req.body.type])) {
action[key] = user.instances.templates[req.body.type][key];
}
if (req.body.type === "lxc") {

View File

@ -3,6 +3,7 @@
"version": "0.0.1",
"description": "REST API for ProxmoxAAS",
"main": "main.js",
"type": "module",
"dependencies": {
"axios": "^1.3.2",
"body-parser": "^1.20.1",

22
pve.js
View File

@ -1,7 +1,7 @@
const axios = require('axios');
const {pveAPI, pveAPIToken} = require("./vars.js");
import axios from 'axios';
import { pveAPI, pveAPIToken } from "./vars.js";
async function checkAuth (cookies, res, vmpath = null) {
export async function checkAuth (cookies, res, vmpath = null) {
let auth = false;
if (vmpath) {
let result = await requestPVE(`/${vmpath}/config`, "GET", cookies);
@ -18,7 +18,7 @@ async function checkAuth (cookies, res, vmpath = null) {
}
}
async function requestPVE (path, method, cookies, body = null, token = null) {
export async function requestPVE (path, method, cookies, body = null, token = null) {
let url = `${pveAPI}${path}`;
let content = {
method: method,
@ -50,7 +50,7 @@ async function requestPVE (path, method, cookies, body = null, token = null) {
}
}
async function handleResponse (node, result, res) {
export async function handleResponse (node, result, res) {
const waitFor = delay => new Promise(resolve => setTimeout(resolve, delay));
if (result.data.data) {
let upid = result.data.data;
@ -78,7 +78,7 @@ async function handleResponse (node, result, res) {
}
}
async function getUsedResources (req, resourceMeta) {
export async function getUsedResources (req, resourceMeta) {
let response = await requestPVE("/cluster/resources", "GET", req.cookies);
let used = {};
let diskprefixes = [];
@ -90,11 +90,11 @@ async function getUsedResources (req, resourceMeta) {
}
}
}
for (instance of response.data.data) {
for (let 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);
config = config.data.data;
for (key of Object.keys(config)) {
for (let key of Object.keys(config)) {
if (Object.keys(used).includes(key) && resourceMeta[key].type === "numeric") {
used[key] += config[key];
}
@ -108,13 +108,11 @@ async function getUsedResources (req, resourceMeta) {
return used;
}
async function getDiskInfo (node, type, vmid, disk) {
export async function getDiskInfo (node, type, vmid, disk) {
let config = await requestPVE(`/nodes/${node}/${type}/${vmid}/config`, "GET", null, null, pveAPIToken);
let storageID = config.data.data[disk].split(":")[0];
let volID = config.data.data[disk].split(",")[0];
let volInfo = await requestPVE(`/nodes/${node}/storage/${storageID}/content/${volID}`, "GET", null, null, pveAPIToken);
volInfo.data.data.storage = storageID;
return volInfo.data.data;
}
module.exports = {checkAuth, requestPVE, handleResponse, getUsedResources, getDiskInfo};
}

View File

@ -1,7 +1,7 @@
const {getUsedResources} = require("./pve.js");
const {getUserConfig, getResourceConfig} = require("./db.js");
import { getUsedResources } from "./pve.js";
import { getUserConfig, getResourceConfig } from "./db.js";
async function getUserData (req, username) {
export async function getUserData (req, username) {
let resources = await getAllocatedResources(req, username);
let instances = getUserConfig(req.cookies.username).instances;
return {resources: resources, instances: instances};
@ -11,14 +11,14 @@ async function getAllocatedResources (req, username) {
let dbResources = getResourceConfig();
let used = await getUsedResources(req, dbResources);
let max = getUserConfig(username).resources.max;
avail = {};
let avail = {};
Object.keys(max).forEach((k) => {
avail[k] = max[k] - used[k];
});
return {used: used, max: max, avail: avail, units: dbResources};
}
async function approveResources (req, username, request) {
export async function approveResources (req, username, request) {
let avail = (await getAllocatedResources(req, username)).avail;
@ -32,6 +32,4 @@ async function approveResources (req, username, request) {
}
});
return approved;
}
module.exports = {getUserData, approveResources}
}