From c99ecbf8d38e01eddd9ff0131c654933c70e2d97 Mon Sep 17 00:00:00 2001 From: ChrisChrome Date: Sun, 15 Dec 2024 06:13:09 -0700 Subject: [PATCH] Add admin directory management --- index.js | 22 +++++++++++- public/assets/js/adminDirectory.js | 30 ++++++++++++++++ views/admin/index.ejs | 58 +++++++++++++++++++++--------- 3 files changed, 93 insertions(+), 17 deletions(-) create mode 100644 public/assets/js/adminDirectory.js diff --git a/index.js b/index.js index 3eb3602..a425ee8 100644 --- a/index.js +++ b/index.js @@ -27,7 +27,7 @@ db.get("SELECT * FROM users WHERE id = 1", [], (err, row) => { console.error('Error checking for admin user:', err); return; } - if (!row || process.env.RESET_ADMIN == true) { + if (!row || process.env.RESET_ADMIN == "true") { // Destroy all sessions sessionStore.clear((err) => { if (err) { @@ -289,6 +289,26 @@ app.delete('/api/v1/admin/route/:id', (req, res) => { // Delete a route }); }); +app.delete('/api/v1/admin/directory/:number', (req, res) => { // Delete a directory entry + if (!req.session.adminAuthenticated) { + res.status(401).json({ error: 'Unauthorized' }); + return; + } + const number = Number(req.params.number); + if (!number) { + res.status(400).json({ error: 'Bad Request' }); + return; + } + db.run('DELETE FROM directory WHERE number = ?', [number], (err) => { + if (err) { + console.error('Error deleting directory entry:', err); + res.status(500).json({ error: 'Internal server error' }); + return; + } + res.status(200).json({ message: 'Deleted' }); + }); +}); + // == END ADMIN ROUTES == // == User routes == // allows someone to log in with their API key and add entries to the Directory (as long as the number is within their block range) diff --git a/public/assets/js/adminDirectory.js b/public/assets/js/adminDirectory.js new file mode 100644 index 0000000..04b321f --- /dev/null +++ b/public/assets/js/adminDirectory.js @@ -0,0 +1,30 @@ +function getDirectoryEntries() { + fetch('/api/v1/directory') + .then(response => response.json()) + .then(data => { + const table = document.getElementById('directoryList'); + data.forEach(entry => { + console.log(entry) + const row = document.createElement('tr'); + row.innerHTML = `${entry.number}${entry.name}`; + table.appendChild(row); + }); + }) + .catch(error => console.error('Error fetching directory:', error)); +} + +document.addEventListener('DOMContentLoaded', function () { + getDirectoryEntries(); +}); + +function deleteDirectoryEntry(number) { + fetch(`/api/v1/admin/directory/${number}`, { + method: 'DELETE' + }) + .then(response => { + if (response.ok) { + getDirectoryEntries(); + } + }) + .catch(error => console.error('Error deleting directory entry:', error)); +} \ No newline at end of file diff --git a/views/admin/index.ejs b/views/admin/index.ejs index 9e639cc..6cc4b81 100644 --- a/views/admin/index.ejs +++ b/views/admin/index.ejs @@ -22,22 +22,48 @@

Admin Dashboard

Create New Server - - - - - - - - - - - - - - - -
IDHostname:PortIAX Username/ContextIAX2 SecretNumber BlockAPI KeyActions
+
+
+ + + + + + + + + + + + + + + +
IDHostname:PortIAX Username/ContextIAX2 SecretNumber BlockAPI KeyActions
+
+
+
+ +
+
+
+

Directory Management

+
+ + + + + + + + + + + +
NumberNameActions
+
+
+