bug fix group edit + ejs for

pull/1/head
Valentin 2023-09-11 23:58:01 +02:00
parent 8849d0f6e7
commit 4ffc6a41dd
6 changed files with 70 additions and 51 deletions

View File

@ -3,6 +3,7 @@ const express = require('express');
const User = require("../../model/user.model"); const User = require("../../model/user.model");
const Group = require("../../model/group.model"); const Group = require("../../model/group.model");
const Server = require("../../model/server.model"); const Server = require("../../model/server.model");
const {groupServerList} = require("../../services/groups.service");
groupService = require("../../services/groups.service"); groupService = require("../../services/groups.service");
memberService = require("../../services/members.service"); memberService = require("../../services/members.service");
@ -12,8 +13,13 @@ var router = express.Router();
router.get("/", (req, res) => { router.get("/", (req, res) => {
try { try {
groupService.getGroupsWithMembers().then((groups) => { groupService.getGroupsWithMembers().then((groups) => {
groupService.getGroupsWithServers().then((groups2) => {
for (x in groups) {
groups[x]['servers'] = groups2[x].dataValues.accesses
}
res.render('admin/groups', { "groups": groups }) res.render('admin/groups', { "groups": groups })
}) })
})
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
@ -51,23 +57,24 @@ router.get("/:name", async (req, res) => {
groupService.groupUserList(req.params.name).then((result) => { groupService.groupUserList(req.params.name).then((result) => {
User.findAll().then((users) => { User.findAll().then((users) => {
for (user in users) { for (user in users) {
if (JSON.stringify(result).includes(users[user].dataValues.id)) { if (Object.keys(result).includes(users[user].dataValues.id.toString())) {
delete users[user] delete users[user]
} }
} }
groupService.groupServerList(req.params.name).then((result2) => { groupService.groupServerList(req.params.name).then((result2) => {
Server.findAll().then((servers) => { Server.findAll().then((servers) => {
for (server in servers) { for (server in servers) {
if (JSON.stringify(result2).includes(servers[server].dataValues.hostname)) { if (Object.keys(result2).includes(servers[server].dataValues.hostname)) {
delete servers[server] delete servers[server]
} }
} }
res.render('admin/group_edit', { "group": group, "inGroup": result, "outGroup": users, "inServer": result2, "outServer": servers}); res.render('admin/group_edit', { "group": group, "inGroup": result, "outGroup": users, "inServer": result2, "outServer": servers});
}); });
})
}); });
}) })
}); });
})
;
} }
} catch(e){ } catch(e){
console.log(e) console.log(e)

View File

@ -3,6 +3,7 @@ const Member = require('../model/member.model')
const User = require('../model/user.model') const User = require('../model/user.model')
const Server = require('../model/server.model') const Server = require('../model/server.model')
const Access = require('../model/access.model') const Access = require('../model/access.model')
const sequelize = require("./database.service");
const regexp_space = /^\S*$/; const regexp_space = /^\S*$/;
@ -62,50 +63,58 @@ async function getGroupsWithMembers() {
return count return count
} }
async function getGroupsWithServers() {
Group.hasMany(Access);
Access.belongsTo(Group);
const count = await Group.findAll({ include: Access });
return count
}
async function groupUserList(groupName) { async function groupUserList(groupName) {
User.hasMany(Member); const dump = await sequelize.query('SELECT * FROM users JOIN members ON users.id = members.userId WHERE groupName = \'' + groupName + '\'', {});
Member.belongsTo(User); result = {}
const users = await User.findAll({ include: Member }); for (x in dump[0]) {
var result = [] if (dump[0][x].userId) {
for (x in users) { result[(dump[0][x].userId).toString()] = {
try { 'id': dump[0][x].userId,
for (y in users[x].dataValues.members) { 'login': dump[0][x].login,
if (users[x].dataValues.members[y].dataValues.groupName === groupName) { 'avatar': dump[0][x].avatar
result[x] = (users[x].dataValues) }
} }
} }
} catch (error) {
}}
return result return result
}; }
async function groupServerList(groupName) { async function groupServerList(groupName) {
Server.hasMany(Access); const dump = await sequelize.query('SELECT hostname, ip, username, lastPull FROM servers JOIN accesses ON servers.hostname = accesses.serverHostname WHERE groupName = \'' + groupName + '\'', {});
Access.belongsTo(Server); result = {}
const servers = await Server.findAll({ include: Access }); for (x in dump[0]) {
var result = [] if (dump[0][x].hostname) {
for (x in servers) { if (!dump[0][x].lastPull) {
try { dump[0][x].lastPull = ' never'
for (y in servers[x].dataValues.accesses) {
if (servers[x].dataValues.accesses[y].dataValues.groupName === groupName) {
result[x] = (servers[x].dataValues)
} }
result[(dump[0][x].hostname).toString()] = {
'username': dump[0][x].username,
'ip': dump[0][x].ip,
'lastPull': dump[0][x].lastPull
}
}
}
return result
} }
} catch (error) {
}} groupServerList('admin')
return result
};
module.exports = { module.exports = {
addGroup, addGroup,
delGroup, delGroup,
groupUserList, groupUserList,
getGroupsWithMembers, getGroupsWithMembers,
groupServerList groupServerList,
getGroupsWithServers
}; };

View File

@ -16,7 +16,7 @@ async function addServer(hostname, ip, username) {
} else { } else {
if (hostname && ip && username && regexp_space.test(hostname, username) && regexp_ip.test(ip)) { if (hostname && ip && username && regexp_space.test(hostname, username) && regexp_ip.test(ip)) {
var secret_generated= (Math.random() + 1).toString(36).substring(2); var secret_generated= (Math.random() + 1).toString(36).substring(2);
console.log(secret_generated) console.log('secret: TODO' + secret_generated)
Server.create({ Server.create({
hostname: hostname.toLowerCase(), hostname: hostname.toLowerCase(),
ip: ip, ip: ip,
@ -72,6 +72,8 @@ async function getServerKeys(server) {
return result return result
} }
async function getServerListForUserId(userId) { 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 + '\'', {}); 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 = {} result = {}

View File

@ -57,14 +57,14 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<% inGroup.forEach(function (member) { %> <% for (member in inGroup) { %>
<tr> <tr>
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= member.avatar %>"><%= member.login %></td> <td><img class="rounded-circle me-2" width="30" height="30" src="<%= inGroup[member].avatar %>"><%= inGroup[member].login %></td>
<td><%= member.id %></td> <td><%= inGroup[member].id %></td>
<td style="text-align: right;"><a class="btn btn-sm btn-danger" href="/admin/members/<%= group.name %>/delete/<%= member.id %>"><i class="far fa-trash-alt"></i></a></td> <td style="text-align: right;"><a class="btn btn-sm btn-danger" href="/admin/members/<%= group.name %>/delete/<%= inGroup[member].id %>"><i class="far fa-trash-alt"></i></a></td>
</tr> </tr>
<% }) %> <% } %>
</tbody> </tbody>
<tfoot> <tfoot>
<tr></tr> <tr></tr>
@ -133,15 +133,15 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<% inServer.forEach(function (access) { %> <% for (access in inServer ) { %>
<tr> <tr>
<td><%= access.hostname %></td> <td><%= access %></td>
<td><%= access.ip %></td> <td><%= inServer[access].ip %></td>
<td><%= access.user %></td> <td><%= inServer[access].username %></td>
<td style="text-align: right;"><a class="btn btn-sm btn-danger" href="/admin/accesses/<%= group.name %>/delete/<%= access.hostname %>"><i class="far fa-trash-alt"></i></a></td> <td style="text-align: right;"><a class="btn btn-sm btn-danger" href="/admin/accesses/<%= group.name %>/delete/<%= access %>"><i class="far fa-trash-alt"></i></a></td>
</tr> </tr>
<% }) %> <% } %>
</tbody> </tbody>
<tfoot> <tfoot>
<tr></tr> <tr></tr>

View File

@ -30,7 +30,7 @@
<tr> <tr>
<td><a style="text-decoration: none" href="/admin/groups/<%= group.name %>"><%= group.name %></a></td> <td><a style="text-decoration: none" href="/admin/groups/<%= group.name %>"><%= group.name %></a></td>
<td><%= group.members.length %></td> <td><%= group.members.length %></td>
<td>undefined</td> <td><%= group.servers.length %></td>
<td style="text-align: right;"><a class="btn btn-sm btn-primary" href="/admin/groups/<%= group.name %>"><i class="far fa-edit"></i></a> <a class="btn btn-sm btn-danger" href="/admin/groups/delete/<%= group.name %>"><i class="far fa-trash-alt"></i></a></td> <td style="text-align: right;"><a class="btn btn-sm btn-primary" href="/admin/groups/<%= group.name %>"><i class="far fa-edit"></i></a> <a class="btn btn-sm btn-danger" href="/admin/groups/delete/<%= group.name %>"><i class="far fa-trash-alt"></i></a></td>
</tr> </tr>
<% }) %> <% }) %>

View File

@ -38,7 +38,8 @@
<td><%= server.hostname %></td> <td><%= server.hostname %></td>
<td><%= server.ip %></td> <td><%= server.ip %></td>
<td><%= server.username %></td> <td><%= server.username %></td>
<td><%= server.lastPull %></td>
<td><%= server.lastPull %> <% if (!server.lastPull) { %>never<% } %></td>
<td style="text-align: right;"> <a class="btn btn-sm btn-danger" href="/admin/servers/delete/<%= server.hostname %>"><i class="far fa-trash-alt"></i></a></td> <td style="text-align: right;"> <a class="btn btn-sm btn-danger" href="/admin/servers/delete/<%= server.hostname %>"><i class="far fa-trash-alt"></i></a></td>
</tr> </tr>
<% }) %> <% }) %>