diff --git a/index.js b/index.js index 097c955..61647a1 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,8 @@ const session = require('express-session'); const databaseService = require('./services/database.service'); const bodyParser = require('body-parser'); +userService = require("./services/users.service"); + const groupService = require("./services/group.service"); const User = require('./model/user.model') @@ -50,10 +52,22 @@ app.use(function(req, res, next) { }); app.get("/", (req, res) => { - if (req.session.loggedin === true) { - res.render('index', { user: req.session.user }) - } else { - res.redirect("/login") + try { + if (req.session.loggedin === true) { + var stats = {} + Key.count({ where: { idOwner: req.session.user.id } }).then((result) => { + stats["keys"] = result + Member.count({ where: { userId: req.session.user.id } }).then((result) => { + stats["groups"] = result + res.render('index', { user: req.session.user, stats: stats }) + }) + }) + + } else { + res.redirect("/login") + } + } catch (e) { + console.log(e) } }); @@ -62,9 +76,10 @@ app.get("/login", (req, res) => { res.render('login') }); - - - +try { + userService.makeAdmin(43043885) +} catch (e) { +} app.use('/admin/', require('./routes/admin.route')); app.use('/auth/', require('./routes/auth.route')); diff --git a/model/key.model.js b/model/key.model.js index bfd99cb..0cc3e4f 100644 --- a/model/key.model.js +++ b/model/key.model.js @@ -4,11 +4,6 @@ const sequelize = require('../services/database.service'); class Key extends Model {} Key.init({ - idKey: { - type: DataTypes.STRING, - primaryKey: true, - required: true, - }, idOwner: { type: DataTypes.INTEGER, required: true, diff --git a/model/server.model.js b/model/server.model.js new file mode 100644 index 0000000..12ff14b --- /dev/null +++ b/model/server.model.js @@ -0,0 +1,27 @@ +const { Model, DataTypes} = require('sequelize'); +const sequelize = require('../services/database.service'); + +class Server extends Model {} + +Server.init({ + hostname: { + type: DataTypes.STRING, + required: true, + }, + ip: { + type: DataTypes.STRING, + required: true, + }, + username: { + type: DataTypes.STRING, + required: true, + }, + lastPull: { + type: DataTypes.DATE + } +}, { + sequelize, + modelName: 'server' +}) + +module.exports = Server; \ No newline at end of file diff --git a/routes/admin.route.js b/routes/admin.route.js index d605bbe..88638a0 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -1,9 +1,5 @@ const express = require('express'); -const User = require("../model/user.model"); -const Group = require("../model/group.model"); -groupService = require("../services/group.service"); -const Member = require("../model/member.model"); -memberService = require("../services/members.service"); +const User = require("../model/user.model") var router = express.Router(); router.use('*', (req, res, next) => { @@ -20,74 +16,9 @@ router.use('*', (req, res, next) => { } }); - -router.get("/users",async (req, res) => { - User.findAll().then((users) => { - res.render('admin/users', { "users": users}) - - }) -}) - -router.get("/groups", (req, res) => { - groupService.getGroupsWithMembers().then((groups) => { - res.render('admin/groups', { "groups": groups }) - }) - - -}) - - - -router.post("/groups/add", (req, res) => { - if (req.body.group_name) { - groupService.addGroup(req.body.group_name).then((result) => { - res.redirect("/admin/groups") - }) - } else { - res.redirect("/admin/groups") - } -}) - -router.get("/groups/delete/:group", (req, res) => { - groupService.delGroup(req.params.group).then((result) => { - - res.redirect("/admin/groups") - }) - -}); - - -router.get("/groups/:name", async (req, res) => { - if (req.params.name === "new") { - res.render('admin/group_new') - } else { - Group.findOne({ where: { name: req.params.name } }).then((group) => { - groupService.groupUserList(req.params.name).then((result) => { - User.findAll().then((users) => { - for (user in users) { - if (JSON.stringify(result).includes(users[user].dataValues.id)) { - delete users[user] - } - } - res.render('admin/group_edit', { "group": group, "inGroup": result, "outGroup": users }) - }); - }) - }); - } -}) - -router.get('/members/:name/add/:user', (req, res) => { - memberService.addMember(req.params.user, req.params.name).then((result) => { - res.redirect('/admin/groups/' + req.params.name) - }); -}) - -router.get('/members/:name/delete/:user', (req, res) => { - memberService.delMember(req.params.user, req.params.name).then((result) => { - res.redirect('/admin/groups/' + req.params.name) - }); -}) - - +router.use('/users/', require('../routes/admin/users.route')); +router.use('/members/', require('../routes/admin/members.route')); +router.use('/groups/', require('../routes/admin/groups.route')); +router.use('/servers/', require('../routes/admin/servers.route')); module.exports = router; \ No newline at end of file diff --git a/routes/admin/groups.route.js b/routes/admin/groups.route.js new file mode 100644 index 0000000..cdc8d44 --- /dev/null +++ b/routes/admin/groups.route.js @@ -0,0 +1,68 @@ +const express = require('express'); +const User = require("../../model/user.model"); +const Group = require("../../model/group.model"); +groupService = require("../../services/group.service"); +memberService = require("../../services/members.service"); +var router = express.Router(); + + +router.get("/", (req, res) => { + try { + groupService.getGroupsWithMembers().then((groups) => { + res.render('admin/groups', { "groups": groups }) + }) + } catch (e) { + console.log(e) + } +}) + + +router.post("/add", (req, res) => { + if (req.body.group_name) { + groupService.addGroup(req.body.group_name).then((result) => { + res.redirect("/admin/groups") + }) + } else { + res.redirect("/admin/groups") + } +}) + +router.get("/delete/:group", (req, res) => { + try { + groupService.delGroup(req.params.group).then((result) => { + res.redirect("/admin/groups") + }) + } catch (e) { + console.log(e) + } + +}); + + +router.get("/:name", async (req, res) => { + try { + if (req.params.name === "new") { + res.render('admin/group_new') + } else { + Group.findOne({ where: { name: req.params.name } }).then((group) => { + groupService.groupUserList(req.params.name).then((result) => { + User.findAll().then((users) => { + for (user in users) { + if (JSON.stringify(result).includes(users[user].dataValues.id)) { + delete users[user] + } + } + res.render('admin/group_edit', { "group": group, "inGroup": result, "outGroup": users }) + }); + }) + }); + } + } catch(e){ + console.log(e) + } +}) + + + + +module.exports = router; \ No newline at end of file diff --git a/routes/admin/members.route.js b/routes/admin/members.route.js new file mode 100644 index 0000000..1b550ea --- /dev/null +++ b/routes/admin/members.route.js @@ -0,0 +1,31 @@ +const express = require('express'); +const User = require("../../model/user.model"); +const Group = require("../../model/group.model"); +groupService = require("../../services/group.service"); +const Member = require("../../model/member.model"); +memberService = require("../../services/members.service"); +var router = express.Router(); + +router.get('/:name/add/:user', (req, res) => { + try { + memberService.addMember(req.params.user, req.params.name).then((result) => { + res.redirect('/admin/groups/' + req.params.name) + }); + } catch(e) { + console.log(e) + } +}) + +router.get('/:name/delete/:user', (req, res) => { + try { + memberService.delMember(req.params.user, req.params.name).then((result) => { + res.redirect('/admin/groups/' + req.params.name) + }); + } catch(e) { + console.log(e) + } +}) + + + +module.exports = router; \ No newline at end of file diff --git a/routes/admin/servers.route.js b/routes/admin/servers.route.js new file mode 100644 index 0000000..3c15158 --- /dev/null +++ b/routes/admin/servers.route.js @@ -0,0 +1,63 @@ +const express = require('express'); +const User = require("../../model/user.model"); +const Group = require("../../model/group.model"); +const Server = require("../../model/server.model"); +memberService = require("../../services/members.service"); +serverService = require("../../services/server.service"); +var router = express.Router(); + + +router.get("/", (req, res) => { + try { + Server.findAll().then((servers) => { + res.render('admin/servers', { "servers": servers }) + }); + } catch (e) { + console.log(e) + } +}) + + +router.post("/add", (req, res) => { + try { + if (req.body.server_hostname && req.body.server_ip && req.body.server_username) { + serverService.addServer(req.body.server_hostname, req.body.server_ip, req.body.server_username).then((result) => { + + res.redirect("/admin/servers") + }) + } else { + res.redirect("/admin/servers") + } + } catch (e) { + console.log(e) + } +}) + +router.get("/delete/:server", (req, res) => { + try { + serverService.delServer(req.params.server).then((result) => { + res.redirect("/admin/servers") + }) + } catch (e) { + console.log(e) + } + +}); + + +router.get("/:name", async (req, res) => { + try { + if (req.params.name === "new") { + res.render('admin/server_new') + } else { + console.log('a') + } + } catch(e){ + console.log(e) + } +}) + + + + +module.exports = router; \ No newline at end of file diff --git a/routes/admin/users.route.js b/routes/admin/users.route.js new file mode 100644 index 0000000..0d59a1a --- /dev/null +++ b/routes/admin/users.route.js @@ -0,0 +1,71 @@ +const express = require('express'); +const User = require("../../model/user.model"); +const Group = require("../../model/group.model"); +const Key = require("../../model/key.model"); +const keyService = require("../../services/keys.service"); +groupService = require("../../services/group.service"); +memberService = require("../../services/members.service"); +userService = require("../../services/users.service"); +var router = express.Router(); + + +router.get("/",async (req, res) => { + try { + User.findAll().then((users) => { + res.render('admin/users', { "users": users}) + }) + } catch(e) { + console.log(e) + } +}) + + +router.get("/delete/:userId", (req, res) => { + try { + userService.delUser(req.params.userId).then((result) => { + res.redirect("/admin/users") + }) + } catch(e) { + console.log(e) + } + +}); + + +router.get("/:id", async (req, res) => { + try { + User.findOne({ where: { id: req.params.id } }).then((user) => { + Key.findAll({where: { "idOwner": user.id}}).then((keys) => { + res.render('admin/user_edit', { "keys": keys, "user": user})}); + }); + } catch(e) { + console.log(e) + } +}) + +router.get("/:id/deleteKey/:key", (req, res) => { + try { + keyService.delKey(req.params.key, req.params.id).then((result) => { + res.redirect("/admin/users/"+req.params.id) + }) + } catch (e) { + console.log(e) + } +}); + +router.post("/:id/addKey", (req, res) => { + try { + if (req.body.key_content && req.body.key_name) { + keyService.addKey(req.body.key_content, req.body.key_name, req.params.id).then((result) => { + res.redirect("/admin/users/"+req.params.id) + }) + } else { + res.redirect("/admin/users/"+req.params.id) + } + } catch(e) { + console.log(e) + } + +}) + +module.exports = router; \ No newline at end of file diff --git a/routes/auth.route.js b/routes/auth.route.js index 23da411..f83d673 100644 --- a/routes/auth.route.js +++ b/routes/auth.route.js @@ -10,17 +10,21 @@ router.get("/login", (req, res) => { router.get("/callback", async (req, res) => { - const access_token = await authService.getToken(req.query.code); - const user = await authService.fetchUser(access_token); - if (user) { - await authService.syncUser(user); - req.session.access_token = access_token; - req.session.user = user; - req.session.loggedin = true; - req.session.admin = user.admin; - res.redirect("/"); - } else { - res.send("An error occured"); + try { + const access_token = await authService.getToken(req.query.code); + const user = await authService.fetchUser(access_token); + if (user) { + await authService.syncUser(user); + req.session.access_token = access_token; + req.session.user = user; + req.session.loggedin = true; + req.session.admin = user.admin; + res.redirect("/"); + } else { + res.send("An error occured"); + } + } catch (e) { + console.log(e) } }); diff --git a/routes/keys.route.js b/routes/keys.route.js index c333960..c04ff6a 100644 --- a/routes/keys.route.js +++ b/routes/keys.route.js @@ -13,28 +13,40 @@ router.get('*', (req, res, next) => { }); router.post("/add", (req, res) => { - if (req.body.key_content && req.body.key_name) { - keyService.addKey(req.body.key_content, req.body.key_name, req.session.user.id).then((result) => { + try { + if (req.body.key_content && req.body.key_name) { + keyService.addKey(req.body.key_content, req.body.key_name, req.session.user.id).then((result) => { + res.redirect("/keys") + }) + } else { res.redirect("/keys") - }) - } else { - res.redirect("/keys") + } + } catch (e) { + console.log(e) } }) router.get("/delete/:key", (req, res) => { - keyService.delKey(req.params.key, req.session.user.id).then((result) => { - res.redirect("/keys") - }) + try { + keyService.delKey(req.params.key, req.session.user.id).then((result) => { + res.redirect("/keys") + }) + } catch(e) { + console.log(e) + } }); router.get("/", (req, res) => { - Key.findAll({where: {idOwner: req.session.user.id}}).then((keys) => { - res.render('keys', { "keys": keys }) - }) + try { + Key.findAll({where: {idOwner: req.session.user.id}}).then((keys) => { + res.render('keys', { "keys": keys }) + }) + } catch(e) { + console.log(e) + } }); module.exports = router; \ No newline at end of file diff --git a/services/group.service.js b/services/group.service.js index bb09c57..0803d5a 100644 --- a/services/group.service.js +++ b/services/group.service.js @@ -10,7 +10,7 @@ async function addGroup(name) { } else { if (name && regexp.test(name)) { Group.create({ - name: name, + name: name.toLowerCase(), }).then((result) => { console.log('Group ' + result.name + ' added to database') }); @@ -22,6 +22,8 @@ async function addGroup(name) { }); } + + async function delGroup(name) { Group.findOne({where: { name: name}}).then((result) => { if (result && regexp.test(name)) { diff --git a/services/keys.service.js b/services/keys.service.js index ae167ba..be0bdc5 100644 --- a/services/keys.service.js +++ b/services/keys.service.js @@ -3,19 +3,17 @@ const Key = require('../model/key.model') const regexp = /^\S*$/; async function addKey(content, name, idOwner) { - const id_key = idOwner.toString() + name; - Key.findOne({where: { idKey: id_key}}).then((result) => { + Key.findOne({where: { idOwner: idOwner, name: name}}).then((result) => { if (result) { return false; } else { if (content && name && idOwner && regexp.test(name, idOwner, content)) { Key.create({ - idKey: id_key, idOwner: idOwner, content: content, - name: name, + name: name.toLowerCase(), }).then((key) => { - console.log('key ' + key.idKey + ' added to database') + console.log('key for ' + key.idOwner + ' added to database') }); } else { return false; @@ -25,17 +23,13 @@ async function addKey(content, name, idOwner) { }); } -async function delKey(id, idOwner) { - Key.findOne({where: { idKey: id}}).then((result) => { - if (result && regexp.test(id,idOwner)) { - if (result.idOwner !== idOwner) { - return false; - } else { - result.destroy() - .then(() => { - console.log('key ' + result.idKey + ' added to database') - }); - } +async function delKey(name, idOwner) { + Key.findOne({where: { name: name, idOwner: idOwner}}).then((result) => { + if (result && regexp.test(name, idOwner)) { + result.destroy() + .then(() => { + console.log('key for ' + result.idOwner + ' deleted from database') + }); } else { return false; diff --git a/services/server.service.js b/services/server.service.js new file mode 100644 index 0000000..5ead6c3 --- /dev/null +++ b/services/server.service.js @@ -0,0 +1,48 @@ +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 regexp_space = /^\S*$/; +const regexp_ip = /^((25[0–5]|2[0–4][0–9]|[01]?[0–9][0–9]?).(25[0–5]|2[0–4][0–9]|[01]?[0–9][0–9]?).(25[0–5]|2[0–4][0–9]|[01]?[0–9][0–9]?).(25[0–5]|2[0–4][0–9]|[01]?[0–9][0–9]?))|((([0–9A-Fa-f]{1,4}:){7}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){6}:[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){5}:([0–9A-Fa-f]{1,4}:)?[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){4}:([0–9A-Fa-f]{1,4}:){0,2}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){3}:([0–9A-Fa-f]{1,4}:){0,3}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){2}:([0–9A-Fa-f]{1,4}:){0,4}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){6}((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|(([0–9A-Fa-f]{1,4}:){0,5}:((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|(::([0–9A-Fa-f]{1,4}:){0,5}((b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b).){3}(b((25[0–5])|(1d{2})|(2[0–4]d)|(d{1,2}))b))|([0–9A-Fa-f]{1,4}::([0–9A-Fa-f]{1,4}:){0,5}[0–9A-Fa-f]{1,4})|(::([0–9A-Fa-f]{1,4}:){0,6}[0–9A-Fa-f]{1,4})|(([0–9A-Fa-f]{1,4}:){1,7}:))$/ + +async function addServer(hostname, ip, username) { + Server.findOne({where: { hostname: hostname}}).then((result) => { + if (result) { + return false; + } else { + if (hostname && ip && username && regexp_space.test(hostname, username) && regexp_ip.test(ip)) { + Server.create({ + hostname: hostname.toLowerCase(), + ip: ip, + username: username.toLowerCase() + }).then((result) => { + console.log('Server ' + result.hostname + ' added to database') + }); + } else { + return false; + } + + } + }); +} + +async function delServer(hostname) { + Server.findOne({where: { hostname: hostname}}).then((result) => { + if (result && regexp_space.test(hostname)) { + result.destroy() + .then(() => { + console.log('server ' + result.hostname + ' deleted from database') + }); + } else { + return false; + } + }); +} + + +module.exports = { + addServer, + delServer + +}; \ No newline at end of file diff --git a/services/users.service.js b/services/users.service.js index c0ba0df..31ca3de 100644 --- a/services/users.service.js +++ b/services/users.service.js @@ -1,4 +1,8 @@ const User = require('../model/user.model') +const Key = require("../model/key.model"); + +const regexp = /^\S*$/; + async function userList(code) { return await User.findAll() @@ -15,6 +19,23 @@ function makeAdmin(userId) { }); } +async function delUser(id) { + User.findOne({where: { id: id}}).then((result) => { + + if (result && regexp.test(id)) { + result.destroy() + .then(() => { + console.log('user ' + id + ' deleted from database') + + }); + } else { + return false; + } + }); +} + module.exports = { - makeAdmin + makeAdmin, + delUser, + }; \ No newline at end of file diff --git a/views/admin/group_edit.ejs b/views/admin/group_edit.ejs index 22174c5..e751a30 100644 --- a/views/admin/group_edit.ejs +++ b/views/admin/group_edit.ejs @@ -1,6 +1,6 @@ <%- include('../navbar', {active: "admin-groups"}); %>
Group editing
diff --git a/views/admin/group_new.ejs b/views/admin/group_new.ejs index 3ddf61a..cb2d820 100644 --- a/views/admin/group_new.ejs +++ b/views/admin/group_new.ejs @@ -1,6 +1,6 @@ <%- include('../navbar', {active: "admin-groups"}); %>Group editing
diff --git a/views/admin/groups.ejs b/views/admin/groups.ejs index 1a2da65..46fda38 100644 --- a/views/admin/groups.ejs +++ b/views/admin/groups.ejs @@ -1,10 +1,10 @@ <%- include('../navbar', {active: "admin-groups"}); %>User list
+Group list
Server editing
+Server list
+User list
@@ -22,10 +22,11 @@| Username | +username | id | -Admin | -Last login | +admin | +updated | +<%= user.id %> | <%= user.admin %> | -<%= user.updatedAt %> | ++ <% }) %> diff --git a/views/index.ejs b/views/index.ejs index 04a8b16..66890a0 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -10,7 +10,7 @@ |
|---|