sync
This commit is contained in:
@@ -27,6 +27,10 @@ User.init({
|
|||||||
type: DataTypes.STRING,
|
type: DataTypes.STRING,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
serverUsername : {
|
||||||
|
type: DataTypes.STRING,
|
||||||
|
required: true,
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
sequelize,
|
sequelize,
|
||||||
modelName: 'user'
|
modelName: 'user'
|
||||||
|
|||||||
@@ -51,7 +51,10 @@ router.get("/", (req, res) => {
|
|||||||
|
|
||||||
router.post("/add", (req, res) => {
|
router.post("/add", (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (req.body.server_hostname && req.body.server_ip && req.body.server_username) {
|
if (req.body.server_hostname && req.body.server_ip && req.body.server_multi && req.body.server_username) {
|
||||||
|
if (req.body.server_multi === 'true') {
|
||||||
|
req.body.server_username = "accessGateMultiuser"
|
||||||
|
}
|
||||||
serverService.addServer(req.body.server_hostname, req.body.server_ip, req.body.server_username).then((secret) => {
|
serverService.addServer(req.body.server_hostname, req.body.server_ip, req.body.server_username).then((secret) => {
|
||||||
res.redirect(url.format({
|
res.redirect(url.format({
|
||||||
pathname:'/admin/servers',
|
pathname:'/admin/servers',
|
||||||
@@ -60,7 +63,6 @@ router.post("/add", (req, res) => {
|
|||||||
"alert": "secretDisplay"
|
"alert": "secretDisplay"
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
res.redirect(url.format({
|
res.redirect(url.format({
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ router.get("/",async (req, res) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
router.get("/delete/:userId", (req, res) => {
|
router.get("/delete/:userId", (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (req.params.userId != req.session.user.id) {
|
if (req.params.userId != req.session.user.id) {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ router.get("/callback", async (req, res) => {
|
|||||||
req.session.admin = user.admin;
|
req.session.admin = user.admin;
|
||||||
res.redirect("/");
|
res.redirect("/");
|
||||||
} else {
|
} else {
|
||||||
res.send("An error occured");
|
res.send("An error occurred");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
|
|||||||
@@ -35,6 +35,25 @@ 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;
|
||||||
|
|
||||||
|
|||||||
@@ -32,19 +32,19 @@ async function syncUser(user) {
|
|||||||
console.log('user ' + user.login + ' updated in database')
|
console.log('user ' + user.login + ' updated in database')
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
User.findAll().then((users) => {
|
||||||
User.create({
|
User.create({
|
||||||
id: user.id,
|
id: user.id,
|
||||||
login: user.login,
|
login: user.login,
|
||||||
avatar: user.avatar_url,
|
avatar: user.avatar_url,
|
||||||
displayName: user.name
|
displayName: user.name,
|
||||||
|
admin: (users.length === 1),
|
||||||
|
serverUsername: false,
|
||||||
|
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
User.findAll().then((users) => {
|
|
||||||
if (users.length === 1) {
|
|
||||||
userService.makeAdmin(user.login)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
console.log('user ' + user.login + ' added to database')
|
console.log('user ' + user.login + ' added to database')
|
||||||
});
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,12 @@ async function getServerKeys(server) {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 + '\'', {});
|
||||||
|
return dump[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
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 = {}
|
||||||
@@ -105,6 +111,7 @@ async function getServerListForUserId(userId) {
|
|||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
getServerUsers,
|
||||||
addServer,
|
addServer,
|
||||||
delServer,
|
delServer,
|
||||||
getServerKeys,
|
getServerKeys,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<h3 class="text-dark mb-4"><a style="text-decoration: none" href="/admin/groups">Servers</a> / new </h3>
|
<h3 class="text-dark mb-4"><a style="text-decoration: none" href="/admin/groups">Servers</a> / new </h3>
|
||||||
<div class="card shadow mb-5">
|
<div class="card shadow">
|
||||||
<div class="card-header py-3">
|
<div class="card-header py-3">
|
||||||
<p class="text-primary m-0 fw-bold">Server editing</p>
|
<p class="text-primary m-0 fw-bold">Server editing</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -15,12 +15,32 @@
|
|||||||
<div class="mb-3"><button class="btn btn-primary btn-sm" type="submit">Create server</button></div>
|
<div class="mb-3"><button class="btn btn-primary btn-sm" type="submit">Create server</button></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="mb-3"><label class="form-label"><strong>User</strong></label><input class="form-control" placeholder="root" type="text" name="server_username"></div>
|
<div class="mb-3">
|
||||||
|
<label class="form-label"><strong>User configuration</strong></label>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="radio" value="true" name="server_multi" id="server_user_false" checked>
|
||||||
|
<label class="form-check-label" for="server_user_false">
|
||||||
|
Per user key
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="radio" value="false" name="server_multi" id="server_user_true">
|
||||||
|
<label class="form-check-label" for="server_user_true">
|
||||||
|
Only one user key
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div id="inputOther" style="display: none">
|
||||||
|
<div class="mb-3"><label class="form-label"><strong>User</strong></label><input class="form-control" value="root" type="text" name="server_username"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%- include('../footer'); %>
|
<%- include('../footer'); %>
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
<th>username</th>
|
<th>username</th>
|
||||||
<th>id</th>
|
<th>id</th>
|
||||||
<th>admin</th>
|
<th>admin</th>
|
||||||
|
<th>server user</th>
|
||||||
<th>updated</th>
|
<th>updated</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -40,7 +41,8 @@
|
|||||||
<td><img class="rounded-circle me-2" width="30" height="30" src="<%= user.avatar %>"><%= user.login %></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><%= user.updatedAt %></td>
|
<td><%= user.serverUsername %></td>
|
||||||
|
<td><%= new Date(user.updatedAt).toLocaleString() %></td>
|
||||||
<td style="text-align: right;"><a class="btn btn-sm btn-primary" href="/admin/users/<%= user.id %>"><i class="fas fa-key"></i></a> <a class="btn btn-sm btn-danger" href="/admin/users/delete/<%= user.id %>"><i class="far fa-trash-alt"></i></a></td>
|
<td style="text-align: right;"><a class="btn btn-sm btn-primary" href="/admin/users/<%= user.id %>"><i class="fas fa-key"></i></a> <a class="btn btn-sm btn-danger" href="/admin/users/delete/<%= user.id %>"><i class="far fa-trash-alt"></i></a></td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -29,18 +29,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function resizeTextArea(textarea) {
|
$( "#server_user_false" ).on( "click", function() {
|
||||||
const { style, value } = textarea;
|
document.getElementById("inputOther").style.display = "none";
|
||||||
style.height = style.minHeight = 'auto';
|
|
||||||
style.minHeight = `${ Math.min(textarea.scrollHeight + 4, parseInt(textarea.style.maxHeight)) }px`;
|
|
||||||
style.height = `${ textarea.scrollHeight + 4 }px`;
|
|
||||||
}
|
|
||||||
|
|
||||||
const textarea = document.getElementById('textarea');
|
|
||||||
|
|
||||||
textarea.addEventListener('input', () => {
|
|
||||||
resizeTextArea(textarea);
|
|
||||||
} );
|
} );
|
||||||
|
$( "#server_user_true" ).on( "click", function() {
|
||||||
|
document.getElementById("inputOther").style.display = "";
|
||||||
|
} );
|
||||||
|
function fieldShow(value) {
|
||||||
|
console.log(value)
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Reference in New Issue
Block a user