diff --git a/lib/controllers/lifecycle-controller.js b/lib/controllers/lifecycle-controller.js index b259d5d..cab471c 100644 --- a/lib/controllers/lifecycle-controller.js +++ b/lib/controllers/lifecycle-controller.js @@ -13,28 +13,10 @@ const dnsRegex = new RegExp( `^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$`, ); -function payloadFilter(req, res) { +function backupPayloadFilter(req, res) { const serverSpec = req.body; - if (!serverSpec) return res.sendStatus(400); - const { name, host, version, serverType, memory, extraPorts } = serverSpec; const { backupHost, backupBucket, backupId, backupKey, backupInterval } = serverSpec; - console.log("GOT VVV"); - console.log(serverSpec); - if (!name) return res.status(400).send("Server name is required!"); - if (!host) return res.status(400).send("Server host is required!"); - if (!dnsRegex.test(host)) return res.status(400).send("Hostname invalid!"); - if (!version) return res.status(400).send("Server version is required!"); - if (!serverType) return res.status(400).send("Server type is required!"); - if (!memory) return res.status(400).send("Memory is required!"); - if ( - !!extraPorts && - (!Array.isArray(extraPorts) || - extraPorts.find((e) => typeof e !== "string" || e.length > 5)) - ) - return res - .status(400) - .send("Extra ports must be a list of strings with length of 5!"); // TODO: Impliment non creation time backups if ( !!backupHost || @@ -60,6 +42,27 @@ function payloadFilter(req, res) { return "filtered"; } +function payloadFilter(req, res) { + const serverSpec = req.body; + if (!serverSpec) return res.sendStatus(400); + const { name, host, version, serverType, memory, extraPorts } = serverSpec; + if (!name) return res.status(400).send("Server name is required!"); + if (!host) return res.status(400).send("Server host is required!"); + if (!dnsRegex.test(host)) return res.status(400).send("Hostname invalid!"); + if (!version) return res.status(400).send("Server version is required!"); + if (!serverType) return res.status(400).send("Server type is required!"); + if (!memory) return res.status(400).send("Memory is required!"); + if ( + !!extraPorts && + (!Array.isArray(extraPorts) || + extraPorts.find((e) => typeof e !== "string" || e.length > 5)) + ) + return res + .status(400) + .send("Extra ports must be a list of strings with length of 5!"); + return "filtered"; +} + function checkServerId(serverSpec) { if (!serverSpec) throw new ExpressClientError({ c: 400 }); if (!serverSpec.id) @@ -68,6 +71,7 @@ function checkServerId(serverSpec) { export async function createServer(req, res) { if (payloadFilter(req, res) !== "filtered") return; + if (backupPayloadFilter(req, res) !== "filtered") return; const serverSpec = req.body; try { const serverEntry = await createServerEntry(serverSpec); @@ -130,7 +134,12 @@ export async function getServer(req, res) { return sendError(res)(e); } const { id } = serverSpec; - getServerEntry(id).then((s) => res.json(s)); + getServerEntry(id).then((s) => { + delete s.backupKey; + s.backupBucket = s.backupPath; + delete s.backupPath; + res.json(s); + }); } export async function modifyServer(req, res) { @@ -139,8 +148,6 @@ export async function modifyServer(req, res) { try { checkServerId(serverSpec); const serverEntry = await modifyServerEntry(serverSpec); - console.log("NEW ENTRY"); - console.log(serverEntry); // await createServerResources(serverEntry); res.sendStatus(200); } catch (e) { diff --git a/lib/database/queries/server-queries.js b/lib/database/queries/server-queries.js index cce9b55..66300bc 100644 --- a/lib/database/queries/server-queries.js +++ b/lib/database/queries/server-queries.js @@ -35,7 +35,7 @@ export async function createServerEntry(serverSpec) { server_type, memory, extra_ports, - backup_enabled: !!backup_interval, // We already verified the payload, so any backup key will work + backup_enabled: !!backup_interval ? true : null, // We already verified the payload, so any backup key will work backup_host, backup_bucket_path, backup_id, diff --git a/src/components/server-options/BackupBucketOption.jsx b/src/components/server-options/BackupBucketOption.jsx index bc7139d..7650187 100644 --- a/src/components/server-options/BackupBucketOption.jsx +++ b/src/components/server-options/BackupBucketOption.jsx @@ -6,7 +6,7 @@ export default function BackupBucketOption(props) { setSpec(serverBlueprint), [serverBlueprint]); + useEffect(() => { + setSpec(serverBlueprint); + console.log("PUTTING BLUEPRINT:"); + console.log(serverBlueprint); + }, [serverBlueprint]); const updateSpec = (attr, val) => { const s = { ...spec }; @@ -49,10 +52,12 @@ export default function EditCoreOptions(props) { const coreUpdate = (attr) => (e) => updateSpec(attr, e.target.value); const upsertSpec = () => { - console.log(spec); modifyServer(spec); }; + const toggleBackupEnabled = () => + updateSpec("backupEnabled", !spec.backupEnabled); + function validateSpec() { console.log("TODO CREATE VALIDATION"); if (!spec.host) return alertValidationError("Host cannot be blank"); @@ -83,18 +88,22 @@ export default function EditCoreOptions(props) { - - } - label="Enable Backups?" - labelPlacement="start" - sx={{ mr: "auto" }} - /> - {backupEnabled && ( + {spec.backupEnabled !== null && ( + + } + label="Enable Backups?" + labelPlacement="start" + sx={{ mr: "auto" }} + /> + )} + + {/*spec.backupEnabled && ( // TODO: Disabled while secrets are insecure - )} + )*/}