diff --git a/server/api/admin.js b/server/api/admin.js index 3b5fb98..cb7044f 100644 --- a/server/api/admin.js +++ b/server/api/admin.js @@ -6,6 +6,11 @@ export function registerAdmin(app) { app.post("/api/admin/timetable", createTimetable); app.put("/api/admin/timetable", editTimetable); app.delete("/api/admin/timetable", deleteTimetable); + + app.get("/api/admin/key", listKeys); + app.post("/api/admin/key", createKey); + app.put("/api/admin/key", editKey); + app.delete("/api/admin/key", deleteKey); } function sendMissingArguments(res) { @@ -76,3 +81,72 @@ async function deleteTimetable(req, res) { res.status(500).send(e); } } + +async function listKeys(_, res) { + res.send(await prisma.key.findMany()); +} + +async function createKey(req, res) { + let data = req.body; + if (!data.key) { + sendMissingArguments(res); + return; + } + const existingKey = await prisma.key.findUnique({ + where: { + key: data.key, + }, + }); + if (existingKey) { + res.status(400).send({ + success: false, + error: "key_already_exists", + }); + return; + } + + const key = await prisma.key.create({ + data: { + key: data.key, + permissions: data.permissions || [], + validUntil: data.validUntil, + notes: data.notes, + }, + }); + res.status(201).send(key); +} + +async function editKey(req, res) { + if (!req.query.id) { + sendMissingArguments(res); + return; + } + try { + const timetable = await prisma.key.update({ + where: { + key: req.query.id, + }, + data: req.body, + }); + res.status(201).send(timetable); + } catch (e) { + res.status(500).send(e); + } +} + +async function deleteKey(req, res) { + if (!req.query.id) { + sendMissingArguments(res); + return; + } + try { + await prisma.key.delete({ + where: { + key: req.query.id, + }, + }); + res.status(200).send(); + } catch (e) { + res.status(500).send(e); + } +} diff --git a/src/components/settings/expand-section.vue b/src/components/settings/expand-section.vue index a6a9d8a..9e8de26 100644 --- a/src/components/settings/expand-section.vue +++ b/src/components/settings/expand-section.vue @@ -24,5 +24,6 @@ defineProps(["title"]); user-select: none; font-size: 19px; margin: 5px 0px; + cursor: pointer; } diff --git a/src/components/settings/key-card.vue b/src/components/settings/key-card.vue index 9e17ed5..078ca54 100644 --- a/src/components/settings/key-card.vue +++ b/src/components/settings/key-card.vue @@ -1,4 +1,5 @@