update Di 26. Mai 11:31:01 CEST 2020
This commit is contained in:
parent
98ae11e16f
commit
e934c2be9f
21
server.js
21
server.js
@ -1,4 +1,4 @@
|
|||||||
// Module laden
|
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const app = express();
|
const app = express();
|
||||||
@ -9,16 +9,13 @@ const webserver = https.createServer({
|
|||||||
cert: fs.readFileSync('./misc/server.cert', 'utf8')
|
cert: fs.readFileSync('./misc/server.cert', 'utf8')
|
||||||
}, app);
|
}, app);
|
||||||
const io = require('socket.io').listen(webserver);
|
const io = require('socket.io').listen(webserver);
|
||||||
const io_api = require('socket.io-client');
|
|
||||||
const async = require('async');
|
const async = require('async');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const favicon = require('serve-favicon');
|
const favicon = require('serve-favicon');
|
||||||
const bodyParser = require('body-parser');
|
const bodyParser = require('body-parser');
|
||||||
const bcrypt = require('bcrypt');
|
const bcrypt = require('bcrypt');
|
||||||
const passport = require('passport');
|
const passport = require('passport');
|
||||||
const twit = require('twit');
|
|
||||||
const uuidv4 = require('uuid/v4');
|
const uuidv4 = require('uuid/v4');
|
||||||
const turf = require('@turf/turf');
|
|
||||||
|
|
||||||
// Basis-Konfiguration laden
|
// Basis-Konfiguration laden
|
||||||
var app_cfg = require('./server/app_cfg.js');
|
var app_cfg = require('./server/app_cfg.js');
|
||||||
@ -37,22 +34,12 @@ app.use(bodyParser.urlencoded({
|
|||||||
extended: false
|
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
|
// Scripte einbinden
|
||||||
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, uuidv4, turf, app_cfg);
|
var sql = require('./server/sql_qry')(sql_cfg, uuidv4, app_cfg);
|
||||||
var brk = require('./server/broker')(twit, uuidv4, app_cfg);
|
var brk = require('./server/broker')(uuidv4, sql);
|
||||||
var waip = require('./server/waip')(io, sql, brk, async, app_cfg);
|
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 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, uuidv4, app_cfg, passport, auth, waip, udp);
|
var routes = require('./server/routing')(app, sql, uuidv4, app_cfg, passport, auth, waip, udp);
|
||||||
|
|||||||
111
server/api.js
111
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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
@ -1,28 +1,40 @@
|
|||||||
module.exports = function(twit, uuidv4, app_cfg) {
|
module.exports = function (uuidv4, sql) {
|
||||||
|
|
||||||
function alert_twitter_list(twitter_data, callback) {
|
// Module laden
|
||||||
// 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
|
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({
|
var T = new twit({
|
||||||
consumer_key: twitter_data.tw_consumer_key,
|
consumer_key: vmtl_data.tw_consumer_key,
|
||||||
consumer_secret: twitter_data.tw_consumer_secret,
|
consumer_secret: vmtl_data.tw_consumer_secret,
|
||||||
access_token: twitter_data.tw_access_token_key,
|
access_token: vmtl_data.tw_access_token_key,
|
||||||
access_token_secret: twitter_data.tw_access_token_secret//,
|
access_token_secret: vmtl_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.
|
|
||||||
})
|
})
|
||||||
|
|
||||||
var params = {screen_name: twitter_data.tw_screen_name};
|
var params = {
|
||||||
T.get('lists/list', params, function(error, lists, response) {
|
screen_name: vmtl_data.tw_screen_name
|
||||||
|
};
|
||||||
|
|
||||||
|
// Twitter-Liste
|
||||||
|
T.get('lists/list', params, function (error, lists, response) {
|
||||||
if (!error) {
|
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(JSON.stringify(list_obj));
|
||||||
console.log(list_obj[0].id_str);
|
console.log(list_obj[0].id_str);
|
||||||
var member_params = {list_id: list_obj[0].id_str, count: 50};
|
var member_params = {
|
||||||
T.get('lists/members', member_params, function(error, members, response) {
|
list_id: list_obj[0].id_str,
|
||||||
|
count: 50
|
||||||
|
};
|
||||||
|
T.get('lists/members', member_params, function (error, members, response) {
|
||||||
if (!error) {
|
if (!error) {
|
||||||
console.log(JSON.stringify(members));
|
console.log(JSON.stringify(members));
|
||||||
|
|
||||||
@ -30,11 +42,23 @@ console.log('twitter_data'+JSON.stringify(twitter_data));
|
|||||||
for (var i = 0; i < arrayLength; i++) {
|
for (var i = 0; i < arrayLength; i++) {
|
||||||
console.log(members.users[i].screen_name);
|
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();
|
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
|
//Do something
|
||||||
|
|
||||||
var msg_params = {event: {type: "message_create", message_create: {target: {recipient_id: members.users[i].id}, message_data: {text: tw_text}}}};
|
var msg_params = {
|
||||||
T.post('direct_messages/events/new', msg_params, function(error, members, response) {
|
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) {
|
if (!error) {
|
||||||
console.log('OK');
|
console.log('OK');
|
||||||
callback && callback(members);
|
callback && callback(members);
|
||||||
@ -51,14 +75,13 @@ console.log('twitter_data'+JSON.stringify(twitter_data));
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
sql.db_log('VMTL', 'Fehler beim lesen der Twitter-Liste: ' + error);
|
||||||
callback && callback(null);
|
callback && callback(null);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
alert_twitter_list: alert_twitter_list
|
alert_vmtl_list: alert_vmtl_list
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -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
|
// Socket.IO Alarmmonitor
|
||||||
|
|
||||||
@ -50,11 +50,11 @@ 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) {
|
nsp_dbrd.on('connection', function (socket) {
|
||||||
// versuche Client-IP zu ermitteln
|
// versuche Client-IP zu ermitteln
|
||||||
var client_ip = socket.handshake.headers["x-real-ip"] || socket.handshake.headers['x-forwarded-for'] || socket.request.connection.remoteAddress;
|
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
|
//zuerst Server-Version senden, damit der Client diese prueft und die Seite ggf. neu laedt
|
||||||
@ -63,7 +63,7 @@ nsp_dbrd.on('connection', function (socket) {
|
|||||||
socket.on('dbrd', function (uuid) {
|
socket.on('dbrd', function (uuid) {
|
||||||
sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') aufgerufen.');
|
sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') aufgerufen.');
|
||||||
// prüfen ob Dashboard/Einsatz vorhanden
|
// prüfen ob Dashboard/Einsatz vorhanden
|
||||||
sql.db_einsatz_uuid_vorhanden(uuid, function(dbrd_uuid) {
|
sql.db_einsatz_uuid_vorhanden(uuid, function (dbrd_uuid) {
|
||||||
// wenn die Wachennummer vorhanden dann weiter
|
// wenn die Wachennummer vorhanden dann weiter
|
||||||
if (dbrd_uuid) {
|
if (dbrd_uuid) {
|
||||||
// Socket-Room beitreiten
|
// Socket-Room beitreiten
|
||||||
@ -85,63 +85,6 @@ nsp_dbrd.on('connection', function (socket) {
|
|||||||
sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') geschlossen.');
|
sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') geschlossen.');
|
||||||
sql.db_client_delete(socket);
|
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);
|
|
||||||
} 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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 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');
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -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
|
// ermittelt den letzten vorhanden Einsatz zu einer Wache
|
||||||
function db_einsatz_ermitteln(wachen_id, socket, callback) {
|
function db_einsatz_ermitteln(wachen_id, socket, callback) {
|
||||||
|
|||||||
@ -28,9 +28,6 @@ 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
|
// 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) {
|
sql.db_get_vmtl_list(waip_id, function (vmtl_data) {
|
||||||
if (vmtl_data) {
|
if (vmtl_data) {
|
||||||
if (app_cfg.global.development) {
|
|
||||||
console.log('Daten Vermittlung: ' + JSON.stringify(vmtl_data));
|
|
||||||
};
|
|
||||||
brk.alert_vmtl_list(vmtl_data, function (result) {
|
brk.alert_vmtl_list(vmtl_data, function (result) {
|
||||||
if (!result) {
|
if (!result) {
|
||||||
sql.db_log('VMTL', 'Link zur Einsatz-Rückmeldung erfolgreichen an Vermittler-Liste gesendet. ' + result);
|
sql.db_log('VMTL', 'Link zur Einsatz-Rückmeldung erfolgreichen an Vermittler-Liste gesendet. ' + result);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user