kleine Anpassungen

This commit is contained in:
Robert Richter 2020-01-14 20:27:27 +01:00
parent 0b7a6d6a44
commit 3cfd48a807
13 changed files with 193 additions and 69 deletions

3
.gitignore vendored
View File

@ -75,6 +75,9 @@ typings/
# FuseBox cache # FuseBox cache
.fusebox/ .fusebox/
# Forever
.foreverignore
# old Scripts # old Scripts
_old/ _old/

View File

@ -28,6 +28,7 @@
- Uhrzeit am Anfang irgendwo platzieren (nicht immer oben links) - Uhrzeit am Anfang irgendwo platzieren (nicht immer oben links)
- Maus auf Alarmmonitor nach Zeit x ausblenden - Maus auf Alarmmonitor nach Zeit x ausblenden
- Datenbank nach bestimmter Zeit aufräumen - Datenbank nach bestimmter Zeit aufräumen
- Client-IP bei Reverse-Proxy richtig ermitteln
## 3. Priorität (Neuerungen) ## 3. Priorität (Neuerungen)

93
package-lock.json generated
View File

@ -265,6 +265,11 @@
"concat-map": "0.0.1" "concat-map": "0.0.1"
} }
}, },
"buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
"bytes": { "bytes": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@ -531,6 +536,14 @@
"safer-buffer": "^2.1.0" "safer-buffer": "^2.1.0"
} }
}, },
"ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"ee-first": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -1075,6 +1088,23 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
}, },
"jsonwebtoken": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
"integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
"requires": {
"jws": "^3.2.2",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
"lodash.isinteger": "^4.0.4",
"lodash.isnumber": "^3.0.3",
"lodash.isplainobject": "^4.0.6",
"lodash.isstring": "^4.0.1",
"lodash.once": "^4.0.0",
"ms": "^2.1.1",
"semver": "^5.6.0"
}
},
"jsprim": { "jsprim": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@ -1095,6 +1125,25 @@
"promise": "^7.0.1" "promise": "^7.0.1"
} }
}, },
"jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
"integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
"requires": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
"jws": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
"requires": {
"jwa": "^1.4.1",
"safe-buffer": "^5.0.1"
}
},
"kind-of": { "kind-of": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@ -1113,6 +1162,41 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
}, },
"lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
},
"lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
},
"lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
},
"lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
},
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
},
"lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
},
"lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
"longest": { "longest": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@ -4444,6 +4528,15 @@
} }
} }
}, },
"passport-jwt": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz",
"integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==",
"requires": {
"jsonwebtoken": "^8.2.0",
"passport-strategy": "^1.0.0"
}
},
"passport-local": { "passport-local": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz",

View File

@ -17,12 +17,14 @@
"npm": "^6.13.4", "npm": "^6.13.4",
"passport": "^0.4.1", "passport": "^0.4.1",
"passport-ip": "^0.1.2", "passport-ip": "^0.1.2",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0", "passport-local": "^1.0.0",
"passport.socketio": "^3.7.0", "passport.socketio": "^3.7.0",
"pug": "^2.0.4", "pug": "^2.0.4",
"req-flash": "0.0.3", "req-flash": "0.0.3",
"serve-favicon": "^2.5.0", "serve-favicon": "^2.5.0",
"socket.io": "^2.3.0", "socket.io": "^2.3.0",
"socket.io-client": "^2.3.0",
"sqlite3": "^4.1.1" "sqlite3": "^4.1.1"
}, },
"devDependencies": {}, "devDependencies": {},

View File

@ -29,9 +29,10 @@ app.use(bodyParser.urlencoded({
// Scripte einbinden // Scripte einbinden
var app_cfg = require('./server/app_cfg.js'); var app_cfg = require('./server/app_cfg.js');
var sql_cfg = require('./server/sql_cfg')(fs, bcrypt, app_cfg); var sql_cfg = require('./server/sql_cfg')(fs, bcrypt, app_cfg);
var sql = require('./server/sql_qry')(sql_cfg, async, app_cfg) var sql = require('./server/sql_qry')(sql_cfg, async, app_cfg);
var waip_io = require('./server/waip_io')(io, sql, async, app_cfg); var waip = require('./server/waip')(io, sql, async, app_cfg);
var udp = require('./server/udp')(app_cfg, waip_io, sql); var socket = require('./server/socket')(io, sql, app_cfg, waip);
var udp = require('./server/udp')(app_cfg, waip, sql);
var auth = require('./server/auth')(app, app_cfg, sql_cfg, async, bcrypt, passport, io); var auth = require('./server/auth')(app, app_cfg, sql_cfg, async, bcrypt, passport, io);
var routes = require('./server/routing')(app, sql, app_cfg, passport, auth, udp); var routes = require('./server/routing')(app, sql, app_cfg, passport, auth, udp);

View File

@ -4,6 +4,7 @@ app_cfg.global = {
http_port: 3000, http_port: 3000,
https_port: 3443, https_port: 3443,
udpport: 60233, udpport: 60233,
remoteapi: "http://localhost:8078/api",
database: './database.sqlite3', database: './database.sqlite3',
soundpath: '/public/media/', soundpath: '/public/media/',
mediapath: '/media/', mediapath: '/media/',

81
server/socket.js Executable file
View File

@ -0,0 +1,81 @@
module.exports = function(io, sql, app_cfg, waip) {
// Module laden
//client.js
var io_api = require('socket.io-client');
var socket_api = io_api.connect(app_cfg.global.remoteapi, {reconnect: true});
// Add a connect listener
socket_api.on('connect', function (socket_api) {
console.log('Connected!');
});
socket_api.emit('CH01', 'me', 'test msg');
// Socket.IO Server
io.on('connection', function(socket) {
sql.db_log('WAIP', 'Anwendung von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geoeffnet');
io.sockets.to(socket.id).emit('io.version', app_cfg.global.app_id);
// disconnect
socket.on('disconnect', function() {
sql.db_log('WAIP', 'Alarmmonitor von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geschlossen');
sql.db_client_delete(socket.id);
});
// Aufruf des Alarmmonitors einer bestimmten Wache verarbeiten
socket.on('wachen_id', function(wachen_id) {
sql.db_log('WAIP', 'Alarmmonitor Nr. ' + wachen_id + ' von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') aufgerufen');
// prüfen ob Wachenummer in der Datenbank hinterlegt ist
sql.db_wache_vorhanden(wachen_id,function(result) {
// wenn die Wachennummer vorhanden/plausibel dann weiter
if (result) {
// Socket-Room beitreiten
socket.join(wachen_id, function() {
// Socket-ID und Client-IP in der Datenbank speichern
sql.db_client_save(socket.id, socket.request.connection.remoteAddress, wachen_id);
// prüfen ob für diese Wache ein Einsatz vorhanden ist
sql.db_einsatz_vorhanden(wachen_id, socket.request.user.id, function(result_einsatz) {
if (result_einsatz) {
console.log(result_einsatz[0].waip_einsaetze_ID);
sql.db_log('WAIP', 'Einsatz ' + result_einsatz[0].waip_einsaetze_ID + ' fuer Wache ' + wachen_id + ' vorhanden');
//letzten Einsatz verteilen
waip.einsatz_verteilen(result_einsatz[0].waip_einsaetze_ID, socket.id, wachen_id);
sql.db_update_client_status(socket, result_einsatz[0].waip_einsaetze_ID);
//vorhanden Rückmeldungen verteilen
sql.db_get_response(result_einsatz[0].waip_einsaetze_ID, function(result){
if (result) {
waip.reuckmeldung_verteilen(result_einsatz[0].waip_einsaetze_ID, result);
};
});
} else {
sql.db_log('WAIP', 'Kein Einsatz fuer Wache ' + wachen_id + ' vorhanden, Standby');
//oder falls kein Einsatz vorhanden ist, dann
io.sockets.to(socket.id).emit('io.standby', null);
sql.db_update_client_status(socket, null);
};
});
});
} else {
sql.db_log('Fehler-WAIP', 'Fehler: Wachnnummer ' + wachen_id + 'nicht vorhanden');
io.sockets.to(socket.id).emit('io.error', 'Fehler: Wachnnummer \'' + wachen_id + '\' nicht vorhanden!');
};
});
});
socket.on('response', function(waip_id, ek, ma, fk, agt) {
var i_ek = ek ? 1 : 0;
var i_ma = ma ? 1 : 0;
var i_fk = fk ? 1 : 0;
var i_agt = agt ? 1 : 0;
sql.db_update_response(waip_id, i_ek, i_ma, i_fk, i_agt, function(result){
waip.reuckmeldung_verteilen(waip_id, result);
});
});
// TODO: socket.on(Version) um Server-Version abzugleichen
});
//return {
// send_message: send_message
//};
};

View File

@ -1,4 +1,4 @@
module.exports = function(app_cfg, waip_io, sql) { module.exports = function(app_cfg, waip, sql) {
// Module laden // Module laden
var dgram = require('dgram'); var dgram = require('dgram');
@ -25,7 +25,7 @@ module.exports = function(app_cfg, waip_io, sql) {
udp_server.on('message', function(message, remote) { udp_server.on('message', function(message, remote) {
if (isValidJSON(message)) { if (isValidJSON(message)) {
sql.db_log('WAIP', 'Neuer Einsatz von ' + remote.address + ':' + remote.port + ': ' + message); sql.db_log('WAIP', 'Neuer Einsatz von ' + remote.address + ':' + remote.port + ': ' + message);
waip_io.einsatz_speichern(message); waip.einsatz_speichern(message);
} else { } else {
sql.db_log('Fehler-WAIP', 'Fehler: Einsatz von ' + remote.address + ':' + remote.port + ' Fehlerhaft: ' + message); sql.db_log('Fehler-WAIP', 'Fehler: Einsatz von ' + remote.address + ':' + remote.port + ' Fehlerhaft: ' + message);
} }

View File

@ -1,65 +1,5 @@
module.exports = function(io, sql, async, app_cfg) { module.exports = function(io, sql, async, app_cfg) {
// Socket.IO
io.on('connection', function(socket) {
sql.db_log('WAIP', 'Anwendung von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geoeffnet');
io.sockets.to(socket.id).emit('io.version', app_cfg.global.app_id);
// disconnect
socket.on('disconnect', function() {
sql.db_log('WAIP', 'Alarmmonitor von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geschlossen');
sql.db_client_delete(socket.id);
});
// Aufruf des Alarmmonitors einer bestimmten Wache verarbeiten
socket.on('wachen_id', function(wachen_id) {
sql.db_log('WAIP', 'Alarmmonitor Nr. ' + wachen_id + ' von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') aufgerufen');
// prüfen ob Wachenummer in der Datenbank hinterlegt ist
sql.db_wache_vorhanden(wachen_id,function(result) {
// wenn die Wachennummer vorhanden/plausibel dann weiter
if (result) {
// Socket-Room beitreiten
socket.join(wachen_id, function() {
// Socket-ID und Client-IP in der Datenbank speichern
sql.db_client_save(socket.id, socket.request.connection.remoteAddress, wachen_id);
// prüfen ob für diese Wache ein Einsatz vorhanden ist
sql.db_einsatz_vorhanden(wachen_id, socket.request.user.id, function(result_einsatz) {
if (result_einsatz) {
console.log(result_einsatz[0].waip_einsaetze_ID);
sql.db_log('WAIP', 'Einsatz ' + result_einsatz[0].waip_einsaetze_ID + ' fuer Wache ' + wachen_id + ' vorhanden');
//letzten Einsatz verteilen
einsatz_verteilen(result_einsatz[0].waip_einsaetze_ID, socket.id, wachen_id);
sql.db_update_client_status(socket, result_einsatz[0].waip_einsaetze_ID);
//vorhanden Rückmeldungen verteilen
sql.db_get_response(result_einsatz[0].waip_einsaetze_ID, function(result){
if (result) {
reuckmeldung_verteilen(result_einsatz[0].waip_einsaetze_ID, result);
};
});
} else {
sql.db_log('WAIP', 'Kein Einsatz fuer Wache ' + wachen_id + ' vorhanden, Standby');
//oder falls kein Einsatz vorhanden ist, dann
io.sockets.to(socket.id).emit('io.standby', null);
sql.db_update_client_status(socket, null);
};
});
});
} else {
sql.db_log('Fehler-WAIP', 'Fehler: Wachnnummer ' + wachen_id + 'nicht vorhanden');
io.sockets.to(socket.id).emit('io.error', 'Fehler: Wachnnummer \'' + wachen_id + '\' nicht vorhanden!');
};
});
});
socket.on('response', function(waip_id, ek, ma, fk, agt) {
var i_ek = ek ? 1 : 0;
var i_ma = ma ? 1 : 0;
var i_fk = fk ? 1 : 0;
var i_agt = agt ? 1 : 0;
sql.db_update_response(waip_id, i_ek, i_ma, i_fk, i_agt, function(result){
reuckmeldung_verteilen(waip_id, result);
});
});
// TODO: socket.on(Version) um Server-Version abzugleichen
});
// Einsatzmeldung in Datenbank speichern // Einsatzmeldung in Datenbank speichern
function einsatz_speichern(message) { function einsatz_speichern(message) {
// Einsatzmeldung (JSON) speichern // Einsatzmeldung (JSON) speichern
@ -323,6 +263,8 @@ module.exports = function(io, sql, async, app_cfg) {
// TODO: Funktion um Clients "neuzustarten" (Seite remote neu laden) // TODO: Funktion um Clients "neuzustarten" (Seite remote neu laden)
return { return {
einsatz_speichern: einsatz_speichern einsatz_speichern: einsatz_speichern,
einsatz_verteilen: einsatz_verteilen,
reuckmeldung_verteilen: reuckmeldung_verteilen
}; };
}; };

View File

@ -8,5 +8,5 @@ block content
include includes/clock include includes/clock
script(src='/js/textFit.min.js') script(src='/js/textFit.min.js')
script(src='/js/waip.js') script(src='/js/waip_client.js')

View File

@ -11,5 +11,5 @@ block content
include includes/wachalarm include includes/wachalarm
script(src='/js/leaflet.js') script(src='/js/leaflet.js')
script(src='/js/textFit.min.js') script(src='/js/textFit.min.js')
script(src='/js/waip.js') script(src='/js/waip_client.js')

View File

@ -21,4 +21,4 @@ block content
script. script.
wachen_id="#{wachen_id}" wachen_id="#{wachen_id}"
waip_id=null waip_id=null
script(src='/js/waip.js') script(src='/js/waip_client.js')