update Do 11. Jun 17:31:01 CEST 2020

This commit is contained in:
Robert Richter 2020-06-11 17:31:01 +02:00
parent 1daa8a4d98
commit 930f7baa85
4 changed files with 123 additions and 105 deletions

View File

@ -37,20 +37,21 @@ app_cfg.public = {
url_privacy: 'https://www.nix.nix/datenschutz' url_privacy: 'https://www.nix.nix/datenschutz'
}; };
// Daten von anderen Servern empfangen // Daten von anderen Clients empfangen
app_cfg.api = { app_cfg.api = {
enabled: true, enabled: true,
secret: 'asdfwert1234567890#', secret: 'asdfwert1234567890#',
access_list: ['192.168.2.20', '192.168.2.30'], 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']
}; };
// Daten an andere Server senden // Daten an andere Server senden
app_cfg.endpoint = { app_cfg.endpoint = {
enabled: true, enabled: true,
host: 'https://192.168.1.25:8090/api', 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; module.exports = app_cfg;

View File

@ -3,82 +3,104 @@ module.exports = function (app_cfg, sql, uuidv4) {
// Module laden // Module laden
const twit = require('twit'); 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) { 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({ if (list_data.vmlt_typ == 'twitter') {
consumer_key: vmtl_data.tw_consumer_key, // wenn es sich um eine Twitter-Liste/Gruppe handelt, Account-Zugangsdaten ermitteln
consumer_secret: vmtl_data.tw_consumer_secret, sql.db_vmtl_get_tw_account(list_data, function (vmtl_data) {
access_token: vmtl_data.tw_access_token_key,
access_token_secret: vmtl_data.tw_access_token_secret
})
var params = { // vmtl_data: tw_screen_name, tw_consumer_key, tw_consumer_secret, tw_access_token_key, tw_access_token_secret, uuid, einsatzart, name_wache
screen_name: vmtl_data.tw_screen_name if (app_cfg.global.development) {
}; console.log('Twitter-Account-Daten: ' + JSON.stringify(vmtl_data));
// 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
}; };
// mit List_id die Mitglieder der Liste auslesen
T.get('lists/members', member_params, function (error, members, response) { if (vmtl_data) {
if (!error) {
if (app_cfg.global.development) { var T = new twit({
console.log('Mitglieder der Twitter-Liste: ' + JSON.stringify(members)); consumer_key: vmtl_data.tw_consumer_key,
}; consumer_secret: vmtl_data.tw_consumer_secret,
// an jedes Mitglied der Liste eine Meldung senden access_token: vmtl_data.tw_access_token_key,
var arrayLength = members.users.length; access_token_secret: vmtl_data.tw_access_token_secret
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: ' + var params = {
app_cfg.public.url + '/rmld/' + vmtl_data.uuid + '/' + uuidv4(); screen_name: vmtl_data.tw_screen_name
// Parameter der Mitteilung };
var msg_params = {
event: { // Twitter-Liste beschicken
type: "message_create", T.get('lists/list', params, function (error, lists, response) {
message_create: { if (!error) {
target: { var list_obj = lists.filter(function (o) {
recipient_id: members.users[i].id return o.name == vmtl_data.list;
}, });
message_data: { var member_params = {
text: tw_text list_id: list_obj[0].id_str,
} count: 50
}
}
}; };
// Mitteilung senden // mit List_id die Mitglieder der Liste auslesen
T.post('direct_messages/events/new', msg_params, function (error, members, response) { T.get('lists/members', member_params, function (error, members, response) {
if (!error) { if (!error) {
sql.db_log('VMTL', 'Einsatz-Link an ' + members.users[i].screen_name + ' gesendet.'); if (app_cfg.global.development) {
callback && callback(members); 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 { } 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); 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 {
}; sql.db_log('VMTL', 'Zugangsdaten für Twitter-Account ' + vmtl_data.tw_screen_name + ' konnten nicht ermittelt werden.');
}); };
} else {
console.log(error); });
sql.db_log('VMTL', 'Fehler beim lesen der Twitter-Liste: ' + error); } else {
callback && callback(null); // andere Listen/Gruppen/Schnittstellen koennten hier noch abgefragt werden
}; callback && callback(null);
}); };
}; };
return { return {

View File

@ -2,7 +2,9 @@ module.exports = function (db, uuidv4, app_cfg) {
// Module laden // Module laden
const turf = require('@turf/turf'); const turf = require('@turf/turf');
const { v5: uuidv5 } = require('uuid'); const {
v5: uuidv5
} = require('uuid');
// SQL-Abfragen // SQL-Abfragen
@ -146,11 +148,11 @@ module.exports = function (db, uuidv4, app_cfg) {
function db_einsatz_check_history(waip_id, einsatzdaten, socket_id, callback) { 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) // 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 // Einsatzdaten in kuzre UUID-Strings umwandeln, diese UUIDs werden dann verglichen
var uuid_em_alarmiert = uuidv5(JSON.stringify(einsatzdaten.em_alarmiert), custom_namespace); var uuid_em_alarmiert = uuidv5(JSON.stringify(einsatzdaten.em_alarmiert), custom_namespace);
delete einsatzdaten.em_alarmiert; 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; delete einsatzdaten.em_weitere;
var uuid_einsatzdaten = uuidv5(JSON.stringify(einsatzdaten), custom_namespace); var uuid_einsatzdaten = uuidv5(JSON.stringify(einsatzdaten), custom_namespace);
// Abfrage ob zu Socket und Waip-ID bereits History-Daten hinterlegt sind // 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) { function db_einsatz_get_by_waipid(waip_id, wachen_nr, user_id, callback) {
// Einsatzdaten entsprechend der WAIP-ID zusammentragen // 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)) { if (isNaN(waip_id) || isNaN(wachen_nr)) {
callback && callback(null); callback && callback(null);
} else { } else {
@ -344,8 +346,6 @@ module.exports = function (db, uuidv4, app_cfg) {
db.run(`DELETE FROM waip_einsaetze WHERE id = ?`, [id]); db.run(`DELETE FROM waip_einsaetze WHERE id = ?`, [id]);
// History loeschen // History loeschen
db.run(`DELETE FROM waip_history WHERE waip_id = ?`, [id]); 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) { 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) { function db_vmtl_get_list(waip_id, callback) {
// Pruefen ob fuer eine Wache im Einsatz ein Verteilerliste hinterlegt ist // 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 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 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) { where em.waip_einsaetze_ID = ?)`, [waip_id], function (err, liste) {
if (err == null && liste) { if (err == null && liste) {
// Falls Liste für Wache hinterlegt, je nach Typ de // waip_id zu Daten hinzufuegen
if () { liste.waip_id = waip_id;
callback && callback(liste);
} 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);
};
});
} else { } else {
callback && callback(null); 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 { 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_fuer_wache: db_rmld_get_fuer_wache,
db_rmld_get_by_rmlduuid: db_rmld_get_by_rmlduuid, db_rmld_get_by_rmlduuid: db_rmld_get_by_rmlduuid,
db_rmld_get_by_waipuuid: db_rmld_get_by_waipuuid, 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_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
}; };
}; };

View File

@ -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) { sql.db_socket_get_by_room(waip.uuid, function (socket_ids) {
// Dashboards trennen, deren Einsatz geloescht wurde // Dashboards trennen, deren Einsatz geloescht wurde
// TODO WAIP: testen der Dashboard-Trennen-Funktion // TODO TEST: testen der Dashboard-Trennen-Funktion
if (socket_ids) { if (socket_ids) {
socket_ids.forEach(function (row) { socket_ids.forEach(function (row) {
var socket = io.of('/dbrd').connected[row.socket_id]; 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 // Mail-Adressen fuer Wachen zu dieser Einsatz-ID ermitteln, siehe db_vmtl_get_list
// csv an diese Mail-Adressen per Mail senden // csv an diese Mail-Adressen per Mail senden
// wenn app_cfg.global.mail_rmld is true // wenn app_cfg.global.mail_rmld is true
db_rmld_loeschen(waip_uuid)
}); });
// Einsatz löschen // Einsatz löschen
sql.db_einsatz_loeschen(waip.id); 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.');
}; };
}); });