From 89951b45fe4b67eeabb33cc795723e9201a84bb2 Mon Sep 17 00:00:00 2001 From: Valentin Date: Thu, 14 Sep 2023 19:34:16 +0200 Subject: [PATCH] multi user features --- package-lock.json | 16 +++++----- public/assets/css/styles.min.css | 5 +++- routes/endpoint/update.route.js | 50 +++++++++++++++++--------------- services/auth.service.js | 4 +-- services/server.service.js | 8 ++--- views/footer.ejs | 2 +- views/keys.ejs | 3 +- 7 files changed, 47 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06162a9..bd42410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -267,11 +267,6 @@ "node": ">= 10.0.0" } }, - "node_modules/bcrypt/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -1393,9 +1388,9 @@ } }, "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" }, "node_modules/node-fetch": { "version": "2.7.0", @@ -2063,6 +2058,11 @@ } } }, + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, "node_modules/ssri": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", diff --git a/public/assets/css/styles.min.css b/public/assets/css/styles.min.css index 83f0ff6..2981411 100644 --- a/public/assets/css/styles.min.css +++ b/public/assets/css/styles.min.css @@ -1 +1,4 @@ -.bs-icon{--bs-icon-size:.75rem;display:flex;flex-shrink:0;justify-content:center;align-items:center;font-size:var(--bs-icon-size);width:calc(var(--bs-icon-size) * 2);height:calc(var(--bs-icon-size) * 2);color:var(--bs-primary)}.bs-icon-xs{--bs-icon-size:1rem;width:calc(var(--bs-icon-size) * 1.5);height:calc(var(--bs-icon-size) * 1.5)}.bs-icon-sm{--bs-icon-size:1rem}.bs-icon-md{--bs-icon-size:1.5rem}.bs-icon-lg{--bs-icon-size:2rem}.bs-icon-xl{--bs-icon-size:2.5rem}.bs-icon.bs-icon-primary{color:var(--bs-white);background:var(--bs-primary)}.bs-icon.bs-icon-primary-light{color:var(--bs-primary);background:rgba(var(--bs-primary-rgb),.2)}.bs-icon.bs-icon-semi-white{color:var(--bs-primary);background:rgba(255,255,255,.5)}.bs-icon.bs-icon-rounded{border-radius:.5rem}.bs-icon.bs-icon-circle{border-radius:50%}.icon-separator{font-size:0%;margin-bottom:50px}.icon-separator div{border:none;border-top:.25rem solid;width:6rem;display:inline-block}@media (max-width:280px){.icon-separator div{width:3rem}}.icon-separator i{display:inline-block;padding:0 10px;top:.3em;font-size:2rem;position:relative} \ No newline at end of file +.bs-icon{--bs-icon-size:.75rem;display:flex;flex-shrink:0;justify-content:center;align-items:center;font-size:var(--bs-icon-size);width:calc(var(--bs-icon-size) * 2);height:calc(var(--bs-icon-size) * 2);color:var(--bs-primary)}.bs-icon-xs{--bs-icon-size:1rem;width:calc(var(--bs-icon-size) * 1.5);height:calc(var(--bs-icon-size) * 1.5)}.bs-icon-sm{--bs-icon-size:1rem}.bs-icon-md{--bs-icon-size:1.5rem}.bs-icon-lg{--bs-icon-size:2rem}.bs-icon-xl{--bs-icon-size:2.5rem}.bs-icon.bs-icon-primary{color:var(--bs-white);background:var(--bs-primary)}.bs-icon.bs-icon-primary-light{color:var(--bs-primary);background:rgba(var(--bs-primary-rgb),.2)}.bs-icon.bs-icon-semi-white{color:var(--bs-primary);background:rgba(255,255,255,.5)}.bs-icon.bs-icon-rounded{border-radius:.5rem}.bs-icon.bs-icon-circle{border-radius:50%}.icon-separator{font-size:0%;margin-bottom:50px}.icon-separator div{border:none;border-top:.25rem solid;width:6rem;display:inline-block}@media (max-width:280px){.icon-separator div{width:3rem}}.icon-separator i{display:inline-block;padding:0 10px;top:.3em;font-size:2rem;position:relative} +textarea { + resize: none; +} \ No newline at end of file diff --git a/routes/endpoint/update.route.js b/routes/endpoint/update.route.js index cfa1dd1..434d9e2 100644 --- a/routes/endpoint/update.route.js +++ b/routes/endpoint/update.route.js @@ -7,13 +7,37 @@ const bcrypt = require("bcrypt"); const serverService = require("../../services/server.service"); - -router.get("/:server", async (req, res) => { +router.get("/:server/users", async (req, res) => { try { Server.findOne({ where: { hostname: req.params.server } }).then((server) => { if (server) { if (bcrypt.compareSync(req.body.secret, server.secret)) { - serverService.getServerKeys(req.params.server).then((result) => { + serverService.getServerUsers(req.params.server).then((result) => { + console.log(result[0].serverUsername) + var raw = '' + for (x in result) { + raw += '# ' + result[x].login + ' (' + result[x].userId + ')' + '\n' + result[x].serverUsername + '\n\n' + } + res.send(raw) + }) + } else { + res.send("invalid request") + } + } else { + res.send("invalid request") + } + }) + } catch (e) { + console.log(e) + } +}); + +router.get("/:server/key/:user", async (req, res) => { + try { + Server.findOne({ where: { hostname: req.params.server } }).then((server) => { + if (server) { + if (bcrypt.compareSync(req.body.secret, server.secret)) { + serverService.getServerUserKey(req.params.server, req.params.user).then((result) => { var raw = '' for (x in result) { raw += '# ' + x + '\n' + result[x] + '\n\n' @@ -35,26 +59,6 @@ router.get("/:server", async (req, res) => { } }); -router.get("/update/:server", async (req, res) => { - try { - Server.findOne({ where: { hostname: req.params.server } }).then((server) => { - if (server) { - if (bcrypt.compareSync(req.body.secret, server.secret)) { - res.send(getServerUsers(req.params.server)) - }) - } else { - res.send("invalid request") - } - } else { - res.send("invalid request") - } - }) - } catch (e) { - console.log(e) - } -}); - - module.exports = router; diff --git a/services/auth.service.js b/services/auth.service.js index bf3c4f6..fcf8e87 100644 --- a/services/auth.service.js +++ b/services/auth.service.js @@ -38,8 +38,8 @@ async function syncUser(user) { login: user.login, avatar: user.avatar_url, displayName: user.name, - admin: (users.length === 1), - serverUsername: false, + admin: (users.length === 0), + serverUsername: user.login, }).then(() => { console.log('user ' + user.login + ' added to database') diff --git a/services/server.service.js b/services/server.service.js index b1c47d7..d80d179 100644 --- a/services/server.service.js +++ b/services/server.service.js @@ -68,8 +68,8 @@ async function delServer(hostname) { }); } -async function getServerKeys(server) { - const dump = await sequelize.query('SELECT name, content FROM servers JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName JOIN keys on keys.idOwner = members.userid WHERE serverHostname = \'' + server + '\'', {}); +async function getServerUserKey(server, serverUsername) { + const dump = await sequelize.query('SELECT name, content FROM servers JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName JOIN keys on keys.idOwner = members.userid JOIN users on users.id= members.userid WHERE serverHostname = \'' + server + '\' AND serverUsername = \'' + serverUsername + '\'' , {}); result = {} console.log(dump) for (x in dump) { @@ -85,7 +85,7 @@ async function getServerKeys(server) { } async function getServerUsers(server) { - const dump = await sequelize.query('SELECT DISTINCT serverUsername FROM servers JOIN users on users.id = members.userId JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName WHERE serverHostname = \'' + server + '\'', {}); + const dump = await sequelize.query('SELECT DISTINCT login, userId, serverUsername FROM servers JOIN users on users.id = members.userId JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName WHERE serverHostname = \'' + server + '\'', {}); return dump[0] } @@ -114,7 +114,7 @@ module.exports = { getServerUsers, addServer, delServer, - getServerKeys, + getServerUserKey, getServerListForUserId, serverSecretDestroy }; \ No newline at end of file diff --git a/views/footer.ejs b/views/footer.ejs index 5cecce6..30c9f76 100644 --- a/views/footer.ejs +++ b/views/footer.ejs @@ -34,7 +34,7 @@ } ); $( "#server_user_true" ).on( "click", function() { document.getElementById("inputOther").style.display = ""; - } ); + } ); function fieldShow(value) { console.log(value) } diff --git a/views/keys.ejs b/views/keys.ejs index 958675e..c674ad9 100644 --- a/views/keys.ejs +++ b/views/keys.ejs @@ -27,12 +27,11 @@ <%= key.name %> - + <% }) %> -