mirror of https://github.com/itsmrval/accessGate
multi user features
parent
05b4752183
commit
89951b45fe
|
|
@ -267,11 +267,6 @@
|
||||||
"node": ">= 10.0.0"
|
"node": ">= 10.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/bcrypt/node_modules/node-addon-api": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
|
|
||||||
},
|
|
||||||
"node_modules/body-parser": {
|
"node_modules/body-parser": {
|
||||||
"version": "1.20.2",
|
"version": "1.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
|
||||||
|
|
@ -1393,9 +1388,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-addon-api": {
|
"node_modules/node-addon-api": {
|
||||||
"version": "4.3.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
|
||||||
"integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ=="
|
"integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
|
|
@ -2063,6 +2058,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/sqlite3/node_modules/node-addon-api": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ=="
|
||||||
|
},
|
||||||
"node_modules/ssri": {
|
"node_modules/ssri": {
|
||||||
"version": "8.0.1",
|
"version": "8.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
|
||||||
|
|
|
||||||
|
|
@ -1 +1,4 @@
|
||||||
.bs-icon{--bs-icon-size:.75rem;display:flex;flex-shrink:0;justify-content:center;align-items:center;font-size:var(--bs-icon-size);width:calc(var(--bs-icon-size) * 2);height:calc(var(--bs-icon-size) * 2);color:var(--bs-primary)}.bs-icon-xs{--bs-icon-size:1rem;width:calc(var(--bs-icon-size) * 1.5);height:calc(var(--bs-icon-size) * 1.5)}.bs-icon-sm{--bs-icon-size:1rem}.bs-icon-md{--bs-icon-size:1.5rem}.bs-icon-lg{--bs-icon-size:2rem}.bs-icon-xl{--bs-icon-size:2.5rem}.bs-icon.bs-icon-primary{color:var(--bs-white);background:var(--bs-primary)}.bs-icon.bs-icon-primary-light{color:var(--bs-primary);background:rgba(var(--bs-primary-rgb),.2)}.bs-icon.bs-icon-semi-white{color:var(--bs-primary);background:rgba(255,255,255,.5)}.bs-icon.bs-icon-rounded{border-radius:.5rem}.bs-icon.bs-icon-circle{border-radius:50%}.icon-separator{font-size:0%;margin-bottom:50px}.icon-separator div{border:none;border-top:.25rem solid;width:6rem;display:inline-block}@media (max-width:280px){.icon-separator div{width:3rem}}.icon-separator i{display:inline-block;padding:0 10px;top:.3em;font-size:2rem;position:relative}
|
.bs-icon{--bs-icon-size:.75rem;display:flex;flex-shrink:0;justify-content:center;align-items:center;font-size:var(--bs-icon-size);width:calc(var(--bs-icon-size) * 2);height:calc(var(--bs-icon-size) * 2);color:var(--bs-primary)}.bs-icon-xs{--bs-icon-size:1rem;width:calc(var(--bs-icon-size) * 1.5);height:calc(var(--bs-icon-size) * 1.5)}.bs-icon-sm{--bs-icon-size:1rem}.bs-icon-md{--bs-icon-size:1.5rem}.bs-icon-lg{--bs-icon-size:2rem}.bs-icon-xl{--bs-icon-size:2.5rem}.bs-icon.bs-icon-primary{color:var(--bs-white);background:var(--bs-primary)}.bs-icon.bs-icon-primary-light{color:var(--bs-primary);background:rgba(var(--bs-primary-rgb),.2)}.bs-icon.bs-icon-semi-white{color:var(--bs-primary);background:rgba(255,255,255,.5)}.bs-icon.bs-icon-rounded{border-radius:.5rem}.bs-icon.bs-icon-circle{border-radius:50%}.icon-separator{font-size:0%;margin-bottom:50px}.icon-separator div{border:none;border-top:.25rem solid;width:6rem;display:inline-block}@media (max-width:280px){.icon-separator div{width:3rem}}.icon-separator i{display:inline-block;padding:0 10px;top:.3em;font-size:2rem;position:relative}
|
||||||
|
textarea {
|
||||||
|
resize: none;
|
||||||
|
}
|
||||||
|
|
@ -7,13 +7,37 @@ const bcrypt = require("bcrypt");
|
||||||
|
|
||||||
const serverService = require("../../services/server.service");
|
const serverService = require("../../services/server.service");
|
||||||
|
|
||||||
|
router.get("/:server/users", async (req, res) => {
|
||||||
router.get("/:server", async (req, res) => {
|
|
||||||
try {
|
try {
|
||||||
Server.findOne({ where: { hostname: req.params.server } }).then((server) => {
|
Server.findOne({ where: { hostname: req.params.server } }).then((server) => {
|
||||||
if (server) {
|
if (server) {
|
||||||
if (bcrypt.compareSync(req.body.secret, server.secret)) {
|
if (bcrypt.compareSync(req.body.secret, server.secret)) {
|
||||||
serverService.getServerKeys(req.params.server).then((result) => {
|
serverService.getServerUsers(req.params.server).then((result) => {
|
||||||
|
console.log(result[0].serverUsername)
|
||||||
|
var raw = ''
|
||||||
|
for (x in result) {
|
||||||
|
raw += '# ' + result[x].login + ' (' + result[x].userId + ')' + '\n' + result[x].serverUsername + '\n\n'
|
||||||
|
}
|
||||||
|
res.send(raw)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.send("invalid request")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res.send("invalid request")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get("/:server/key/:user", async (req, res) => {
|
||||||
|
try {
|
||||||
|
Server.findOne({ where: { hostname: req.params.server } }).then((server) => {
|
||||||
|
if (server) {
|
||||||
|
if (bcrypt.compareSync(req.body.secret, server.secret)) {
|
||||||
|
serverService.getServerUserKey(req.params.server, req.params.user).then((result) => {
|
||||||
var raw = ''
|
var raw = ''
|
||||||
for (x in result) {
|
for (x in result) {
|
||||||
raw += '# ' + x + '\n' + result[x] + '\n\n'
|
raw += '# ' + x + '\n' + result[x] + '\n\n'
|
||||||
|
|
@ -35,26 +59,6 @@ router.get("/:server", async (req, res) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/update/:server", async (req, res) => {
|
|
||||||
try {
|
|
||||||
Server.findOne({ where: { hostname: req.params.server } }).then((server) => {
|
|
||||||
if (server) {
|
|
||||||
if (bcrypt.compareSync(req.body.secret, server.secret)) {
|
|
||||||
res.send(getServerUsers(req.params.server))
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
res.send("invalid request")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
res.send("invalid request")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ async function syncUser(user) {
|
||||||
login: user.login,
|
login: user.login,
|
||||||
avatar: user.avatar_url,
|
avatar: user.avatar_url,
|
||||||
displayName: user.name,
|
displayName: user.name,
|
||||||
admin: (users.length === 1),
|
admin: (users.length === 0),
|
||||||
serverUsername: false,
|
serverUsername: user.login,
|
||||||
|
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
console.log('user ' + user.login + ' added to database')
|
console.log('user ' + user.login + ' added to database')
|
||||||
|
|
|
||||||
|
|
@ -68,8 +68,8 @@ async function delServer(hostname) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getServerKeys(server) {
|
async function getServerUserKey(server, serverUsername) {
|
||||||
const dump = await sequelize.query('SELECT name, content FROM servers JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName JOIN keys on keys.idOwner = members.userid WHERE serverHostname = \'' + server + '\'', {});
|
const dump = await sequelize.query('SELECT name, content FROM servers JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName JOIN keys on keys.idOwner = members.userid JOIN users on users.id= members.userid WHERE serverHostname = \'' + server + '\' AND serverUsername = \'' + serverUsername + '\'' , {});
|
||||||
result = {}
|
result = {}
|
||||||
console.log(dump)
|
console.log(dump)
|
||||||
for (x in dump) {
|
for (x in dump) {
|
||||||
|
|
@ -85,7 +85,7 @@ async function getServerKeys(server) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getServerUsers(server) {
|
async function getServerUsers(server) {
|
||||||
const dump = await sequelize.query('SELECT DISTINCT serverUsername FROM servers JOIN users on users.id = members.userId JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName WHERE serverHostname = \'' + server + '\'', {});
|
const dump = await sequelize.query('SELECT DISTINCT login, userId, serverUsername FROM servers JOIN users on users.id = members.userId JOIN accesses on accesses.serverHostname = servers.hostname JOIN members on members.groupName = accesses.groupName WHERE serverHostname = \'' + server + '\'', {});
|
||||||
return dump[0]
|
return dump[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -114,7 +114,7 @@ module.exports = {
|
||||||
getServerUsers,
|
getServerUsers,
|
||||||
addServer,
|
addServer,
|
||||||
delServer,
|
delServer,
|
||||||
getServerKeys,
|
getServerUserKey,
|
||||||
getServerListForUserId,
|
getServerListForUserId,
|
||||||
serverSecretDestroy
|
serverSecretDestroy
|
||||||
};
|
};
|
||||||
|
|
@ -27,12 +27,11 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= key.name %></td>
|
<td><%= key.name %></td>
|
||||||
|
|
||||||
<td><textarea class="form-control" rows="1" disabled><%= key.content %></textarea></td>
|
<td><textarea class="form-control" disabled><%= key.content %></textarea></td>
|
||||||
|
|
||||||
<td style="text-align: right;"><a class="btn btn-sm btn-danger" href="/keys/delete/<%= key.name %>"><i class="far fa-trash-alt"></i></button></td>
|
<td style="text-align: right;"><a class="btn btn-sm btn-danger" href="/keys/delete/<%= key.name %>"><i class="far fa-trash-alt"></i></button></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% }) %>
|
<% }) %>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue