1import express from 'express';
2import * as config from '../controller/config.js';
3import * as timer from '../tasks/timer.js';
4import password from '../middlewares/password.js';
5
6const app = express.Router();
7
8app.get("/", password(true), async (req, res) => {
9 let configValues = {};
10 (await config.listAll()).forEach(row => {
11 if (row.key !== "password" && !(req.viewMode && ["ooklaId", "libreId", "libreUrl", "cron", "scheduleOffset", "passwordLevel"].includes(row.key)))
12 configValues[row.key] = row.value;
13 });
14 configValues['viewMode'] = req.viewMode;
15 configValues['previewMode'] = process.env.PREVIEW_MODE === "true";
16
17 if (process.env.PREVIEW_MODE === "true")
18 configValues['previewMessage'] = String(process.env.PREVIEW_MESSAGE || "The owner of this instance has not provided a message");
19
20 if (Object.keys(configValues).length === 0) return res.status(404).json({message: "Hmm. There are no config values. Weird..."});
21 res.json(configValues);
22});
23
24app.patch("/:key", password(false), async (req, res) => {
25 const value = await config.validateInput(req.params.key, req.body?.value);
26 if (Object.keys(value).length !== 1) return res.status(400).json({message: value});
27
28 if (!await config.updateValue(req.params.key, value.value))
29 return res.status(500).json({message: `Error updating the key '${req.params.key}'`});
30
31 if (req.params.key === "cron") {
32 timer.stopTimer();
33 timer.startTimer(req.body.value.toString());
34 }
35
36 res.json({message: `The key '${req.params.key}' has been successfully updated`});
37});
38
39export default app;