mirror of https://github.com/itsmrval/accessGate
bug fix when multiple memberships & minors
parent
a3b8a865fd
commit
c8efefdc4e
1
index.js
1
index.js
|
|
@ -65,7 +65,6 @@ app.get("/login", (req, res) => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
app.use('/admin/', require('./routes/admin.route'));
|
app.use('/admin/', require('./routes/admin.route'));
|
||||||
app.use('/auth/', require('./routes/auth.route'));
|
app.use('/auth/', require('./routes/auth.route'));
|
||||||
app.use('/keys/', require('./routes/keys.route'));
|
app.use('/keys/', require('./routes/keys.route'));
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,9 @@ class Member extends Model {}
|
||||||
Member.init({
|
Member.init({
|
||||||
groupName: {
|
groupName: {
|
||||||
type: DataTypes.STRING,
|
type: DataTypes.STRING,
|
||||||
required: true,
|
|
||||||
},
|
},
|
||||||
userId: {
|
userId: {
|
||||||
type: DataTypes.INTEGER,
|
type: DataTypes.INTEGER,
|
||||||
required: true,
|
|
||||||
},
|
},
|
||||||
role: {
|
role: {
|
||||||
type: DataTypes.STRING,
|
type: DataTypes.STRING,
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
const express = require('express');
|
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 keyService = require("../services/keys.service");
|
|
||||||
groupService = require("../services/group.service");
|
groupService = require("../services/group.service");
|
||||||
const Member = require("../model/member.model");
|
const Member = require("../model/member.model");
|
||||||
|
memberService = require("../services/members.service");
|
||||||
var router = express.Router();
|
var router = express.Router();
|
||||||
|
|
||||||
router.use('*', (req, res, next) => {
|
router.use('*', (req, res, next) => {
|
||||||
|
|
@ -22,9 +21,10 @@ router.use('*', (req, res, next) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.get("/users", (req, res) => {
|
router.get("/users",async (req, res) => {
|
||||||
User.findAll().then((users) => {
|
User.findAll().then((users) => {
|
||||||
res.render('admin/users', { "users": users})
|
res.render('admin/users', { "users": users})
|
||||||
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -46,6 +46,7 @@ router.post("/groups/add", (req, res) => {
|
||||||
|
|
||||||
router.get("/groups/delete/:group", (req, res) => {
|
router.get("/groups/delete/:group", (req, res) => {
|
||||||
groupService.delGroup(req.params.group).then((result) => {
|
groupService.delGroup(req.params.group).then((result) => {
|
||||||
|
|
||||||
res.redirect("/admin/groups")
|
res.redirect("/admin/groups")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -75,48 +76,15 @@ router.get("/groups/:name", async (req, res) => {
|
||||||
})
|
})
|
||||||
|
|
||||||
router.get('/members/:name/add/:user', (req, res) => {
|
router.get('/members/:name/add/:user', (req, res) => {
|
||||||
Group.findOne({ where: { name: req.params.name } }).then((result) => {
|
memberService.addMember(req.params.user, req.params.name).then((result) => {
|
||||||
if (result) {
|
res.redirect('/admin/groups/' + req.params.name)
|
||||||
User.findOne({ where: { id: req.params.user } }).then((user) => {
|
|
||||||
if (user) {
|
|
||||||
Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => {
|
|
||||||
if (!member) {
|
|
||||||
Member.create({
|
|
||||||
userId: user.id,
|
|
||||||
groupName: result.name
|
|
||||||
}).then((member) => {
|
|
||||||
console.log('member added to database' + '(' + member.userId + ',' + member.groupName + ')')
|
|
||||||
res.redirect('/admin/groups/' + result.name)
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
router.get('/members/:name/delete/:user', (req, res) => {
|
router.get('/members/:name/delete/:user', (req, res) => {
|
||||||
Group.findOne({ where: { name: req.params.name } }).then((result) => {
|
memberService.delMember(req.params.user, req.params.name).then((result) => {
|
||||||
if (result) {
|
res.redirect('/admin/groups/' + req.params.name)
|
||||||
User.findOne({ where: { id: req.params.user } }).then((user) => {
|
|
||||||
if (user) {
|
|
||||||
Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => {
|
|
||||||
if (member) {
|
|
||||||
Member.destroy({ where: { groupname: result.name, userId: user.id }}).then((member) => {
|
|
||||||
console.log('member deleted from database' + '(' + member.userId + ',' + member.groupName + ')')
|
|
||||||
res.redirect('/admin/groups/' + result.name)
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ const Sequelize = require('sequelize');
|
||||||
const sequelize = new Sequelize('accessgate', 'user', 'password', {
|
const sequelize = new Sequelize('accessgate', 'user', 'password', {
|
||||||
dialect: 'sqlite',
|
dialect: 'sqlite',
|
||||||
host: './database.db',
|
host: './database.db',
|
||||||
logging: false
|
logging: true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
const Group = require('../model/group.model')
|
const Group = require('../model/group.model')
|
||||||
const Members = require('../model/member.model')
|
const Member = require('../model/member.model')
|
||||||
const regexp = /^\S*$/;
|
const regexp = /^\S*$/;
|
||||||
const User = require('../model/user.model')
|
const User = require('../model/user.model')
|
||||||
|
|
||||||
|
|
@ -28,6 +28,13 @@ async function delGroup(name) {
|
||||||
result.destroy()
|
result.destroy()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log('group ' + result.name + ' added to database')
|
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')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -37,23 +44,39 @@ async function delGroup(name) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function groupUserList(groupName) {
|
async function userGroupList(userId) {
|
||||||
User.hasMany(Members);
|
const members = await Member.findAll({where: { userId: userId}})
|
||||||
Members.belongsTo(User);
|
|
||||||
const users = await User.findAll({ include: Members });
|
|
||||||
var result = []
|
var result = []
|
||||||
|
for (x in members) {
|
||||||
|
result[x] = (members[x].dataValues)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async function groupUserList(groupName) {
|
||||||
|
User.hasMany(Member);
|
||||||
|
Member.belongsTo(User);
|
||||||
|
const users = await User.findAll({ include: Member });
|
||||||
|
var result = []
|
||||||
|
console.log(users)
|
||||||
for (x in users) {
|
for (x in users) {
|
||||||
try {
|
try {
|
||||||
if (users[x].dataValues.members[0].dataValues.groupName === groupName) {
|
for (y in users[x].dataValues.members) {
|
||||||
|
if (users[x].dataValues.members[y].dataValues.groupName === groupName) {
|
||||||
result[x] = (users[x].dataValues)
|
result[x] = (users[x].dataValues)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
}}
|
}}
|
||||||
|
console.log(result)
|
||||||
return result
|
return result
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
addGroup,
|
addGroup,
|
||||||
delGroup,
|
delGroup,
|
||||||
groupUserList
|
groupUserList,
|
||||||
|
userGroupList
|
||||||
};
|
};
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
const Member = require('../model/member.model')
|
||||||
|
const Group = require("../model/group.model");
|
||||||
|
const User = require("../model/user.model");
|
||||||
|
|
||||||
|
const regexp = /^\S*$/;
|
||||||
|
|
||||||
|
async function addMember(userId, groupName) {
|
||||||
|
Group.findOne({ where: { name: groupName} }).then((result) => {
|
||||||
|
if (result) {
|
||||||
|
User.findOne({ where: { id: userId } }).then((user) => {
|
||||||
|
if (user) {
|
||||||
|
Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => {
|
||||||
|
if (!member) {
|
||||||
|
Member.create({
|
||||||
|
userId: user.id,
|
||||||
|
groupName: result.name
|
||||||
|
}).then((member) => {
|
||||||
|
console.log('member added to database' + '(' + member.userId + ',' + member.groupName + ')')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function delMember(userId, groupName) {
|
||||||
|
Group.findOne({ where: { name: groupName} }).then((result) => {
|
||||||
|
if (result) {
|
||||||
|
User.findOne({ where: { id: userId } }).then((user) => {
|
||||||
|
if (user) {
|
||||||
|
Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => {
|
||||||
|
if (member) {
|
||||||
|
member.destroy()
|
||||||
|
.then(() => {
|
||||||
|
console.log('member deleted from database' + '(' + member.userId + ',' + member.groupName + ')')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
addMember,
|
||||||
|
delMember
|
||||||
|
};
|
||||||
|
|
@ -15,7 +15,7 @@ function makeAdmin(userId) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
userList,
|
|
||||||
makeAdmin
|
makeAdmin
|
||||||
};
|
};
|
||||||
|
|
@ -25,15 +25,15 @@
|
||||||
<table class="table my-0" id="tableEnabled">
|
<table class="table my-0" id="tableEnabled">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Display name</th>
|
<th>Username</th>
|
||||||
<th>github id</th>
|
<th>id</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% outGroup.forEach(function (member) { %>
|
<% outGroup.forEach(function (member) { %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= member.avatar %>"><%= member.displayName %></td>
|
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= member.avatar %>"><%= member.login %></td>
|
||||||
<td><%= member.id %></td>
|
<td><%= member.id %></td>
|
||||||
<td style="text-align: right;"><a class="btn btn-sm btn-success" href="/admin/members/<%= group.name %>/add/<%= member.id %>"><i class="text-white fa fa-plus"></i></button></td>
|
<td style="text-align: right;"><a class="btn btn-sm btn-success" href="/admin/members/<%= group.name %>/add/<%= member.id %>"><i class="text-white fa fa-plus"></i></button></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -44,7 +44,6 @@
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3"><button class="btn btn-primary btn-sm" type="submit">Update group</button></div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
|
@ -64,15 +63,15 @@
|
||||||
<table class="table my-0" id="tableEnabled">
|
<table class="table my-0" id="tableEnabled">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Display name</th>
|
<th>username</th>
|
||||||
<th>github id</th>
|
<th>id</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% inGroup.forEach(function (member) { %>
|
<% inGroup.forEach(function (member) { %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= member.avatar %>"><%= member.displayName %></td>
|
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= member.avatar %>"><%= member.login %></td>
|
||||||
<td><%= member.id %></td>
|
<td><%= 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/<%= member.id %>"><i class="far fa-trash-alt"></i></a></td>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,22 +22,19 @@
|
||||||
<table class="table my-0" id="tableEnabled">
|
<table class="table my-0" id="tableEnabled">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Display name</th>
|
<th>Username</th>
|
||||||
<th>github id</th>
|
<th>id</th>
|
||||||
<th>Admin</th>
|
<th>Admin</th>
|
||||||
<th>Groups</th>
|
|
||||||
<th>Last login</th>
|
<th>Last login</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% users.forEach(function (user) { %>
|
<% users.forEach(function (user) { %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= user.avatar %>"><%= user.displayName %></td>
|
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= user.avatar %>"><%= user.login %></td>
|
||||||
<td><%= user.id %></td>
|
<td><%= user.id %></td>
|
||||||
<td><%= user.admin %></td>
|
<td><%= user.admin %></td>
|
||||||
<td>
|
|
||||||
<span class="badge bg-primary">admin</span>
|
|
||||||
</td>
|
|
||||||
<td><%= user.updatedAt %></td>
|
<td><%= user.updatedAt %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% }) %>
|
<% }) %>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue