From 7392b1c46b09cf8fda418d8e2795862d258d70f2 Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Sat, 13 Jun 2020 23:31:01 +0200 Subject: [PATCH] update Sa 13. Jun 23:31:01 CEST 2020 --- package-lock.json | 145 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 7 +++ server.js | 2 +- server/api.js | 39 +++++-------- server/app_cfg.js | 8 +-- 5 files changed, 171 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8aae444..aef0755 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1382,6 +1382,11 @@ } } }, + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" + }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -1606,6 +1611,36 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "buildmail": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-3.10.0.tgz", + "integrity": "sha1-xoJtcW55RbtvaxQ0tTmF4CmgMVk=", + "requires": { + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "2.1.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + }, + "libmime": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-2.1.0.tgz", + "integrity": "sha1-Ubx23iKDFh65BRxLyArtcT5P0c0=", + "requires": { + "iconv-lite": "0.4.13", + "libbase64": "0.1.0", + "libqp": "1.1.0" + } + } + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -1934,6 +1969,14 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "dkim-signer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dkim-signer/-/dkim-signer-0.2.2.tgz", + "integrity": "sha1-qoHsBx7u02IngbqpIgRNeADl8wg=", + "requires": { + "libmime": "^2.0.3" + } + }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -2584,6 +2627,28 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "json2csv": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-5.0.1.tgz", + "integrity": "sha512-QFMifUX1y8W2tKi2TwZpnzf2rHdZvzdmgZUMEMDF46F90f4a9mUeWfx/qg4kzXSZYJYc3cWA5O+eLXk5lj9g8g==", + "requires": { + "commander": "^5.0.0", + "jsonparse": "^1.3.1", + "lodash.get": "^4.4.2" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + } + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -2653,6 +2718,33 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, + "libbase64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=" + }, + "libmime": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-2.1.3.tgz", + "integrity": "sha1-JQF8pataHpiq2+JyUBfPHUikKgw=", + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=" + }, "lineclip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/lineclip/-/lineclip-1.1.5.tgz", @@ -2663,6 +2755,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -2703,6 +2800,32 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, + "mailcomposer": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-3.12.0.tgz", + "integrity": "sha1-nF4RiKqOHGLsi4a9Q0aBArY56Pk=", + "requires": { + "buildmail": "3.10.0", + "libmime": "2.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + }, + "libmime": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-2.1.0.tgz", + "integrity": "sha1-Ubx23iKDFh65BRxLyArtcT5P0c0=", + "requires": { + "iconv-lite": "0.4.13", + "libbase64": "0.1.0", + "libqp": "1.1.0" + } + } + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -2824,6 +2947,19 @@ "tar": "^4" } }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=" + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", @@ -6529,6 +6665,15 @@ } } }, + "sendmail": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sendmail/-/sendmail-1.6.1.tgz", + "integrity": "sha512-lIhvnjSi5e5jL8wA1GPP6j2QVlx6JOEfmdn0QIfmuJdmXYGmJ375kcOU0NSm/34J+nypm4sa1AXrYE5w3uNIIA==", + "requires": { + "dkim-signer": "0.2.2", + "mailcomposer": "3.12.0" + } + }, "serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", diff --git a/package.json b/package.json index 2cd8396..a5932fe 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,11 @@ "name": "waip-web", "version": "0.1.2", "description": "Web-Version des Wachalarm-IP", + "repository": { + "type": "git", + "url": "https://github.com/Robert-112/Wachalarm-IP-Web.git" + }, + "license": "Creative Commons Attribution Share Alike 4.0 International", "scripts": { "start": "node server.js" }, @@ -15,6 +20,7 @@ "cookie-parser": "^1.4.4", "express": "^4.17.1", "express-session": "^1.17.0", + "json2csv": "^5.0.1", "npm": "^6.13.4", "passport": "^0.4.1", "passport-ip": "^0.1.2", @@ -23,6 +29,7 @@ "passport.socketio": "^3.7.0", "pug": "^2.0.4", "req-flash": "0.0.3", + "sendmail": "^1.6.1", "serve-favicon": "^2.5.0", "socket.io": "^2.3.0", "socket.io-client": "^2.3.0", diff --git a/server.js b/server.js index d67587e..e6acaf2 100644 --- a/server.js +++ b/server.js @@ -37,11 +37,11 @@ app.use(bodyParser.urlencoded({ // Scripte einbinden var sql_cfg = require('./server/sql_cfg')(fs, bcrypt, app_cfg); var sql = require('./server/sql_qry')(sql_cfg, uuidv4, app_cfg); -var api = require('./server/api')(sql_cfg, uuidv4, app_cfg); var brk = require('./server/broker')(app_cfg, sql, uuidv4); var proof = require('./server/proof')(app_cfg, sql); var waip = require('./server/waip')(io, sql, fs, brk, async, app_cfg, api, proof); var socket = require('./server/socket')(io, sql, app_cfg, waip); +var api = require('./server/api')(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 4228a31..12b7e7f 100755 --- a/server/api.js +++ b/server/api.js @@ -36,7 +36,7 @@ module.exports = function (io, sql, app_cfg, waip) { var app_id = raw_data.app_id; // nur speichern wenn app_id nicht eigenen globalen app_id entspricht if (app_id != app_cfg.global.app_id) { - // nicht erwuenschte Daten ggf. enfernen + // nicht erwuenschte Daten ggf. enfernen (Datenschutzoption) filter_api_data(data, remote_ip, function (data_filtered) { waip.waip_speichern(data_filtered, app_id); sql.db_log('API', 'Neuer Wachalarm von ' + remote_ip + ': ' + data_filtered); @@ -128,8 +128,12 @@ module.exports = function (io, sql, app_cfg, waip) { var app_id = raw_data.app_id; // nur speichern wenn app_id nicht eigenen globalen app_id entspricht if (app_id != app_cfg.global.app_id) { - waip.waip_speichern(data, app_id); - sql.db_log('API', 'Neuer Wachalarm von ' + app_cfg.endpoint.host + ': ' + data); + // nicht erwuenschte Daten ggf. enfernen (Datenschutzoption) + app_cfg.endpoint.host + filter_api_data(data, app_cfg.endpoint.host, function (data_filtered) { + waip.waip_speichern(data_filtered, app_id); + sql.db_log('API', 'Neuer Wachalarm von ' + app_cfg.endpoint.host + ': ' + data_filtered); + }); }; }); @@ -183,44 +187,31 @@ module.exports = function (io, sql, app_cfg, waip) { if (app_cfg.filter.enabled) { // Filter nur anwenden wenn Einsatzdaten von bestimmten IP-Adressen kommen if (app_cfg.filter.on_message_from.includes(remote_ip)) { + var data_filtered = data; // Schleife definieren - function loop_done(waip_id) { - callback && callback(waip_id); + function loop_done(data_filtered) { + callback && callback(data_filtered); }; var itemsProcessed = 0; - // Einsatzmittel zum Einsatz speichern + // nicht gewollte Daten entfernen app_cfg.filter.remove_data.forEach(function (item, index, array) { - data.einsatzdaten[item] = ''; - data.ortsdaten[item] = ''; + data_filtered.einsatzdaten[item] = ''; + data_filtered.ortsdaten[item] = ''; // Schleife erhoehen itemsProcessed++; if (itemsProcessed === array.length) { // Schleife beenden - loop_done(id); + loop_done(data_filtered); }; - }); + }); } else { callback && callback(data); }; } else { callback && callback(data); }; - - - - - - // nur speichern wenn Einsatztyp akzeptiert wird - if (app_cfg.filter.receive_missiontype.includes(data.einsatzdaten.art) || app_cfg.filter.receive_missiontype.length == 0) { - // nur speichern wenn app_id nicht eigenen globalen app_id entspricht - - } else { - sql.db_log('API', 'Wachalarm von ' + remote_ip + ' abgelehnt. Einsatzart nicht erlaubt: ' + data.einsatzdaten.art); - }; - }; - return { server_to_client_new_waip: server_to_client_new_waip, server_to_client_new_rmld: server_to_client_new_rmld, diff --git a/server/app_cfg.js b/server/app_cfg.js index 1dfd5e8..182c2a6 100644 --- a/server/app_cfg.js +++ b/server/app_cfg.js @@ -9,7 +9,7 @@ app_cfg.global = { database: './database.sqlite3', soundpath: '/public/media/', mediapath: '/media/', - time_to_delete_waip: 60, + time_to_delete_waip: 25, default_time_for_standby: 10, circumcircle: 5, defaultuser: 'me', @@ -57,11 +57,9 @@ app_cfg.endpoint = { // Schnittstellendaten von bestimmten Clients entfernen (Datenschutzoption) app_cfg.filter = { - // FIXME in api rausfiltern enabled: true, - on_message_from: ['192.168.2.20', '192.168.2.30'], - remove_einsatzdaten: ['besonderheiten'], - remove_ortsdaten: ['strasse', 'objekt', 'objektnr', 'wachfolge', 'wgs84_x', 'wgs84_y'] + on_message_from: ['192.168.2.20', 'https://192.168.1.25:8090/api'], + remove_data: ['besonderheiten', 'strasse', 'objekt', 'objektnr', 'wachfolge', 'wgs84_x', 'wgs84_y'] }; module.exports = app_cfg; \ No newline at end of file