diff --git a/package-lock.json b/package-lock.json index 780febc..2326b6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1382,11 +1382,6 @@ } } }, - "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,41 +1601,6 @@ "concat-map": "0.0.1" } }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "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", @@ -1969,14 +1929,6 @@ "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", @@ -1996,14 +1948,6 @@ "safer-buffer": "^2.1.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2649,23 +2593,6 @@ "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", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - } - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -2686,25 +2613,6 @@ "promise": "^7.0.1" } }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2718,33 +2626,6 @@ "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", @@ -2760,72 +2641,11 @@ "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", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, "longest": { "version": "1.0.1", "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", @@ -2947,18 +2767,10 @@ "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" - } + "nodemailer": { + "version": "6.4.10", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.10.tgz", + "integrity": "sha512-j+pS9CURhPgk6r0ENr7dji+As2xZiHSvZeVnzKniLOw1eRAyM/7flP0u65tCnsapV8JFu+t0l/5VeHsCZEeh9g==" }, "nopt": { "version": "4.0.1", @@ -6199,15 +6011,6 @@ } } }, - "passport-jwt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz", - "integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==", - "requires": { - "jsonwebtoken": "^8.2.0", - "passport-strategy": "^1.0.0" - } - }, "passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", @@ -6670,15 +6473,6 @@ } } }, - "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 a5932fe..c3eb51b 100644 --- a/package.json +++ b/package.json @@ -21,15 +21,14 @@ "express": "^4.17.1", "express-session": "^1.17.0", "json2csv": "^5.0.1", + "nodemailer": "^6.4.10", "npm": "^6.13.4", "passport": "^0.4.1", "passport-ip": "^0.1.2", - "passport-jwt": "^4.0.0", "passport-local": "^1.0.0", "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/waip.js b/server/waip.js index 735ab36..d30f2d7 100755 --- a/server/waip.js +++ b/server/waip.js @@ -1,10 +1,10 @@ module.exports = function (io, sql, fs, brk, async, app_cfg) { // Module laden - const { parse } = require('json2csv'); - const sendmail = require('sendmail')({ - silent: true - }); + const { + parse + } = require('json2csv'); + const nodemailer = require('nodemailer'); function waip_speichern(einsatz_daten) { // Einsatzmeldung in Datenbank speichern und verteilen @@ -309,7 +309,10 @@ module.exports = function (io, sql, fs, brk, async, app_cfg) { data.forEach(function (row) { // fuer jede Wache (row.room) die verbundenen Sockets(Clients) ermitteln und Standby senden var room_sockets = io.nsps['/waip'].adapter.rooms[row.room]; + console.log('room_sockets'); + if (typeof room_sockets !== 'undefined') { + console.log(room_sockets.sockets); Object.keys(room_sockets.sockets).forEach(function (socket_id) { // Standby senden var socket = io.of('/waip').connected[socket_id]; @@ -348,16 +351,18 @@ module.exports = function (io, sql, fs, brk, async, app_cfg) { var part_rmld = full_rmld; console.log('bereite export vor'); console.log(part_rmld); - + // FIXME full_rmld.filter(obj => obj.wache_id.startsWith(export_data.export_filter)); // CSV-Spalten definieren var csv_col = ['id', 'einsatznummer', 'waip_uuid', 'rmld_uuid', 'alias', 'einsatzkraft', 'maschinist', 'fuehrungskraft', 'agt', 'set_time', 'arrival_time', 'wache_id', 'wache_nr', 'wache_name']; - var opts = { csv_col }; + var opts = { + csv_col + }; try { var csv = parse(part_rmld, opts); console.log(csv); // CSV Dateiname und Pfad festlegen - //FIXME csv export nochmals prüfen + //TODO csv export nochmals prüfen var csv_filename = 'einsatz_' + part_rmld[0].einsatznummer + '_export_' + export_data.export_name.replace(/[/\\?%*:|"<>]/g, '') + '.csv'; csv_path = process.cwd() + app_cfg.rmld.backup_path; //+ csv_filename; @@ -365,18 +370,20 @@ module.exports = function (io, sql, fs, brk, async, app_cfg) { // CSV in Backup-Ordner speichern, falls aktiviert if (app_cfg.rmld.backup_to_file) { // Ordner erstellen - fs.mkdir(csv_path, { recursive: true }, function (err) { + fs.mkdir(csv_path, { + recursive: true + }, function (err) { if (err) { sql.db_log('EXPORT', 'Fehler beim Erstellen des Backup-Ordners: ' + err); }; - // CSV speichern - fs.writeFile(csv_path + csv_filename, csv, function (err) { - if (err) { - console.log(err); - sql.db_log('EXPORT', 'Fehler beim speichern der Export-CSV: ' + err); - }; + // CSV speichern + fs.writeFile(csv_path + csv_filename, csv, function (err) { + if (err) { + console.log(err); + sql.db_log('EXPORT', 'Fehler beim speichern der Export-CSV: ' + err); + }; + }); }); - }); }; //FIXME anderen Email-Dienst // CSV per Mail versenden, falls aktiviert @@ -384,25 +391,36 @@ module.exports = function (io, sql, fs, brk, async, app_cfg) { // pruefen ob Mail plausibel ist var validmail = /\S+@\S+\.\S+/; if (validmail.test(export_data.export_recipient)) { - var mail_from = 'keineantwort@wachalarm.info.tm'; //+ app_cfg.global.url.replace(/(^\w+:|^)\/\//, ''); - var mail_subject = 'Automatischer Export Rückmeldungen Wachalarm-IP - ' + export_data.export_name + ' - Einsatz ' + part_rmld[0].einsatznummer; - var mail_html = 'Hallo,

anbei der automatische Export aller Einsatz-Rückmeldungen für den Einsatz ' + part_rmld[0].einsatznummer + '

Mit freundlichen Grüßen

' + app_cfg.global.company; - sendmail({ - from: mail_from, + // Mail-Server + var transport = nodemailer.createTransport({ + host: app_cfg.rmld.mailserver_host, + port: app_cfg.rmld.mailserver_port, + secure: app_cfg.rmld.secure_mail, + auth: { + user: app_cfg.rmld.mail_user, + pass: app_cfg.rmld.mail_pass + } + }); + var mail_message = { + from: { + name: 'Wachalarm-IP-Web - ' + app_cfg.global.company, + address: app_cfg.rmld.mail_from + }, to: export_data.export_recipient, - subject: mail_subject, - html: mail_html, + subject: 'Automatischer Export Wachalarm-IP-Web - ' + export_data.export_name + ' - Einsatz ' + part_rmld[0].einsatznummer, + text: 'Hallo,

anbei der automatische Export aller Einsatz-Rückmeldungen für den Einsatz ' + part_rmld[0].einsatznummer + '

Mit freundlichen Grüßen

' + app_cfg.global.company, attachments: [{ filename: csv_filename, content: csv }] - }, function (err, reply) { - if (!err) { - sql.db_log('EXPORT', 'Mail an ' + export_data.mail_subject + ' gesendet - ' + reply); + }; + transport.sendMail(mail_message, function (err, info) { + if (err) { + sql.db_log('EXPORT', 'Fehler beim senden der Export-Mail an ' + export_data.mail_subject + ': ' + err); } else { - sql.db_log('EXPORT', 'Fehler beim senden der Export-Mail an ' + export_data.mail_subject + ' - ' + err + '; ' + err.stack); - }; - }) + sql.db_log('EXPORT', 'Mail an ' + export_data.mail_subject + ' gesendet: ' + info); + } + }); } else { sql.db_log('EXPORT', 'Fehler beim versenden der Export-Mail an ' + export_data.mail_subject + ' - keine richtige Mail-Adresse!'); };