mirror of https://github.com/itsmrval/accessGate
116 lines
3.5 KiB
JavaScript
116 lines
3.5 KiB
JavaScript
const Group = require('../model/group.model')
|
|
const Member = require('../model/member.model')
|
|
const User = require('../model/user.model')
|
|
const Server = require('../model/server.model')
|
|
const Access = require('../model/access.model')
|
|
const sequelize = require("./database.service");
|
|
|
|
const regexp_space = /^\S*$/;
|
|
|
|
|
|
async function addGroup(name) {
|
|
Group.findOne({where: { name: name}}).then((result) => {
|
|
if (result) {
|
|
return false;
|
|
} else {
|
|
if (name && regexp_space.test(name)) {
|
|
Group.create({
|
|
name: name.toLowerCase(),
|
|
}).then((result) => {
|
|
console.log('Group ' + result.name + ' added to database')
|
|
});
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
async function delGroup(name) {
|
|
Group.findOne({where: { name: name}}).then((result) => {
|
|
if (result && regexp_space.test(name)) {
|
|
result.destroy()
|
|
.then(() => {
|
|
console.log('group ' + result.name + ' added to database')
|
|
Member.findAll({where: { groupName: name}}).then((members) => {
|
|
for (x in members) {
|
|
members[x].destroy().then(() => {
|
|
console.log('member ' + members[x].userId + ' deleted from database')
|
|
})
|
|
}
|
|
});
|
|
Access.findAll({where: { groupName: name}}).then((accesses) => {
|
|
for (x in accesses) {
|
|
accesses[x].destroy().then(() => {
|
|
console.log('access ' + accesses[x].userId + ' deleted from database')
|
|
})
|
|
}
|
|
});
|
|
});
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
|
|
async function getGroupsWithMembers() {
|
|
Group.hasMany(Member);
|
|
Member.belongsTo(Group);
|
|
const count = await Group.findAll({ include: Member });
|
|
return count
|
|
}
|
|
|
|
async function getGroupsWithServers() {
|
|
Group.hasMany(Access);
|
|
Access.belongsTo(Group);
|
|
const count = await Group.findAll({ include: Access });
|
|
return count
|
|
}
|
|
|
|
|
|
|
|
|
|
async function groupUserList(groupName) {
|
|
const dump = await sequelize.query('SELECT * FROM users JOIN members ON users.id = members.userId WHERE groupName = \'' + groupName + '\'', {});
|
|
result = {}
|
|
for (x in dump[0]) {
|
|
if (dump[0][x].userId) {
|
|
result[(dump[0][x].userId).toString()] = {
|
|
'id': dump[0][x].userId,
|
|
'login': dump[0][x].login,
|
|
'avatar': dump[0][x].avatar
|
|
}
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
async function groupServerList(groupName) {
|
|
const dump = await sequelize.query('SELECT hostname, ip, username, lastPull FROM servers JOIN accesses ON servers.hostname = accesses.serverHostname WHERE groupName = \'' + groupName + '\'', {});
|
|
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 = {
|
|
addGroup,
|
|
delGroup,
|
|
groupUserList,
|
|
getGroupsWithMembers,
|
|
groupServerList,
|
|
getGroupsWithServers
|
|
|
|
}; |