diff --git a/server/saver.js b/server/saver.js index f01d60c..7d17fc7 100755 --- a/server/saver.js +++ b/server/saver.js @@ -8,58 +8,53 @@ module.exports = function (app_cfg, sql, waip, uuidv4, io, remote_api) { // Speichern eines neuen Einsatzes function save_new_waip(waip_data, remote_addr, app_id) { - // ist JSON? - if (isValidJSON(waip_data)) { - // Daten validieren - validate_waip(waip_data, function (valid) { - if (valid) { - // Polygon erzeugen und zuweisen falls nicht vorhanden - if (!waip_data.ortsdaten.wgs84_area) { - var wgs_x = parseFloat(waip_data.ortsdaten.wgs84_x); - var wgs_y = parseFloat(waip_data.ortsdaten.wgs84_y); - var point = turf.point([wgs_y, wgs_x]); - var buffered = turf.buffer(point, 1, { - steps: app_cfg.global.circumcircle, - units: 'kilometers' - }); - var bbox = turf.bbox(buffered); - var new_point = turf.randomPoint(1, { - bbox: bbox - }); - var new_buffer = turf.buffer(new_point, 1, { - steps: app_cfg.global.circumcircle, - units: 'kilometers' - }) - waip_data.ortsdaten.wgs84_area = new_buffer; - }; - // pruefen, ob vielleicht schon ein Einsatz mit einer UUID gespeichert ist - sql.db_einsatz_get_uuid_by_enr(waip_data.einsatzdaten.nummer, function (waip_uuid) { - if (waip_uuid) { - // wenn ein Einsatz mit UUID schon vorhanden ist, dann diese setzten / ueberschreiben - waip_data.einsatzdaten.uuid = waip_uuid; - } else { - // uuid erzeugen und zuweisen falls nicht bereits in JSON vorhanden, oder falls keine korrekte uuid - if (!waip_data.einsatzdaten.uuid || !uuid_pattern.test(waip_data.einsatzdaten.uuid)) { - waip_data.einsatzdaten.uuid = uuidv4(); - }; - }; - // nicht erwuenschte Daten ggf. enfernen (Datenschutzoption) - filter_api_data(waip_data, remote_addr, function (data_filtered) { - // Einsatz in DB Speichern - waip.waip_speichern(data_filtered); - sql.db_log('WAIP', 'Neuer Einsatz von ' + remote_addr + ' wird jetzt verarbeitet: ' + JSON.stringify(data_filtered)); - }); - // Einsatzdaten per API weiterleiten (entweder zum Server oder zum verbunden Client) - api_server_to_client_new_waip(waip_data, app_id); - api_client_to_server_new_waip(waip_data, app_id); + // ist JSON valide + validate_waip(waip_data, function (waip_json) { + if (waip_json) { + // Polygon erzeugen und zuweisen falls nicht vorhanden + if (!waip_json.ortsdaten.wgs84_area) { + var wgs_x = parseFloat(waip_json.ortsdaten.wgs84_x); + var wgs_y = parseFloat(waip_json.ortsdaten.wgs84_y); + var point = turf.point([wgs_y, wgs_x]); + var buffered = turf.buffer(point, 1, { + steps: app_cfg.global.circumcircle, + units: 'kilometers' }); - } else { - sql.db_log('WAIP', 'Fehler: Einsatz von ' + remote_addr + ' nicht valide: ' + JSON.stringify(waip_data)); + var bbox = turf.bbox(buffered); + var new_point = turf.randomPoint(1, { + bbox: bbox + }); + var new_buffer = turf.buffer(new_point, 1, { + steps: app_cfg.global.circumcircle, + units: 'kilometers' + }) + waip_json.ortsdaten.wgs84_area = new_buffer; }; - }); - } else { - sql.db_log('WAIP', 'Fehler: Einsatz von ' + remote_addr + ' Fehlerhaft: ' + JSON.stringify(waip_data)); - }; + // pruefen, ob vielleicht schon ein Einsatz mit einer UUID gespeichert ist + sql.db_einsatz_get_uuid_by_enr(waip_json.einsatzdaten.nummer, function (waip_uuid) { + if (waip_uuid) { + // wenn ein Einsatz mit UUID schon vorhanden ist, dann diese setzten / ueberschreiben + waip_json.einsatzdaten.uuid = waip_uuid; + } else { + // uuid erzeugen und zuweisen falls nicht bereits in JSON vorhanden, oder falls keine korrekte uuid + if (!waip_json.einsatzdaten.uuid || !uuid_pattern.test(waip_json.einsatzdaten.uuid)) { + waip_json.einsatzdaten.uuid = uuidv4(); + }; + }; + // nicht erwuenschte Daten ggf. enfernen (Datenschutzoption) + filter_api_data(waip_json, remote_addr, function (data_filtered) { + // Einsatz in DB Speichern + waip.waip_speichern(data_filtered); + sql.db_log('WAIP', 'Neuer Einsatz von ' + remote_addr + ' wird jetzt verarbeitet: ' + JSON.stringify(data_filtered)); + }); + // Einsatzdaten per API weiterleiten (entweder zum Server oder zum verbunden Client) + api_server_to_client_new_waip(waip_json, app_id); + api_client_to_server_new_waip(waip_json, app_id); + }); + } else { + sql.db_log('WAIP', 'Fehler: Einsatz von ' + remote_addr + ' nicht valide: ' + JSON.stringify(waip_data)); + }; + }); }; function save_new_rmld(data, remote_addr, app_id, callback) { @@ -86,35 +81,52 @@ module.exports = function (app_cfg, sql, waip, uuidv4, io, remote_api) { }); }; - // Funktion um zu pruefen, ob Nachricht im JSON-Format ist - function isValidJSON(json_obj) { - try { - // versuche das JSON-Objekt zu parsen, falls es ein JSON-String ist - var tmp = JSON.parse(json_obj); - return tmp; - } catch (e) { - // klappt das Parson nicht, versuche den JSON-String in String zu kopieren - var text = JSON.stringify(json_obj); - // teste ob der String JSON-Konform ist - if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - var tmp = JSON.parse(json_obj); - return tmp; - } else { - return false; - }; - }; - }; - function validate_waip(data, callback) { // TODO Validierung: Einsatzdaten auf Validität prüfen - // Log - if (app_cfg.global.development) { - console.log('Validierung WAIP: ' + JSON.stringify(data)); + // Typ ist NULL + if (data === null) { + callback && callback(false); }; - callback && callback(true); - // SQL-Log + // Typ ist undefined + if (data === undefined) { + callback && callback(false); + }; + + // Typ ist String + if (data.constructor == String) { + // teste ob der String JSON-Konform ist + var text = JSON.stringify(data); + if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + // falls ja, dann versuche String in JSON zu parsen + try { + var tmp = JSON.parse(text); + callback && callback(tmp); + } catch (error) { + callback && callback(false); + }; + } else { + callback && callback(false); + }; + }; + // Typ ist Object + if (data.constructor === Object) { + console.log(data); + + try { + var tmp = JSON.parse(text); + console.log(tmp); + callback && callback(tmp); + } catch (error) { + callback && callback(false); + }; + }; + + // Log + if (app_cfg.global.development) { + //console.log('Validierung WAIP: ' + JSON.stringify(data)); + }; }; function validate_rmld(data, callback) {