From be62b85c521010c5ff94bb29537eb32e6ed1db94 Mon Sep 17 00:00:00 2001 From: Ninjdai Date: Thu, 7 Dec 2023 12:33:59 +0100 Subject: [PATCH] Add user list and update user management --- index.js | 4 +-- src/database/addUser.js | 0 src/html/pages/api/add.js | 8 ----- src/html/pages/api/call.js | 12 ------- src/html/pages/api/contacts.js | 22 +++++++++++++ src/html/pages/dashboard/users.js | 7 +++- src/html/pages/dashboard/users_list.js | 44 ++++++++++++++++++++++++++ utils/permissions.js | 1 + web.js | 4 +-- www/dashboard/index.html | 2 +- www/dashboard/users/create.html | 1 + www/dashboard/users/index.html | 15 +++++++++ www/dashboard/users/list.html | 17 ++++++++++ 13 files changed, 111 insertions(+), 26 deletions(-) delete mode 100644 src/database/addUser.js delete mode 100644 src/html/pages/api/add.js delete mode 100644 src/html/pages/api/call.js create mode 100644 src/html/pages/api/contacts.js create mode 100644 src/html/pages/dashboard/users_list.js create mode 100644 www/dashboard/users/index.html create mode 100644 www/dashboard/users/list.html diff --git a/index.js b/index.js index a48ed36..947f73f 100644 --- a/index.js +++ b/index.js @@ -9,7 +9,7 @@ loadDatabase(); const submitEvent = new EventEmitter(); await launchWeb(submitEvent); -submitEvent.on("call", async (call) => { +submitEvent.on("contacts/call", async (call) => { let vote; if (call.vote) { console.log(`${call.phone} va voter`); @@ -23,7 +23,7 @@ submitEvent.on("call", async (call) => { { where: { phone: call.phone } }, ); }); -submitEvent.on("add", (request) => { +submitEvent.on("contacts/add", (request) => { console.log(request); }); diff --git a/src/database/addUser.js b/src/database/addUser.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/html/pages/api/add.js b/src/html/pages/api/add.js deleted file mode 100644 index bc7e3dc..0000000 --- a/src/html/pages/api/add.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - path: "/api/contacts/add", - requiresLogin: true, - type: "post", - async execute(request, response) { - global.events.submitEvent.emit("add", request.body); - }, -} diff --git a/src/html/pages/api/call.js b/src/html/pages/api/call.js deleted file mode 100644 index f5ab902..0000000 --- a/src/html/pages/api/call.js +++ /dev/null @@ -1,12 +0,0 @@ -import { permissionBits } from '../../../../utils/permissions.js'; - -export default { - path: "/api/contacts/call", - requiresLogin: true, - permissions: permissionBits.CALL, - type: "post", - async execute(request, response) { - global.events.submitEvent.emit("call", request.body); - response.redirect("/calls"); - }, -} diff --git a/src/html/pages/api/contacts.js b/src/html/pages/api/contacts.js new file mode 100644 index 0000000..9b377a2 --- /dev/null +++ b/src/html/pages/api/contacts.js @@ -0,0 +1,22 @@ +import { permissionBits } from "../../../../utils/permissions.js"; + +export default { + path: "/api/contacts(/*)?", + requiresLogin: true, + permissions: permissionBits.CALL, + type: "post", + async execute(request, response) { + const phone = request.originalUrl.split("/")[3]; + const operation = request.originalUrl.split("/")[4]; + switch(operation) { + case 'call': + global.events.submitEvent.emit("contacts/call", request.body); + response.redirect("/calls"); + break + case 'add': + global.events.submitEvent.emit("contacts/add", request.body); + //response.redirect("/"); + break + } + }, +}; diff --git a/src/html/pages/dashboard/users.js b/src/html/pages/dashboard/users.js index b285cfc..d5e1204 100644 --- a/src/html/pages/dashboard/users.js +++ b/src/html/pages/dashboard/users.js @@ -1,4 +1,6 @@ import { permissionBits } from '../../../../utils/permissions.js'; +import { readFile } from 'fs/promises'; +import { navbar } from '../../../../utils/navbar.js'; export default { path: "/dashboard/users", @@ -6,6 +8,9 @@ export default { permissions: permissionBits.ADMIN, type: "get", async execute(request, response) { - response.redirect("/dashboard/users/list"); + const html = await readFile(`${process.env.WWW}/dashboard/users/index.html`); + return await response.send(html.toString() + .replace('', navbar(request.session)) + ); }, } diff --git a/src/html/pages/dashboard/users_list.js b/src/html/pages/dashboard/users_list.js new file mode 100644 index 0000000..1e02cd1 --- /dev/null +++ b/src/html/pages/dashboard/users_list.js @@ -0,0 +1,44 @@ +import { navbar } from '../../../../utils/navbar.js'; +import { readFile } from 'fs/promises'; +import { permissionBits, checkPermissions } from '../../../../utils/permissions.js'; + +export default { + path: "/dashboard/users/list", + requiresLogin: true, + permissions: permissionBits.ADMIN, + type: "get", + async execute(request, response) { + const userList = await global.database.users.findAll(); + const userTable = genUserTable(userList); + const html = await readFile(`${process.env.WWW}/dashboard/users/list.html`); + return await response.send(html.toString() + .replace('', navbar(request.session)) + .replace('', userTable) + ); + }, +} + +function genUserTable(users) { + let res = ` + + + + + + `; + for(const user of users) { + const userPermDict = checkPermissions(user.permissions); + let userPerms = []; + for (const [key, value] of Object.entries(userPermDict)) { + if(value && key != "default") userPerms.push(key); + }; + res += ` + + + + + `; + } + res += `
IdentifiantPermissionsAction
${user.username}${userPerms.join(", ")}
`; + return res +} diff --git a/utils/permissions.js b/utils/permissions.js index 243ccb2..a8a37c9 100644 --- a/utils/permissions.js +++ b/utils/permissions.js @@ -26,6 +26,7 @@ function checkPermissions(userPermissionBits) { if(userPermissionBits & permissionBits.ADMIN) { permissions.admin = true; } + return permissions; } /* let userPermissionBits = permissionBits.DEFAULT; diff --git a/web.js b/web.js index 87f18cb..039d572 100644 --- a/web.js +++ b/web.js @@ -44,8 +44,8 @@ async function launchWeb() { app.get("*", async (request, response) => { const [path, args] = parseURL(request.originalUrl); - //console.log(parseURL(request.originalUrl)); - console.log(`GET: ${path}${args ? "?" + args : ""}`); + const argNum = Object.keys(args).length; + console.log(`GET: ${path} ${argNum > 0 ? '('+argNum+' args)' : ""}`); let handled = global.handler.get[path]; if(!handled) for(const path of Object.keys(global.handler.get)) { diff --git a/www/dashboard/index.html b/www/dashboard/index.html index 24d6d78..9a0fe9b 100644 --- a/www/dashboard/index.html +++ b/www/dashboard/index.html @@ -9,7 +9,7 @@

Dashboard

Phoning

-

Ajouter un utilisateur

+

Gestion des utilisateurs

Déconnexion

diff --git a/www/dashboard/users/create.html b/www/dashboard/users/create.html index 00c1490..3f87850 100644 --- a/www/dashboard/users/create.html +++ b/www/dashboard/users/create.html @@ -2,6 +2,7 @@ +Utilisateurs + + + + + +