From 930f7baa85a31f1a65efb87a6002a3faf3423be8 Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Thu, 11 Jun 2020 17:31:01 +0200 Subject: [PATCH] update Do 11. Jun 17:31:01 CEST 2020 --- server/app_cfg.js | 11 ++-- server/broker.js | 148 ++++++++++++++++++++++++++-------------------- server/sql_qry.js | 63 +++++++++----------- server/waip.js | 6 +- 4 files changed, 123 insertions(+), 105 deletions(-) diff --git a/server/app_cfg.js b/server/app_cfg.js index b172646..82372ff 100644 --- a/server/app_cfg.js +++ b/server/app_cfg.js @@ -37,20 +37,21 @@ app_cfg.public = { url_privacy: 'https://www.nix.nix/datenschutz' }; -// Daten von anderen Servern empfangen +// Daten von anderen Clients empfangen app_cfg.api = { enabled: true, secret: 'asdfwert1234567890#', - access_list: ['192.168.2.20', '192.168.2.30'], - send_mission_type: ['Brandeinsatz', 'Hilfeleistung'], - send_data_type: ['uuid', 'nummer', 'alarmzeit', 'art', 'stichwort', 'sondersignal', 'ort', 'ortsteil', 'wgs84_area'] + access_list: ['192.168.2.20', '192.168.2.30'] }; // Daten an andere Server senden app_cfg.endpoint = { enabled: true, host: 'https://192.168.1.25:8090/api', - secret: 'asdfwert1234567890#' + secret: 'asdfwert1234567890#', + // TODO in api rausfiltern + get_mission_type: ['Brandeinsatz', 'Hilfeleistung'], + get_data_type: ['uuid', 'nummer', 'alarmzeit', 'art', 'stichwort', 'sondersignal', 'ort', 'ortsteil', 'wgs84_area'] }; module.exports = app_cfg; \ No newline at end of file diff --git a/server/broker.js b/server/broker.js index a59e258..f9220f7 100755 --- a/server/broker.js +++ b/server/broker.js @@ -3,82 +3,104 @@ module.exports = function (app_cfg, sql, uuidv4) { // Module laden const twit = require('twit'); - function alert_vmtl_list(vmtl_data, callback) { + function alert_vmtl_list(list_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 + // waip_wachen_id, vmlt_typ, vmlt_account_name, vmtl_account_group, waip_id if (app_cfg.global.development) { - console.log('Daten Vermittlung: ' + JSON.stringify(vmtl_data)); + console.log('Liste Vermittlung: ' + JSON.stringify(list_data)); }; - var T = new twit({ - 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 - }) + if (list_data.vmlt_typ == 'twitter') { + // wenn es sich um eine Twitter-Liste/Gruppe handelt, Account-Zugangsdaten ermitteln + sql.db_vmtl_get_tw_account(list_data, function (vmtl_data) { - var params = { - screen_name: vmtl_data.tw_screen_name - }; - - // Twitter-Liste beschicken - T.get('lists/list', params, function (error, lists, response) { - if (!error) { - var list_obj = lists.filter(function (o) { - return o.name == vmtl_data.list; - }); - var member_params = { - list_id: list_obj[0].id_str, - count: 50 + // vmtl_data: tw_screen_name, tw_consumer_key, tw_consumer_secret, tw_access_token_key, tw_access_token_secret, uuid, einsatzart, name_wache + if (app_cfg.global.development) { + console.log('Twitter-Account-Daten: ' + JSON.stringify(vmtl_data)); }; - // mit List_id die Mitglieder der Liste auslesen - T.get('lists/members', member_params, function (error, members, response) { - if (!error) { - if (app_cfg.global.development) { - console.log('Mitglieder der Twitter-Liste: ' + JSON.stringify(members)); - }; - // an jedes Mitglied der Liste eine Meldung senden - var arrayLength = members.users.length; - for (var i = 0; i < arrayLength; i++) { - // Mitteilungstext festelgen - var tw_text = String.fromCodePoint(0x1F4DF) + ' ' + vmtl_data.einsatzart + ' für ' + vmtl_data.name_wache + ', bitte um Rückmeldung: ' + - app_cfg.public.url + '/rmld/' + vmtl_data.uuid + '/' + uuidv4(); - // Parameter der Mitteilung - var msg_params = { - event: { - type: "message_create", - message_create: { - target: { - recipient_id: members.users[i].id - }, - message_data: { - text: tw_text - } - } - } + + if (vmtl_data) { + + var T = new twit({ + 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: vmtl_data.tw_screen_name + }; + + // Twitter-Liste beschicken + T.get('lists/list', params, function (error, lists, response) { + if (!error) { + var list_obj = lists.filter(function (o) { + return o.name == vmtl_data.list; + }); + var member_params = { + list_id: list_obj[0].id_str, + count: 50 }; - // Mitteilung senden - T.post('direct_messages/events/new', msg_params, function (error, members, response) { + // mit List_id die Mitglieder der Liste auslesen + T.get('lists/members', member_params, function (error, members, response) { if (!error) { - sql.db_log('VMTL', 'Einsatz-Link an ' + members.users[i].screen_name + ' gesendet.'); - callback && callback(members); + if (app_cfg.global.development) { + console.log('Mitglieder der Twitter-Liste: ' + JSON.stringify(members)); + }; + // an jedes Mitglied der Liste eine Meldung senden + var arrayLength = members.users.length; + for (var i = 0; i < arrayLength; i++) { + // Mitteilungstext festelgen + var tw_text = String.fromCodePoint(0x1F4DF) + ' ' + vmtl_data.einsatzart + ' für ' + vmtl_data.name_wache + ', bitte um Rückmeldung: ' + + app_cfg.public.url + '/rmld/' + vmtl_data.uuid + '/' + uuidv4(); + // Parameter der Mitteilung + var msg_params = { + event: { + type: "message_create", + message_create: { + target: { + recipient_id: members.users[i].id + }, + message_data: { + text: tw_text + } + } + } + }; + // Mitteilung senden + T.post('direct_messages/events/new', msg_params, function (error, members, response) { + if (!error) { + sql.db_log('VMTL', 'Einsatz-Link an ' + members.users[i].screen_name + ' gesendet.'); + callback && callback(members); + } else { + sql.db_log('VMTL', 'Fehler beim senden des Einsatz-Links an ' + members.users[i].screen_name + ': ' + error); + callback && callback(null); + }; + }); + }; } else { - sql.db_log('VMTL', 'Fehler beim senden des Einsatz-Links an ' + members.users[i].screen_name + ': ' + error); + sql.db_log('VMTL', 'Fehler beim lesen der Mitglieder der Twitter-Liste: ' + error); callback && callback(null); }; }); + } else { + console.log(error); + sql.db_log('VMTL', 'Fehler beim lesen der Twitter-Liste: ' + error); + callback && callback(null); }; - } else { - sql.db_log('VMTL', 'Fehler beim lesen der Mitglieder der Twitter-Liste: ' + error); - callback && callback(null); - }; - }); - } else { - console.log(error); - sql.db_log('VMTL', 'Fehler beim lesen der Twitter-Liste: ' + error); - callback && callback(null); - }; - }); + }); + + } else { + sql.db_log('VMTL', 'Zugangsdaten für Twitter-Account ' + vmtl_data.tw_screen_name + ' konnten nicht ermittelt werden.'); + }; + + }); + } else { + // andere Listen/Gruppen/Schnittstellen koennten hier noch abgefragt werden + callback && callback(null); + }; + }; return { diff --git a/server/sql_qry.js b/server/sql_qry.js index c557188..d74ffd5 100755 --- a/server/sql_qry.js +++ b/server/sql_qry.js @@ -2,7 +2,9 @@ module.exports = function (db, uuidv4, app_cfg) { // Module laden const turf = require('@turf/turf'); - const { v5: uuidv5 } = require('uuid'); + const { + v5: uuidv5 + } = require('uuid'); // SQL-Abfragen @@ -146,11 +148,11 @@ module.exports = function (db, uuidv4, app_cfg) { function db_einsatz_check_history(waip_id, einsatzdaten, socket_id, callback) { // Prüfen ob Wachalarm bereits in dieser Form an diesen Socket gesendet wurde (Doppelalarmierung vermeiden) - const custom_namespace = '59cc72ec-4ff5-499d-81e2-ec49c1d01252' + const custom_namespace = '59cc72ec-4ff5-499d-81e2-ec49c1d01252' // Einsatzdaten in kuzre UUID-Strings umwandeln, diese UUIDs werden dann verglichen var uuid_em_alarmiert = uuidv5(JSON.stringify(einsatzdaten.em_alarmiert), custom_namespace); delete einsatzdaten.em_alarmiert; - var uuid_em_weitere = uuidv5(JSON.stringify(einsatzdaten.em_weitere), custom_namespace); + var uuid_em_weitere = uuidv5(JSON.stringify(einsatzdaten.em_weitere), custom_namespace); delete einsatzdaten.em_weitere; var uuid_einsatzdaten = uuidv5(JSON.stringify(einsatzdaten), custom_namespace); // Abfrage ob zu Socket und Waip-ID bereits History-Daten hinterlegt sind @@ -188,7 +190,7 @@ module.exports = function (db, uuidv4, app_cfg) { function db_einsatz_get_by_waipid(waip_id, wachen_nr, user_id, callback) { // Einsatzdaten entsprechend der WAIP-ID zusammentragen - // falls waip_id oder wachen_nur keine zahlen sind, abbruch + // falls waip_id oder wachen_nur keine zahlen sind, Abbruch if (isNaN(waip_id) || isNaN(wachen_nr)) { callback && callback(null); } else { @@ -344,8 +346,6 @@ module.exports = function (db, uuidv4, app_cfg) { db.run(`DELETE FROM waip_einsaetze WHERE id = ?`, [id]); // History loeschen db.run(`DELETE FROM waip_history WHERE waip_id = ?`, [id]); - // Rueckmeldungen löschen - db.run(`DELETE FROM waip_response WHERE waip_uuid = (select uuid from waip_einsaetze where id = ?)`, [id]); }; function db_wache_get_all(callback) { @@ -817,45 +817,39 @@ module.exports = function (db, uuidv4, app_cfg) { }); }; + function db_rmld_loeschen(waip_uuid) { + // Rueckmeldungen löschen + db.run(`DELETE FROM waip_response WHERE waip_uuid = `, [waip_uuid]); + }; + function db_vmtl_get_list(waip_id, callback) { // Pruefen ob fuer eine Wache im Einsatz ein Verteilerliste hinterlegt ist db.get(`select v.waip_wachen_id, v.vmlt_typ, v.vmlt_account_name, v.vmtl_account_group from waip_vmtl v where v.waip_wachen_id = (select distinct w.id wachen_id from waip_wachen w left join waip_einsatzmittel em on em.wachenname = w.name_wache where em.waip_einsaetze_ID = ?)`, [waip_id], function (err, liste) { if (err == null && liste) { - // Falls Liste für Wache hinterlegt, je nach Typ de - if () { - - } else { - // andere Listen/Gruppen/Schnittstellen koennten hier noch abgefragt werden - callback && callback(null); - } - // FIXME eee - vmtl_typ TEXT, - vmlt_account_name TEXT, - vmlt_account_group TEXT - - - // Falls Account und Liste hinterlegt sind, die Account-Zugangsdaten, Einsatz-UUID, Einsatzart und Wachenname auslesen - db.get(`select 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 - from waip_tw_accounts tw, waip_einsaetze we, waip_wachen wa - where tw.id = ? AND we.id = ? AND wa.id = ?`, [twitter_liste.tw_account_id, waip_id, twitter_liste.waip_wachen_id], function (err, vmtl_daten) { - if (err == null && vmtl_daten) { - // Listen-Name zur Daten hinzufuegen - vmtl_daten.list = twitter_liste.tw_account_list; - callback && callback(vmtl_daten); - } else { - callback && callback(null); - }; - }); + // waip_id zu Daten hinzufuegen + liste.waip_id = waip_id; + callback && callback(liste); } else { callback && callback(null); }; }); }; - function db_vmtl_get_access_data(, callback) { - + function db_vmtl_get_tw_account(list_data, callback) { + // falls Liste für Wache hinterlegt, dann hier die Twitter-Account-Daten, Einsatz-UUID, Einsatzart und Wachenname auslesen + db.get(`select tw.tw_screen_name, tw.tw_consumer_key, tw.tw_consumer_secret, tw.tw_access_token_key, tw.tw_access_token_secret, we.uuid, we.einsatzart, wa.name_wache + from waip_tw_accounts tw, waip_einsaetze we, waip_wachen wa + where tw.tw_screen_name = ? AND we.id = ? AND wa.id = ?`, [list_data.vmlt_account_name, list_data.waip_id, list_data.waip_wachen_id], function (err, vmtl_daten) { + if (err == null && vmtl_daten) { + // Listen-Name zu Daten hinzufuegen + vmtl_daten.list = list_data.vmtl_account_group; + callback && callback(vmtl_daten); + } else { + callback && callback(null); + }; + }); }; return { @@ -890,8 +884,9 @@ module.exports = function (db, uuidv4, app_cfg) { db_rmld_get_fuer_wache: db_rmld_get_fuer_wache, db_rmld_get_by_rmlduuid: db_rmld_get_by_rmlduuid, db_rmld_get_by_waipuuid: db_rmld_get_by_waipuuid, + db_rmld_loeschen: db_rmld_loeschen, db_vmtl_get_list: db_vmtl_get_list, - db_vmtl_get_access_data: db_vmtl_get_access_data + db_vmtl_get_tw_account: db_vmtl_get_tw_account }; }; diff --git a/server/waip.js b/server/waip.js index 6a4af1b..01e2ef5 100755 --- a/server/waip.js +++ b/server/waip.js @@ -374,7 +374,7 @@ module.exports = function (io, sql, brk, async, app_cfg, api, proof) { }); sql.db_socket_get_by_room(waip.uuid, function (socket_ids) { // Dashboards trennen, deren Einsatz geloescht wurde - // TODO WAIP: testen der Dashboard-Trennen-Funktion + // TODO TEST: testen der Dashboard-Trennen-Funktion if (socket_ids) { socket_ids.forEach(function (row) { var socket = io.of('/dbrd').connected[row.socket_id]; @@ -400,11 +400,11 @@ module.exports = function (io, sql, brk, async, app_cfg, api, proof) { // Mail-Adressen fuer Wachen zu dieser Einsatz-ID ermitteln, siehe db_vmtl_get_list // csv an diese Mail-Adressen per Mail senden // wenn app_cfg.global.mail_rmld is true - + db_rmld_loeschen(waip_uuid) }); // Einsatz löschen sql.db_einsatz_loeschen(waip.id); - sql.db_log('WAIP', 'Einsatz ' + waip.id + ' gelöscht.'); + sql.db_log('WAIP', 'Einsatz-Daten zu Einsatz ' + waip.id + ' gelöscht.'); }; });