From e934c2be9f2ee63b84e8fc0a688d843e7961cb72 Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Tue, 26 May 2020 11:31:01 +0200 Subject: [PATCH] update Di 26. Mai 11:31:01 CEST 2020 --- server.js | 21 ++------- server/api.js | 111 ++++++++++++++++++++++++++++++++++++++++++++ server/broker.js | 95 +++++++++++++++++++++++--------------- server/socket.js | 115 ++++++++++++---------------------------------- server/sql_qry.js | 5 +- server/waip.js | 5 +- 6 files changed, 208 insertions(+), 144 deletions(-) diff --git a/server.js b/server.js index 8f570aa..2ab6efe 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,4 @@ -// Module laden + const fs = require('fs'); const express = require('express'); const app = express(); @@ -9,16 +9,13 @@ const webserver = https.createServer({ cert: fs.readFileSync('./misc/server.cert', 'utf8') }, app); const io = require('socket.io').listen(webserver); -const io_api = require('socket.io-client'); const async = require('async'); const path = require('path'); const favicon = require('serve-favicon'); const bodyParser = require('body-parser'); const bcrypt = require('bcrypt'); const passport = require('passport'); -const twit = require('twit'); const uuidv4 = require('uuid/v4'); -const turf = require('@turf/turf'); // Basis-Konfiguration laden var app_cfg = require('./server/app_cfg.js'); @@ -37,22 +34,12 @@ app.use(bodyParser.urlencoded({ extended: false })); -// Endpoint-API -if (app_cfg.endpoint.enabled) { - const remote_api = io_api.connect(app_cfg.global.remoteapi, { - reconnect: true - }); -} else { - const remote_api; -}; - - // Scripte einbinden var sql_cfg = require('./server/sql_cfg')(fs, bcrypt, app_cfg); -var sql = require('./server/sql_qry')(sql_cfg, uuidv4, turf, app_cfg); -var brk = require('./server/broker')(twit, uuidv4, app_cfg); +var sql = require('./server/sql_qry')(sql_cfg, uuidv4, app_cfg); +var brk = require('./server/broker')(uuidv4, sql); var waip = require('./server/waip')(io, sql, brk, async, app_cfg); -var socket = require('./server/socket')(io, io_api, sql, app_cfg, waip); +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 routes = require('./server/routing')(app, sql, uuidv4, app_cfg, passport, auth, waip, udp); diff --git a/server/api.js b/server/api.js index e69de29..0cb64aa 100755 --- a/server/api.js +++ b/server/api.js @@ -0,0 +1,111 @@ +module.exports = function (io, io_api, sql, app_cfg, waip) { + + // Module laden + const io_api = require('socket.io-client'); + + +// Endpoint-API +if (app_cfg.endpoint.enabled) { + const remote_api = io_api.connect(app_cfg.global.remoteapi, { + reconnect: true + }); + } else { + const remote_api; + }; + + + + // Module laden + //client.js + + + + // Add a connect listener + remote_api.on('connect', function (remote_api) { + console.log('Connected!'); + }); + + socket.on('connect_error', function (err) { + $('#waipModalTitle').html('FEHLER'); + $('#waipModalBody').html('Verbindung zum Server getrennt!'); + $('#waipModal').modal('show'); + }); + + remote_api.emit('CH01', 'me', 'test msg'); + + + + // Funktion um zu pruefen, ob Nachricht im JSON-Format ist + function isValidJSON(text) { + try { + JSON.parse(text); + return true; + } catch (error) { + return false; + } + }; + + //client.js + + + + // Add a connect listener + remote_api.on('connect', function (remote_api) { + console.log('Connected!'); + }); + + socket.on('connect_error', function (err) { + $('#waipModalTitle').html('FEHLER'); + $('#waipModalBody').html('Verbindung zum Server getrennt!'); + $('#waipModal').modal('show'); + }); + + remote_api.emit('CH01', 'me', 'test msg'); + + return { + einsatz_speichern: einsatz_speichern, + waip_verteilen: waip_verteilen, + dbrd_verteilen: dbrd_verteilen, + rmld_verteilen_for_one_client: rmld_verteilen_for_one_client, + rmld_verteilen_by_uuid: rmld_verteilen_by_uuid + }; + + // Socket.IO API + + if (app_cfg.api.enabled) { + var nsp_api = io.of('/api'); + + nsp_api.on('connection', function (socket) { + // versuche Remote-IP zu ermitteln + var remote_ip = socket.handshake.headers["x-real-ip"] || socket.handshake.headers['x-forwarded-for'] || socket.request.connection.remoteAddress; + //FIXME pruefen ob Verbindung mit passendem Secret und aus IP-Bereich + //secret: 'asdfwert1234567890#', + //access_list: ['192.168.2.20', '192.168.2.30'] + + // in Liste der Clients mit aufnehmen + sql.db_update_client_status(socket, 'api'); + // Neuen Einsatz speichern + socket.on('new_waip', function (data) { + sql.db_log('API', 'Neuer Einsatz von ' + remote_ip + ': ' + data); + waip.einsatz_speichern(data); + }); + socket.on('new_rmld', function (data) { + sql.db_save_rmld(data, function (result) { + if (result) { + waip.rmld_verteilen_by_uuid(data.waip_uuid, data.rmld_uuid); + sql.db_log('API', 'Rückmeldung von ' + remote_ip + ' gespeichert: ' + data); + } else { + sql.db_log('API', 'Fehler beim speichern der Rückmeldung von ' + remote_ip + ': ' + data); + }; + }); + }); + // Disconnect + socket.on('disconnect', function () { + sql.db_log('API', 'Schnittstelle von ' + remote_ip + ' (' + socket.id + ') geschlossen.'); + sql.db_client_delete(socket); + }); + }); + }; + + +}; \ No newline at end of file diff --git a/server/broker.js b/server/broker.js index 763e497..b0810ba 100755 --- a/server/broker.js +++ b/server/broker.js @@ -1,64 +1,87 @@ -module.exports = function(twit, uuidv4, app_cfg) { +module.exports = function (uuidv4, sql) { - function alert_twitter_list(twitter_data, callback) { - // tw.tw_screen_name, tw_consumer_key, tw.tw_consumer_secret, tw.tw_access_token_key, tw.tw_access_token_secret, we.uuid, we.einsatzart, wa.name_wache + // Module laden + const twit = require('twit'); -console.log('twitter_data'+JSON.stringify(twitter_data)); + function alert_vmtl_list(vmtl_data, callback) { + // vmtl_data: tw.tw_screen_name, tw_consumer_key, tw.tw_consumer_secret, tw.tw_access_token_key, tw.tw_access_token_secret, we.uuid, we.einsatzart, wa.name_wache + if (app_cfg.global.development) { + console.log('Daten Vermittlung: ' + JSON.stringify(vmtl_data)); + }; + var T = new twit({ - consumer_key: twitter_data.tw_consumer_key, - consumer_secret: twitter_data.tw_consumer_secret, - access_token: twitter_data.tw_access_token_key, - access_token_secret: twitter_data.tw_access_token_secret//, - //timeout_ms: 60*1000, // optional HTTP request timeout to apply to all requests. - //strictSSL: true, // optional - requires SSL certificates to be valid. + consumer_key: vmtl_data.tw_consumer_key, + consumer_secret: vmtl_data.tw_consumer_secret, + access_token: vmtl_data.tw_access_token_key, + access_token_secret: vmtl_data.tw_access_token_secret }) - - var params = {screen_name: twitter_data.tw_screen_name}; - T.get('lists/list', params, function(error, lists, response) { + + var params = { + screen_name: vmtl_data.tw_screen_name + }; + + // Twitter-Liste + T.get('lists/list', params, function (error, lists, response) { if (!error) { - - var list_obj = lists.filter(function(o){return o.name == twitter_data.list;} ); + + var list_obj = lists.filter(function (o) { + return o.name == vmtl_data.list; + }); //console.log(JSON.stringify(list_obj)); console.log(list_obj[0].id_str); - var member_params = {list_id: list_obj[0].id_str, count: 50}; - T.get('lists/members', member_params, function(error, members, response) { + var member_params = { + list_id: list_obj[0].id_str, + count: 50 + }; + T.get('lists/members', member_params, function (error, members, response) { if (!error) { console.log(JSON.stringify(members)); var arrayLength = members.users.length; for (var i = 0; i < arrayLength; i++) { - console.log(members.users[i].screen_name); - - var tw_text = 'Neuer Einsatz für ' + twitter_data.name_wache +', bitte um Rückmeldung: https://wachalarm.info.tm/rmld/'+twitter_data.uuid+'/'+uuidv4(); - //Do something + console.log(members.users[i].screen_name); - var msg_params = {event: {type: "message_create", message_create: {target: {recipient_id: members.users[i].id}, message_data: {text: tw_text}}}}; - T.post('direct_messages/events/new', msg_params, function(error, members, response) { - if (!error) { - console.log('OK'); - callback && callback(members); - } else { - console.log(error); - callback && callback(null); - }; - }); + var tw_text = 'Neuer Einsatz für ' + vmtl_data.name_wache + ', bitte um Rückmeldung: https://wachalarm.info.tm/rmld/' + vmtl_data.uuid + '/' + uuidv4(); + //Do something + + var msg_params = { + event: { + type: "message_create", + message_create: { + target: { + recipient_id: members.users[i].id + }, + message_data: { + text: tw_text + } + } + } + }; + T.post('direct_messages/events/new', msg_params, function (error, members, response) { + if (!error) { + console.log('OK'); + callback && callback(members); + } else { + console.log(error); + callback && callback(null); + }; + }); }; } else { console.log(error); callback && callback(null); }; }); - } else { + } else { console.log(error); + sql.db_log('VMTL', 'Fehler beim lesen der Twitter-Liste: ' + error); callback && callback(null); }; }); - - }; return { - alert_twitter_list: alert_twitter_list + alert_vmtl_list: alert_vmtl_list }; -}; +}; \ No newline at end of file diff --git a/server/socket.js b/server/socket.js index dfabe65..8da3928 100755 --- a/server/socket.js +++ b/server/socket.js @@ -1,4 +1,4 @@ -module.exports = function (io, io_api, sql, app_cfg, waip) { +module.exports = function (io, sql, app_cfg, waip) { // Socket.IO Alarmmonitor @@ -10,7 +10,7 @@ module.exports = function (io, io_api, sql, app_cfg, waip) { //zuerst Server-Version senden, damit der Client diese prueft und die Seite ggf. neu laedt socket.emit('io.version', app_cfg.global.app_id); // Aufruf des Alarmmonitors einer bestimmten Wache verarbeiten - socket.on('WAIP', function (wachen_id) { + socket.on('WAIP', function (wachen_id) { sql.db_log('DEBUG', 'Alarmmonitor Nr. ' + wachen_id + ' von ' + client_ip + ' (' + socket.id + ') aufgerufen.'); // prüfen ob Wachenummer in der Datenbank hinterlegt ist sql.db_wache_vorhanden(wachen_id, function (result) { @@ -50,98 +50,41 @@ module.exports = function (io, io_api, sql, app_cfg, waip) { }); }); -// Socket.IO Dashboard + // Socket.IO Dashboard -var nsp_dbrd = io.of('/dbrd'); + var nsp_dbrd = io.of('/dbrd'); -nsp_dbrd.on('connection', function (socket) { - // versuche Client-IP zu ermitteln - var client_ip = socket.handshake.headers["x-real-ip"] || socket.handshake.headers['x-forwarded-for'] || socket.request.connection.remoteAddress; - //zuerst Server-Version senden, damit der Client diese prueft und die Seite ggf. neu laedt - socket.emit('io.version', app_cfg.global.app_id); - // Aufruf des Dashboards eines bestimmten Einsatzes verarbeiten - socket.on('dbrd', function (uuid) { - sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') aufgerufen.'); - // prüfen ob Dashboard/Einsatz vorhanden - sql.db_einsatz_uuid_vorhanden(uuid, function(dbrd_uuid) { - // wenn die Wachennummer vorhanden dann weiter - if (dbrd_uuid) { - // Socket-Room beitreiten - socket.join(dbrd_uuid.uuid, function () { - sql.db_log('DBRD', 'Einsatz ' + dbrd_uuid.uuid + ' für Dashboard ' + dbrd_uuid.uuid + ' vorhanden, wird jetzt an Client ' + socket.id + ' gesendet.'); - //letzten Einsatz verteilen - waip.dbrd_verteilen(dbrd_uuid.uuid, socket); - // in Statusüberischt speichern - sql.db_update_client_status(socket, dbrd_uuid.uuid); - }); - } else { - sql.db_log('ERROR', 'Fehler: Dashboard ' + dbrd_uuid.uuid + 'nicht (mehr) vorhanden!'); - socket.emit('io.error', 'Fehler: Dashboard \'' + dbrd_uuid.uuid + '\' nicht (mehr) vorhanden!'); - }; - }); - }); - // Disconnect - socket.on('disconnect', function (uuid) { - sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') geschlossen.'); - sql.db_client_delete(socket); - }); -}); - - -// Socket.IO API - -if (app_cfg.api.enabled) { - var nsp_api = io.of('/api'); - - nsp_api.on('connection', function (socket) { - // versuche Remote-IP zu ermitteln - var remote_ip = socket.handshake.headers["x-real-ip"] || socket.handshake.headers['x-forwarded-for'] || socket.request.connection.remoteAddress; - //FIXME pruefen ob Verbindung mit passendem Secret und aus IP-Bereich - //secret: 'asdfwert1234567890#', - //access_list: ['192.168.2.20', '192.168.2.30'] - - // in Liste der Clients mit aufnehmen - sql.db_update_client_status(socket, 'api'); - // Neuen Einsatz speichern - socket.on('new_waip', function (data) { - sql.db_log('API', 'Neuer Einsatz von ' + remote_ip + ': ' + data); - waip.einsatz_speichern(data); - }); - socket.on('new_rmld', function (data) { - sql.db_save_rmld(data, function(result){ - if (result) { - waip.rmld_verteilen_by_uuid(data.waip_uuid, data.rmld_uuid); - sql.db_log('API', 'Rückmeldung von ' + remote_ip + ' gespeichert: ' + data); + nsp_dbrd.on('connection', function (socket) { + // versuche Client-IP zu ermitteln + var client_ip = socket.handshake.headers["x-real-ip"] || socket.handshake.headers['x-forwarded-for'] || socket.request.connection.remoteAddress; + //zuerst Server-Version senden, damit der Client diese prueft und die Seite ggf. neu laedt + socket.emit('io.version', app_cfg.global.app_id); + // Aufruf des Dashboards eines bestimmten Einsatzes verarbeiten + socket.on('dbrd', function (uuid) { + sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') aufgerufen.'); + // prüfen ob Dashboard/Einsatz vorhanden + sql.db_einsatz_uuid_vorhanden(uuid, function (dbrd_uuid) { + // wenn die Wachennummer vorhanden dann weiter + if (dbrd_uuid) { + // Socket-Room beitreiten + socket.join(dbrd_uuid.uuid, function () { + sql.db_log('DBRD', 'Einsatz ' + dbrd_uuid.uuid + ' für Dashboard ' + dbrd_uuid.uuid + ' vorhanden, wird jetzt an Client ' + socket.id + ' gesendet.'); + //letzten Einsatz verteilen + waip.dbrd_verteilen(dbrd_uuid.uuid, socket); + // in Statusüberischt speichern + sql.db_update_client_status(socket, dbrd_uuid.uuid); + }); } else { - sql.db_log('API', 'Fehler beim speichern der Rückmeldung von ' + remote_ip + ': ' + data); + sql.db_log('ERROR', 'Fehler: Dashboard ' + dbrd_uuid.uuid + 'nicht (mehr) vorhanden!'); + socket.emit('io.error', 'Fehler: Dashboard \'' + dbrd_uuid.uuid + '\' nicht (mehr) vorhanden!'); }; }); - }); + }); // Disconnect - socket.on('disconnect', function () { - sql.db_log('API', 'Schnittstelle von ' + remote_ip + ' (' + socket.id + ') geschlossen.'); + socket.on('disconnect', function (uuid) { + sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') geschlossen.'); sql.db_client_delete(socket); }); - }); -}; - - // Module laden - //client.js - - - - // Add a connect listener - remote_api.on('connect', function (remote_api) { - console.log('Connected!'); }); - socket.on('connect_error', function (err) { - $('#waipModalTitle').html('FEHLER'); - $('#waipModalBody').html('Verbindung zum Server getrennt!'); - $('#waipModal').modal('show'); - }); - - remote_api.emit('CH01', 'me', 'test msg'); - - }; \ No newline at end of file diff --git a/server/sql_qry.js b/server/sql_qry.js index a314b5a..6b6dc5c 100755 --- a/server/sql_qry.js +++ b/server/sql_qry.js @@ -1,4 +1,7 @@ -module.exports = function (db, uuidv4, turf, app_cfg) { +module.exports = function (db, uuidv4, app_cfg) { + + // Module laden + const turf = require('@turf/turf'); // ermittelt den letzten vorhanden Einsatz zu einer Wache function db_einsatz_ermitteln(wachen_id, socket, callback) { diff --git a/server/waip.js b/server/waip.js index a877355..d5a3f63 100755 --- a/server/waip.js +++ b/server/waip.js @@ -27,10 +27,7 @@ module.exports = function (io, sql, brk, async, app_cfg) { }); // pruefen ob für die beteiligten Wachen eine Verteiler-Liste hinterlegt ist, falls ja, Rueckmeldungs-Link senden sql.db_get_vmtl_list(waip_id, function (vmtl_data) { - if (vmtl_data) { - if (app_cfg.global.development) { - console.log('Daten Vermittlung: ' + JSON.stringify(vmtl_data)); - }; + if (vmtl_data) { brk.alert_vmtl_list(vmtl_data, function (result) { if (!result) { sql.db_log('VMTL', 'Link zur Einsatz-Rückmeldung erfolgreichen an Vermittler-Liste gesendet. ' + result);