From ac610d0d5b1ee6891e708f7b2a0922a5c7731226 Mon Sep 17 00:00:00 2001 From: Richter Date: Mon, 25 Feb 2019 15:29:25 +0100 Subject: [PATCH 1/9] Update show_log.pug --- views/show_log.pug | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/views/show_log.pug b/views/show_log.pug index 418f1de..1659bc0 100644 --- a/views/show_log.pug +++ b/views/show_log.pug @@ -7,27 +7,36 @@ append head block content main(role='main') - .container + .container-fluid .row - table#table_log.table-striped.table-bordered.table-hover.display.table-sm.table-responsive + .col-12 + h3 Es werden die letzten 5.000 Einträge der Log-Datei angezeigt + .col-12 + table#table_log.table-striped.table-bordered.table-hover.display.table-sm.table-responsive.w-100.table-dark thead tr - th id - th log_time - th log_typ - th log_text + th ID + th Zeitstempel + th Typ + th Protokolltext script. var datasets = !{JSON.stringify(dataSet).replace(/<\//g, '<\\/')} $(document).ready(function() { - $('#table_log').DataTable( { - "data": datasets, - "language": { "url": "/js/datatables_german.json" }, - "columns": [ - { "data": "id" }, - { "data": "log_time" }, - { "data": "log_typ" }, - { "data": "log_text" } - ] - } ); - } ); + $('#table_log').DataTable( { + "data": datasets, + "language": { + "url": "/js/datatables_german.json" + }, + "order": [ + [ 0, "desc" ] + ], + "iDisplayLength": 25, + "columns": [ + { "data": "id" }, + { "data": "log_time" }, + { "data": "log_typ" }, + { "data": "log_text" } + ] + }); + }); From 2937f8c4d7f921c30b4bda0e0757c2143671d930 Mon Sep 17 00:00:00 2001 From: Richter Date: Mon, 25 Feb 2019 15:29:42 +0100 Subject: [PATCH 2/9] Create show_active_waip.pug --- views/show_active_waip.pug | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 views/show_active_waip.pug diff --git a/views/show_active_waip.pug b/views/show_active_waip.pug new file mode 100644 index 0000000..f666c5e --- /dev/null +++ b/views/show_active_waip.pug @@ -0,0 +1,27 @@ +extends layout + +block content + main(role='main') + .container + .row + .col-12 + h3 Einsätze sortiert nach Art und Ort + .col-12 + ol + each val in dataSet + li= val.einsatzart + ', ' + val.stichwort + ', ' + val.ort + ' ' + val.ortsteil + ul + if val.a + each val_a in (val.a).split(",") + li + a(href="/waip/" + val_a)= val_a + ul + each val_b in (val.b).split(",") + if val_b.includes(val_a) + li + a(href="/waip/" + val_b)= val_b + ul + each val_c in (val.c).split(",") + if val_c.includes(val_b) + li + a(href="/waip/" + val_c)= val_c From 25065a78265a910eb046bcbed2a861c4fa987fda Mon Sep 17 00:00:00 2001 From: Richter Date: Mon, 25 Feb 2019 15:29:50 +0100 Subject: [PATCH 3/9] Create show_active_user.pug --- views/show_active_user.pug | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 views/show_active_user.pug diff --git a/views/show_active_user.pug b/views/show_active_user.pug new file mode 100644 index 0000000..59afb78 --- /dev/null +++ b/views/show_active_user.pug @@ -0,0 +1,41 @@ +extends layout + +append head + link(rel='stylesheet', href='/css/datatables.min.css') + script(src='/js/datatables.min.js') + script(src='/js/dataTables.bootstrap4.min.js') + +block content + main(role='main') + .container + .row + .col-12 + h3 Zeigt alle jetzt verbundenen Clients und deren Status an + .col-12 + table#table_active_user.table-striped.table-bordered.table-hover.display.table-sm.table-responsive.w-100.table-dark + thead + tr + th ID + th Verbunden seit + th Socket-ID + th Client-IP + th aufgerufener Wachalarm + th Client-Status (Einsazt-ID) + + script. + var datasets = !{JSON.stringify(dataSet).replace(/<\//g, '<\\/')} + $(document).ready(function() { + $('#table_active_user').DataTable( { + "data": datasets, + "language": + { "url": "/js/datatables_german.json" }, + "columns": [ + { "data": "id" }, + { "data": "connect_time" }, + { "data": "socket_id" }, + { "data": "client_ip" }, + { "data": "room_name" }, + { "data": "client_status" } + ] + }); + }); From b973cfaab8da8e8582f20c9ef1a1b3f957964e75 Mon Sep 17 00:00:00 2001 From: Richter Date: Mon, 25 Feb 2019 15:30:16 +0100 Subject: [PATCH 4/9] Create edit_users.pug --- views/edit_users.pug | 68 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 views/edit_users.pug diff --git a/views/edit_users.pug b/views/edit_users.pug new file mode 100644 index 0000000..b24efb0 --- /dev/null +++ b/views/edit_users.pug @@ -0,0 +1,68 @@ +extends layout + +block content + main(role='main') + .container + .row + .col-3 + .col-6 + .card.text-white.bg-success.mb-3 + .card-body + h5.card-title Success + p.card-text password updated, user updated + a(href="#").btn.btn-primary Close + .row + .col-4 + .card.border-success.mb-3 + .card-body.text-success.text-center + h5.card-title Add User + button.btn.btn-primary + + .col-4 + .card.border-dark.mb-3 + .card-header Benutzer1 (admin) + .card-body.text-dark.text-right + .btn-group + button.btn.btn-primary Edit + button.btn.btn-danger Delete + + #userModal.modal.fade(tabindex='-1', role='dialog', aria-hidden='true') + .modal-dialog.modal-dialog-centered(role='document') + .modal-content + .modal-header + h5#waipModalTitle.modal-title Edit User + button.close(type='button', data-dismiss='modal', aria-label='Close') + span(aria-hidden='true') × + #waipModalBody.modal-body + form + .form-group + label(for='exampleInputEmail1') Email address + input.form-control(type='text', placeholder='Readonly input here…', readonly='') + small#emailHelp.form-text.text-muted We'll never share your email with anyone else. + fieldset.form-group + .row + legend.col-form-label.col-sm-3.pt-0 Berechtigung + .col-sm-9 + .form-check + input#gridRadios1.form-check-input(type='radio', name='gridRadios', value='option1', checked='') + label.form-check-label(for='gridRadios1') + | Benuzter + .form-check + input#gridRadios2.form-check-input(type='radio', name='gridRadios', value='option2') + label.form-check-label(for='gridRadios2') + | Sichter + .form-check + input#gridRadios3.form-check-input(type='radio', name='gridRadios', value='option3', disabled='') + label.form-check-label(for='gridRadios3') + | Administrator + .form-group + label(for='exampleInputPassword1') Passwort + input#exampleInputPassword1.form-control(type='password', placeholder='...') + label(for='exampleInputPassword1') Password wiederholen + input#exampleInputPassword1.form-control(type='password', placeholder='...') + .modal-footer + button.btn.btn-primary(type='submit') Speichern + button.btn.btn-secondary(type='button', data-dismiss='modal') Abbrechen + + script. + $('#userModal').modal('show') + var datasets = !{JSON.stringify(dataSet).replace(/<\//g, '<\\/')} From 6e4dfe2b9d6ea122eb3c28dd89efd2aa991e2a70 Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Mon, 25 Feb 2019 15:34:49 +0100 Subject: [PATCH 5/9] Update header.pug --- views/includes/header.pug | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/includes/header.pug b/views/includes/header.pug index e778698..8581526 100644 --- a/views/includes/header.pug +++ b/views/includes/header.pug @@ -16,10 +16,10 @@ header if user if user.permissions == 'admin' li.nav-item.dropdown - a#navbarDropdown.nav-link.dropdown-toggle(href='#', role='button', data-toggle='dropdown', aria-haspopup='true', aria-expanded='false') + a#navbarDropdown.nav-link.px-4.dropdown-toggle(href='#', role='button', data-toggle='dropdown', aria-haspopup='true', aria-expanded='false') | Administration .dropdown-menu(aria-labelledby='navbarDropdown') - a.dropdown-item(href='/show_users') Benutzer und Rechte verwalten + a.dropdown-item(href='/edit_users') Benutzer und Rechte verwalten .dropdown-divider a.dropdown-item(href='/show_active_user') Verbundene PCs/Benutzer a.dropdown-item(href='/show_active_waip') Akutelle Einsätze From 18b0eb6a2e4fef5e69860f162074f73717e1cb3a Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Mon, 25 Feb 2019 15:35:02 +0100 Subject: [PATCH 6/9] Update waip_io.js --- server/waip_io.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/waip_io.js b/server/waip_io.js index 4ffe09c..cbe25b2 100644 --- a/server/waip_io.js +++ b/server/waip_io.js @@ -224,4 +224,4 @@ module.exports = function (io, sql, async, app_cfg) { return { einsatz_speichern: einsatz_speichern }; -}; \ No newline at end of file +}; From a0b29b56f4cd0d2f9bb80e27d94e1a2024a627e0 Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Mon, 25 Feb 2019 15:35:15 +0100 Subject: [PATCH 7/9] Update sql_qry.js --- server/sql_qry.js | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/server/sql_qry.js b/server/sql_qry.js index 806f610..c838a54 100644 --- a/server/sql_qry.js +++ b/server/sql_qry.js @@ -345,9 +345,9 @@ module.exports = function(db) { \'` + text + `\')`); //TODO: Log auf 20.000 Datensätze begrenzen }; - + function db_get_log(callback) { - db.all('select * from waip_log order by log_time DESC', function(err, rows) { + db.all(`select * from waip_log order by id desc LIMIT 5000`, function(err, rows) { if (err == null && rows) { callback && callback(rows); } else { @@ -356,6 +356,44 @@ module.exports = function(db) { }); }; + function db_get_active_clients(callback) { + db.all(`select * from waip_clients`, function(err, rows) { + if (err == null && rows) { + callback && callback(rows); + } else { + callback && callback(null); + }; + }); + }; + + function db_get_active_waips(callback) { + db.all(`select we.einsatzart, we.stichwort, we.ort, we.ortsteil, + GROUP_concat(DISTINCT substr( wa.nr_wache, 0, 3 )) a, + GROUP_concat(DISTINCT substr( wa.nr_wache, 0, 5 )) b, + GROUP_concat(DISTINCT wa.nr_wache) c + from waip_einsaetze we + left join waip_einsatzmittel em on em.waip_einsaetze_ID = we.id + left join waip_wachen wa on wa.id = em.waip_wachen_ID + GROUP by we.id + ORDER by we.einsatzart, we.stichwort`, function(err, rows) { + if (err == null && rows) { + callback && callback(rows); + } else { + callback && callback(null); + }; + }); + }; + + function db_get_users(callback) { + db.all('SELECT id, user, permissions FROM waip_users', function(err, rows) { + if (err == null && rows) { + callback && callback(rows); + } else { + callback && callback(null); + }; + }); + } + return { db_einsatz_speichern: db_einsatz_speichern, db_einsatz_laden: db_einsatz_laden, @@ -378,7 +416,10 @@ module.exports = function(db) { db_update_client_status: db_update_client_status, db_check_client_waipid: db_check_client_waipid, db_log: db_log, - db_get_log: db_get_log + db_get_log: db_get_log, + db_get_active_clients: db_get_active_clients, + db_get_active_waips: db_get_active_waips, + db_get_users: db_get_users }; }; From a2101cfbe94cdaa1f5a8b6d9e004e3c9dc8dc85f Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Mon, 25 Feb 2019 15:35:18 +0100 Subject: [PATCH 8/9] Update routing.js --- server/routing.js | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/server/routing.js b/server/routing.js index 8c4f610..3865ade 100644 --- a/server/routing.js +++ b/server/routing.js @@ -71,6 +71,28 @@ module.exports = function (app, sql, app_cfg, passport, auth) { }); }); + // get /show_active_user + app.get('/show_active_user', auth.ensureAuthenticated, function (req, res) { + sql.db_get_active_clients(function (data) { + res.render('show_active_user', { + title: 'Verbundene PCs/Benutzer', + user: req.user, + dataSet: data + }); + }); + }); + + // get /show_active_waip + app.get('/show_active_waip', auth.ensureAuthenticated, function (req, res) { + sql.db_get_active_waips(function (data) { + res.render('show_active_waip', { + title: 'Akutelle Einsätze', + user: req.user, + dataSet: data + }); + }); + }); + // get /show_log app.get('/show_log', auth.ensureAuthenticated, function (req, res) { sql.db_get_log(function (data) { @@ -82,6 +104,17 @@ module.exports = function (app, sql, app_cfg, passport, auth) { }); }); + // get /edit_users + app.get('/edit_users', auth.ensureAuthenticated, function (req, res) { + sql.db_get_users(function (data) { + res.render('edit_users', { + title: 'Benutzer und Rechte verwalten', + user: req.user, + dataSet: data + }); + }); + }); + // get /login app.get('/login', function (req, res) { res.render('login', { @@ -116,7 +149,9 @@ module.exports = function (app, sql, app_cfg, passport, auth) { res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); - res.render('error'); + res.render('error', { + user: req.user + }); }); -}; \ No newline at end of file +}; From 3153df228917421e0ed53e0c89e5a8275c24d54c Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Mon, 25 Feb 2019 15:35:26 +0100 Subject: [PATCH 9/9] Update auth.js --- server/auth.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/auth.js b/server/auth.js index 93c6eb0..ef1bcdd 100644 --- a/server/auth.js +++ b/server/auth.js @@ -6,8 +6,8 @@ module.exports = function (app, app_cfg, db, bcrypt, passport, LocalStrategy) { app.use(session({ store: new SQLiteStore({ - db: app_cfg.global.database, - concurrentDB: true + //db: app_cfg.global.database, + //concurrentDB: true }), secret: app_cfg.global.sessionsecret, resave: false, @@ -58,6 +58,8 @@ module.exports = function (app, app_cfg, db, bcrypt, passport, LocalStrategy) { res.redirect('/login') } + //TODO: ensureAuthenticated für admin-user erstellen + return{ ensureAuthenticated: ensureAuthenticated };