dynamic dashboard

pull/1/head
Valentin PUCCETTI 2023-09-11 22:55:09 +02:00
parent 7c6c82f47b
commit 8849d0f6e7
5 changed files with 67 additions and 23 deletions

View File

@ -7,6 +7,7 @@ const databaseService = require('./services/database.service');
require('dotenv').config()
userService = require("./services/users.service");
serverService = require("./services/server.service");
const User = require('./model/user.model')
const Key = require('./model/key.model')
@ -59,8 +60,9 @@ app.get("/", (req, res) => {
stats["keys"] = result
Member.count({ where: { userId: req.session.user.id } }).then((result) => {
stats["groups"] = result
res.render('index', { user: req.session.user, stats: stats })
serverService.getServerListForUserId(req.session.user.id).then((servers) => {
res.render('index', { user: req.session.user, stats: stats, servers: servers })
})
})
})

View File

@ -6,11 +6,17 @@ var router = express.Router();
router.use('*', (req, res, next) => {
if (req.session.loggedin === true) {
User.findOne({ where: { id: req.session.user.id } }).then((result) => {
try {
if (result.admin === true) {
next()
} else {
res.redirect('/')
}
} catch (e) {
console.log(e)
res.redirect('/')
}
})
} else {
res.redirect('/')

View File

@ -23,9 +23,13 @@ router.get("/",async (req, res) => {
router.get("/delete/:userId", (req, res) => {
try {
if (req.params.userId != req.session.user.id) {
userService.delUser(req.params.userId).then((result) => {
res.redirect("/admin/users")
})
} else {
res.redirect("/admin/users")
}
} catch(e) {
console.log(e)
}

View File

@ -72,9 +72,28 @@ async function getServerKeys(server) {
return result
}
async function getServerListForUserId(userId) {
const dump = await sequelize.query('SELECT hostname, username, ip, lastPull FROM servers JOIN accesses ON servers.hostname = accesses.serverHostname JOIN members ON members.groupName = accesses.groupName WHERE userId = \'' + userId + '\'', {});
result = {}
for (x in dump[0]) {
if (dump[0][x].hostname) {
if (!dump[0][x].lastPull) {
dump[0][x].lastPull = ' never'
}
result[(dump[0][x].hostname).toString()] = {
'username': dump[0][x].username,
'ip': dump[0][x].ip,
'lastPull': dump[0][x].lastPull
}
}
}
return result
}
module.exports = {
addServer,
delServer,
getServerKeys
getServerKeys,
getServerListForUserId
};

View File

@ -34,28 +34,41 @@
</div>
</div>
</div>
<div class="col-md-6 col-xl-3 mb-4">
<div class="card shadow border-start-info py-2">
<div class="card-body">
<div class="row align-items-center no-gutters">
<div class="col me-2">
<div class="text-uppercase text-warning fw-bold text-xs mb-1"><span>my servers</span></div>
<div class="row g-0 align-items-center">
<div class="col-auto">
<div class="text-dark fw-bold h5 mb-0 me-3"><span><%= Object.keys(servers).length %></span></div>
</div>
</div>
</div>
<div class="col-auto"><i class="fas fa-hdd fa-2x text-gray-300"></i></div>
</div>
</div>
</div>
</div>
</div>
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="text-primary fw-bold m-0">Server list</h6>
</div>
<ul class="list-group list-group-flush">
<% for (x in servers) { %>
<li class="list-group-item">
<div class="row align-items-center no-gutters">
<div class="col me-2">
<h6 class="mb-0"><strong>pve-iut.local</strong></h6><span class="text-xs">Granted 10 september 2023</span>
<h6 class="mb-0 text-primary"><strong><%= x %></strong></h6><span class="text-xs"><i class="fas fa-clock"> </i> <b>Last pull:</b> <%= servers[x].lastPull %></span>
</div>
<div class="col-auto"><code>root@172.17.0.1</code></div>
</div>
</li>
<li class="list-group-item">
<div class="row align-items-center no-gutters">
<div class="col me-2">
<h6 class="mb-0"><strong>vscode.pve-iut.local</strong></h6><span class="text-xs">Granted 10 september 2023</span>
</div>
<div class="col-auto"><code>root@172.17.0.2</code></div>
<div class="col-auto"><code><%= servers[x].username %>@<%= servers[x].ip %></code></div>
</div>
</li>
<% } %>
</ul>
</div>
</div>