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'
};
// 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;

View File

@ -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 {

View File

@ -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
@ -150,7 +152,7 @@ module.exports = function (db, uuidv4, app_cfg) {
// 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
};
};

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) {
// 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.');
};
});