From 8d5d650e6e0b44b2801a1fd341950a1fb87a0815 Mon Sep 17 00:00:00 2001 From: Johannes Hoermann <j.hoermann@adito.de> Date: Mon, 1 Jul 2019 15:14:12 +0200 Subject: [PATCH] Webservice --- process/DSGVO_lib/process.js | 374 ++++++++++++++++++++++++++++ process/WsValidation_lib/process.js | 6 +- 2 files changed, 377 insertions(+), 3 deletions(-) create mode 100644 process/DSGVO_lib/process.js diff --git a/process/DSGVO_lib/process.js b/process/DSGVO_lib/process.js new file mode 100644 index 0000000000..1e7b8df70e --- /dev/null +++ b/process/DSGVO_lib/process.js @@ -0,0 +1,374 @@ +import("Attribute_lib"); +import("system.logging"); +import("Keyword_lib") +import("KeywordRegistry_basic"); +import("system.translate"); +import("Sql_lib"); +import("system.util"); +import("system.vars"); +import("system.db"); +import("system.neon"); +import("system.result"); +import("Report_lib"); + +// TODO Funktionen aus Adito5 übernehmen und anpassen + + +function getDSGVOTypes (pPerson, pTablename) +{ + var res = []; + + var tablename = KeywordUtils.getViewValue($KeywordRegistry.DSGVOTablename(), pTablename); + + if (tablename == "Adressen") + { + // TODO liefert aktuell nur eine Privatadresse, wenn mehrere Vorhanden und keine Firmenadresse + // Bsp Birgit Leicht + + var addr = db.table(SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPerson) + .buildSql("select ADDR_TYPE from ADDRESS join CONTACT on ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID ", + "1 = 1", "group by ADDR_TYPE")); + + addr.forEach(function (row) + { + res.push([row[0], KeywordUtils.getViewValue($KeywordRegistry.addressType(), row)]); + }); + return res; + } else if(tablename == "Kommunikationsdaten") + { + var comm = db.table(SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPerson) + .buildSql("select MEDIUM_ID from COMMUNICATION join CONTACT on COMMUNICATION.CONTACT_ID = CONTACTID", + "1 = 1", "group by MEDIUM_ID")); + + comm.forEach(function (row) + { + res.push([row[0], KeywordUtils.getViewValue($KeywordRegistry.communicationMedium(), row)]); + }); + return res; + }else if(tablename == "Eigenschaft") + { + res.push(["34c2ddb4-97ce-4683-a067-89a38643ecae", KeywordUtils.getViewValue($KeywordRegistry.DSGVOType(), "34c2ddb4-97ce-4683-a067-89a38643ecae")]); + return res; + }else if(tablename == "Persönliche Daten") + { + res.push(["dcc34a11-c86b-4acd-9987-e88c98b5b4c5", KeywordUtils.getViewValue($KeywordRegistry.DSGVOType(), "dcc34a11-c86b-4acd-9987-e88c98b5b4c5")]); + res.push(["c626726a-a696-4926-9b0f-c320c410463e", KeywordUtils.getViewValue($KeywordRegistry.DSGVOType(), "c626726a-a696-4926-9b0f-c320c410463e")]); + return res; + } + + return res; +} + +function getDSGVOValues(pPerson, pTablename, pType) +{ + var res = []; + var tablename = KeywordUtils.getViewValue($KeywordRegistry.DSGVOTablename(), pTablename); + + if (tablename == "Adressen") + { + var addr = db.table(SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPerson) + .buildSql("select ADDRESSID, ADDRESS, ADDRESSADDITION, ADDRIDENTIFIER, " + + "BUILDINGNO, CITY, COUNTRY, DISTRICT, REGION, STATE, ZIP, ADDR_TYPE " + + "from ADDRESS join CONTACT on ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID", "1 = 1")); + + var addrVal = ""; + + addr.forEach(function (addrRow) + { + if(pType == addrRow[11]) + addrVal = addrRow[1] + " " + addrRow[2] + " " + addrRow[3] + " "+ addrRow[4] + " " + + addrRow[5] + " " + addrRow[6] + " " + addrRow[7] + " " + + addrRow[8] + " " + addrRow[9] + " " + addrRow[10]; + res.push([addrRow[0], addrVal]); + }); + return res; + }else if(tablename == "Kommunikationsdaten") + { + var comm = db.table(SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPerson) + .buildSql("select COMMUNICATIONID, ADDR, MEDIUM_ID " + + "from COMMUNICATION join CONTACT on COMMUNICATION.CONTACT_ID = CONTACTID", "1 = 1")); + + comm.forEach(function (entry) + { + if(pType == entry[2]) + res.push([entry[2], entry[1]]); + }); + }else if(tablename == "Eigenschaft") + { + var attr = AttributeRelationUtils.getAllAttributes(pPerson, "Person"); + logging.log(attr); + /*attr.forEach(function (entry) + { + // TODO muss erst attr was liefern, --> leer + res.push(["", ""]); + })*/ + + // Keyword KeyId: ["34c2ddb4-97ce-4683-a067-89a38643ecae", KeywordUtils.getViewValue($KeywordRegistry.DSGVOType(), "34c2ddb4-97ce-4683-a067-89a38643ecae")]); + + return res; + }else if(tablename == "Persönliche Daten") + { + + var pers = db.table(SqlCondition.begin() + .andPrepare("PERSON.PERSONID", pPerson) + .buildSql("select PERSONID, DATEOFBIRTH, FIRSTNAME, MIDDLENAME, LASTNAME, " + + "GENDER, SALUTATION, TITLE, TITLESUFFIX, PICTURE " + + "from PERSON", "1 = 1")); + + switch (pType) + { + case "dcc34a11-c86b-4acd-9987-e88c98b5b4c5": // names + res.push(["dcc34a11-c86b-4acd-9987-e88c98b5b4c5", (pers[0][6] + " " + pers[0][7] + " " + pers[0][8] + " " + pers[0][2] + " " + pers[0][3] + " " + pers[0][4])]); + return res; + case "c626726a-a696-4926-9b0f-c320c410463e": // Sonstige Persönliche Daten + res.push(["c626726a-a696-4926-9b0f-c320c410463e", (pers[0][9] + pers[0][1] + ", " + pers[0][5])]); + return res; + } + } + return res; + +} + +function getSpecificRowId(pPerson, pTablename) +{ + var tablename = KeywordUtils.getViewValue($KeywordRegistry.DSGVOTablename(), pTablename); + + if (tablename == "Adressen") + { + return db.cell(SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPerson) + .buildSql("select ADDRESSID from ADDRESS join CONTACT on ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID", "1 = 1")); + }else if(tablename == "Kommunikationsdaten") + { + return db.cell(SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPerson) + .buildSql("select COMMUNICATIONID from COMMUNICATION join CONTACT on COMMUNICATION.CONTACT_ID = CONTACTID", "1 = 1")); + }else if(tablename == "Eigenschaft") + { + // TODO attribute + return ""; + }else if(tablename == "Persönliche Daten") + { + return pPerson; + } + else + return null; +} + +function openDSGVOReport(pPerson, pReportName) +{ + var DSGVOReport = new Report(pReportName); + + // TODO: get Images implementieren + var imgData = ["meineFirma | Konrad-Zuse-Straße 4 | DE 84144 Geisenhausen", + "base64:iVBORw0KGgoAAAANSUhEUgAAAM4AAABRCAYAAACaL5lSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA4QzAyM0IwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA4QzAyM0MwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDhDMDIzOTBEQjAxMUU0QUYwNEQzRUQyMTFGOUFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDhDMDIzQTBEQjAxMUU0QUYwNEQzRUQyMTFGOUFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhF3nYoAAAlvSURBVHja7J1fjBXV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"] + + var dsgvo = SQLCondition.begin().andPrepareValue("DSGVO.CONTACT_ID", pPerson) + .buildSql("select DSGVOID, ROW_ID, STATUORITYSOURCE, PURPOSE, TABLENAME, VALID_TO, CONTACT_ID " + + "from DSGVO", "1 = 1") + // getDSGVOTypes / -Values + + // TODO Parameter und Felder + // params: adito.image.myLogo, myAddress, address, salutation, dateRequest, deadline, dateSaveTill, transmission, fromOther + // Felder PURPOSE, STATUORITYSOURCE, VALID_TO, TYPE, VALUE + + var params = { + "adito.image.myLogo" : "", + "myAddress" : "", + "address" : "", + "salutation" : "", // ggf. lettersalutation -> Contact + "dateRequest" : "", + "deadline" : "", + "dateSaveTill" : "", + "transmission" : "", + "fromOther" : "" + }; + + DSGVOReport.setReportData(ReportData.begin([ + "PURPOSE", + "STATUORITYSOURCE", + "VALID_TO", + "TYPE", + "VALUE" + ])); + DSGVOReport.addImage("myLogo", imgData[1]); + DSGVOReport.addReportParams(params); + DSGVOReport.openReport(); +} + + +/** + * makes selected data from a private contact anonymous + * + * @param pPersId + * @param pContactId + */ +function dsgvoMkDataAnonymous(pPersId, pContactId) +{ + // TODO Only Data that comes from private contacts + // TODO ggf. nur ein Param notwendig? oder pRowId statt pPersId + + //Hat die Privat-Person auch eine Funktion an einer Firma + var hasFunction = db.cell(SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPersId) + .andPrepare("CONTACT.ORGANISATION_ID", "0", "# != ?") // TODO ungleich 0, stimmt das so? + .build(" select count(*) from CONTACT", "1=2")); + // db.cell(" select count(*) from RELATION where PERS_ID = '" + pPersId + "' and ORGANISATION != '0' "); + + var prompts = new Array(); + prompts["PERSREL"] = hasFunction; + var jsonResult = openOkCancelDialog("DLG_CHOOSE_DATA_PRIVACY_ANONYMISATION", prompts); + var newAnonymCategories = new Array(); + var updArray = []; + + if (jsonResult["button"] != "ok") + return; + + var data, values, columns, columnTypes, condition; + + //Namen + if ((jsonResult["comp.chb_Names"] == "true")) + { + data = db.array(db.ROW, SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPersId) + .build("select SALUTATION, TITLE, FIRSTNAME, MIDDLENAME, LASTNAME from PERS ", "1=2") + ); + /*data = db.array(db.ROW, "select SALUTATION, TITLE, FIRSTNAME, MIDDLENAME, LASTNAME " + + " from PERS " + + " where PERSID = '" + pPersId + "'");*/ + + values = [dsgvoMkTextAnonymous(data[0]), dsgvoMkTextAnonymous(data[1]), dsgvoMkTextAnonymous(data[2]), dsgvoMkTextAnonymous(data[3]), dsgvoMkTextAnonymous(data[4])]; + columns = ["SALUTATION", "TITLE", "FIRSTNAME", "MIDDLENAME", "LASTNAME"]; + columnTypes = db.getColumnTypes("PERSON", columns); + condition = SqlCondition.andPrepare("PERSONID", pPersId) + .and("1=2"); + //condition = "PERSONID = '" + pPersId + "'"; + updArray.push(["PERSON", columns, columnTypes, values, condition]) + + newAnonymCategories.push(translate.text("Namen")); + } + + //sonstige personenbezogene Daten + if (jsonResult["comp.chb_others"] == "true") + { + data = db.array(db.ROW, SqlCondition.begin() + .andPrepare("CONTACT.PERSON_ID", pPersId) + .build("select DOB, GENDER, SUFFIX, PERSINFO from PERS ", "1=2")); + + /*, "select DOB, GENDER, SUFFIX, PERSINFO " + + " from PERS " + + " where PERSID = '" + pPersId + "' ") + */ + values = ["", "", "", ""]; + columns = ["DOB", "GENDER", "SUFFIX", "PERSINFO"]; + columnTypes = db.getColumnTypes("PERS", columns); + condition = SqlCondition.andPrepare("PERSONID", pPersId) + .and("1=2"); + //condition = "PERSID = '" + pPersId + "'"; + updArray.push(["PERS", columns, columnTypes, values, condition]) + + newAnonymCategories.push(translate.text("Sonstige personenbezogene Daten")); + } + + //Addressen + if(jsonResult["comp.chb_Address"] == "true") + { + data = db.table(SqlCondition.begin() + .andPrepare("CONTACT_ID", pContactId) + .build("select ADDRESS, STATE, CITY, COUNTRY, REGION, BUILDINGNO, ADDRESSADDITION, ZIP, DISTRICT, ADDRESSID " + + " from ADDRESS ", "1=2" )); + + /*" select ADDRESS, STATE, CITY, COUNTRY, REGION, BUILDINGNO, ADDRESSADDITION, ZIP, DISTRICT, ADDRESSID " + + " from ADDRESS " + + " where RELATION_ID = '" + pContactId + "' "); +*/ + columns = ["ADDRESS", "STATE", "CITY", "COUNTRY", "REGION", "BUILDINGNO", "ADDRESSADDITION", "ZIP", "DISTRICT"]; + columnTypes = db.getColumnTypes("ADDRESS", columns); + + //Jede Addresse muss separat anonymisiert werden + for (let i = 0; i < data.length; i++) { + values = [dsgvoMkTextAnonymous(data[i][0]), dsgvoMkTextAnonymous(data[i][1]), + dsgvoMkTextAnonymous(data[i][2]), dsgvoMkTextAnonymous(data[i][3]), + dsgvoMkTextAnonymous(data[i][4]), dsgvoMkTextAnonymous(data[i][5]), + dsgvoMkTextAnonymous(data[i][6]), dsgvoMkTextAnonymous(data[i][7]), + dsgvoMkTextAnonymous(data[i][8])]; + + // TODO prüfen + condition = SqlCondition.andPrepare("CONTACT_ID", pContactId) + .andPrepare("ADDRESSID", data[i][9]) + .and("1=2"); + //condition = " CONTACT_ID = '" + pContactId + "' and ADDRESSID = '" + data[i][9] + "' "; + updArray.push(["ADDRESS", columns, columnTypes, values, condition]); + } + newAnonymCategories.push(translate.text("Adressdaten")); + } + + //Kommunikationsdaten + if (jsonResult["comp.chb_Comm"] == "true") + { + data = db.table(SqlCondition.begin() + .andPrepare("CONTACT_ID", pContactId) + .build("select ADDRESS, SEARCHADDR, COMMUNICATIONID from COMMUNICATION", "1=2")); + //data = db.table("select ADDR, SEARCHADDR, COMMID from COMM where RELATION_ID = '" + pContactId + "'"); + + columns = ["ADDR", "SEARCHADDR"]; + columnTypes = db.getColumnTypes("COMM", columns); + + for (let i = 0; i < data.length; i++) { + values = [dsgvoMkTextAnonymous(data[i][0]), dsgvoMkTextAnonymous(data[i][1])]; + + condition = SqlCondition.andPrepare("CONTACT_ID", pContactId) + .andPrepare("COMMUNICATIONID", data[i][2]).and("1=2"); + // TODO prüfen + //"RELATION_ID = '" + pContactId + "' and COMMID = '" + data[i][2] + "' "; + + updArray.push(["COMM", columns, columnTypes, values, condition]); + } + newAnonymCategories.push(translate.text("Kommunikationsdaten")); + } + + if (updArray.length > 0) + db.updates(updArray); + + if(newAnonymCategories.length > 0) + { + subject = translate.text("DSGVO Anonymisierung"); + info = translate.text("Folgende Daten wurden anonymisiert: " + newAnonymCategories.join(", ")); + // TODO UX Abwarten + question.showMessage(info); + newHistory(vars.get("$global.user").relationid, getKeyValue("Intern", "HistoryMedium"), "o", subject, info, [[pContactId, 2]]); + } + else + question.showMessage(translate.text("Es wurden keine Daten anonymisiert.")); +} + +/** + * utility function to make a String anonymous. Replaces all letters between the first an last one with * + * + * @param {String} pText Text to be made anonymous + * @return {String} first and last letter from pText with (pText.length-2) stars(*) between them + * + * @example dsgvoMkTextAnonymous("Buchstabe") + * @exampleresult B*******e + */ +function dsgvoMkTextAnonymous(pText) +{ + if (pText == null) + return null; + if (pText.length <= 2) + return "**"; + + var res = pText.charAt(0); + + for(i = 0; i < pText.length - 2; i++) + { + res += "*"; + } + + return res += pText.charAt(pText.length - 1); +} + diff --git a/process/WsValidation_lib/process.js b/process/WsValidation_lib/process.js index e8778ed46b..72d857ec82 100644 --- a/process/WsValidation_lib/process.js +++ b/process/WsValidation_lib/process.js @@ -191,7 +191,7 @@ WsValidationType.get = function(pKey) pPlaceData.address.postcode, city, cityext, - pPlaceData.address.country, + pPlaceData.address.country_code, pPlaceData.address.district, pPlaceData.address.state_district, pPlaceData.address.state, @@ -257,10 +257,10 @@ WsValidationType.get = function(pKey) function _nominatimRequest(pValue, pCountry) { + var nominatimCache; if (WsValidationUtils.isWsEnabled(this)) { var parameterName = this.additionalInfo; - var nominatimCache; if (!vars.exists("$context.nominatim")) { @@ -326,7 +326,7 @@ WsValidationType.get = function(pKey) } } } - + nominatimCache = {} nominatimCache.data = this.processResultCallback.call(this, null, pValue); vars.set("$context.nominatim", JSON.stringify(nominatimCache)) return nominatimCache.data; -- GitLab