From 1587f8fc0d632eb0d81daa608bd0ec0a5d08c726 Mon Sep 17 00:00:00 2001 From: Arthur Egberink Date: Tue, 17 Oct 2017 07:29:56 +0000 Subject: [PATCH] KFSG#41700 -- Scim koppeling realiseren. svn path=/Website/branches/v2017.2/; revision=35712 --- APPL/API2/plugins/scimgroups.wsc | 9 +++- APPL/API2/plugins/scimorgunits.wsc | 13 +++++- APPL/API2/plugins/scimusers.wsc | 69 +++++++++++++++++------------- 3 files changed, 59 insertions(+), 32 deletions(-) diff --git a/APPL/API2/plugins/scimgroups.wsc b/APPL/API2/plugins/scimgroups.wsc index fc8748f426..fb83d3dc87 100644 --- a/APPL/API2/plugins/scimgroups.wsc +++ b/APPL/API2/plugins/scimgroups.wsc @@ -62,6 +62,13 @@ function transform_filter(filter) filter.limit = filter.count; if ("startIndex" in filter) filter.offset = filter.startIndex - 1; + if ("filter" in filter) + { + // Ontvangen filter: "filter": "id eq \"KFSG_authorizationgroup_703\"" + var v_filter = filter.filter.replace ("id eq \"" + FCLT.DEZE.customerId + "_authorizationgroup_", ""); + v_filter = v_filter.replace("\"", ""); + filter.id = v_filter; + } return filter; } @@ -102,7 +109,7 @@ function transform_one_group(params, authorizationgroup) "members":[], "meta":{ "created":authorizationgroup.created, - "lastModified":authorizationgroup.lastchange, + "lastModified":authorizationgroup.lastchange?authorizationgroup.lastchange:authorizationgroup.created, "location":FCLT.DEZE.HTTP.urlzelf() + "/appl/SCIM/Groups/" + unique, "resourceType":"Group" } diff --git a/APPL/API2/plugins/scimorgunits.wsc b/APPL/API2/plugins/scimorgunits.wsc index 4b5a936f86..2fd0f665cd 100644 --- a/APPL/API2/plugins/scimorgunits.wsc +++ b/APPL/API2/plugins/scimorgunits.wsc @@ -62,8 +62,17 @@ function transform_filter(filter) { if ("count" in filter) filter.limit = filter.count; - if ("startIndex" in filter) + if ("startIndex" in filter) { filter.offset = filter.startIndex - 1; + filter.showall = 1; + } + if ("filter" in filter) + { + // Ontvangen filter: "filter": "id eq \"KFSG_department_703\"" + var v_filter = filter.filter.replace ("id eq \"" + FCLT.DEZE.customerId + "_department_", ""); + v_filter = v_filter.replace("\"", ""); + filter.id = v_filter; + } return filter; } @@ -127,7 +136,7 @@ function transform_one_department(params, department) ], "meta":{ "created":department.created, - "lastModified":department.lastchange, + "lastModified":department.lastchange?department.lastchange:department.created, "location":FCLT.DEZE.HTTP.urlzelf() + "/appl/SCIM/OrgUnits/" + unique, "resourceType":"OrgUnit" } diff --git a/APPL/API2/plugins/scimusers.wsc b/APPL/API2/plugins/scimusers.wsc index 2686f104af..01dc823f11 100644 --- a/APPL/API2/plugins/scimusers.wsc +++ b/APPL/API2/plugins/scimusers.wsc @@ -61,6 +61,13 @@ function transform_filter(filter) filter.limit = filter.count; if ("startIndex" in filter) filter.offset = filter.startIndex - 1; + if ("filter" in filter) + { + // Ontvangen filter: "filter": "id eq \"KFSG_person_703\"" + var v_filter = filter.filter.replace ("id eq \"" + FCLT.DEZE.customerId + "_person_", ""); + v_filter = v_filter.replace("\"", ""); + filter.id = v_filter; + } return filter; } @@ -71,35 +78,35 @@ function get_eTag(params, data) return null; } -// We krijgen bijvoorbeeld: {"RMS":[1,-10,-11,-12,-13,-14,-15,-16,-17,2,3,-4,-5,-6,-7,-8,-9]} -// Als het object aan staat wordt de id opgeleverd, anders -id +function get_element(data) +{ + if (data == undefined) data = ""; + return data; +} + function transform_incoming(params, data) { - FCLT.DEZE.__Log(data); var enterprise = data["urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]; var facilitor = data["urn:ietf:params:scim:schemas:extension:facilitor:2.0:User"]; var person = { - login : data["userName"], - externallogin: data["userName"], - externalid : data["externalId"], - initials : facilitor["initials"], - lastname : data["name"]["familyName"], - middlename : data["name"]["middleName"], - firstname : data["name"]["givenName"], + login : get_element(data["userName"]), + externallogin: get_element(data["userName"]), + externalid : get_element(data["externalId"]), + initials : get_element(facilitor["initials"]), + lastname : get_element(data["name"]["familyName"]), + middlename : get_element(data["name"]["middleName"]), + firstname : get_element(data["name"]["givenName"]), deactivated : data["active"]?null:new Date(), - employeenumber : enterprise["employeeNumber"] + employeenumber : get_element(enterprise["employeeNumber"]) }; - if (data["userName"] == undefined) person.login = ""; - if (facilitor["initials"] == undefined) person.initials = ""; - if (data["name"]["middleName"] == undefined) person.middlename = ""; - if (data["name"]["givenName"] == undefined) person.firstname = ""; - if (enterprise["employeeNumber"] == undefined) person.employeenumber = ""; - - - var dep_id = facilitor["orgUnit"]["value"].replace (FCLT.DEZE.customerId + "_department_", ""); + var dep_id = ""; + if (facilitor["orgUnit"] && facilitor["orgUnit"]["value"] ) + dep_id = facilitor["orgUnit"]["value"].replace (FCLT.DEZE.customerId + "_department_", ""); + else + dep_id = 1; // bij het aanmaken van een nieuwe persoon is de afdeling nog leeg. Dan tijdelijke even onder onbekend hangen. person["department"] = { id: dep_id }; person["function"] = { name: facilitor["title"] } // id mag achterwege blijven omdat desc_is_unique @@ -108,29 +115,33 @@ function transform_incoming(params, data) { person.email = data["emails"][0].value; // type:work/primary:true opzoeken ? } - person.phone = ""; - person.mobile = ""; if (data["phoneNumbers"]) { for (var j = 0; j < data["phoneNumbers"].length; j++) { if (data["phoneNumbers"][j]["type"] == 'mobile') { - person.mobile = data["phoneNumbers"][j].value; + person.mobile = get_element(data["phoneNumbers"][j].value); } if (data["phoneNumbers"][j]["type"] == 'work') { - person.phone = data["phoneNumbers"][j].value; + person.phone = get_element(data["phoneNumbers"][j].value); } } } - if (person.phone == undefined) person.phone = ""; - if (person.mobile == undefined) person.mobile = ""; - // TODO groepen negeren we - - FCLT.DEZE.__Log(person); + // Als de functie (srt_perslid) nog niet bestaat gaan we deze aanmaken. + var sql = "SELECT prs_srtperslid_key FROM prs_srtperslid " + + "WHERE prs_srtperslid_verwijder IS NULL " + + " AND prs_srtperslid_omschrijving = " + FCLT.DEZE.safe.quoted_sql(person["function"]["name"]); + var oRs = FCLT.DEZE.Oracle.Execute(sql); + if (oRs.eof) + { + sql = "INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving) " + + "VALUES (" + FCLT.DEZE.safe.quoted_sql(person["function"]["name"]) + ")"; + FCLT.DEZE.Oracle.Execute(sql); + } return { person: person }; } @@ -155,7 +166,7 @@ function transform_one_person(params, person) "active": !person.deactivated, "meta":{ "created":person.created, - "lastModified":person.lastchange, + "lastModified":person.lastchange?person.lastchange:person.created, "location":FCLT.DEZE.HTTP.urlzelf() + "/appl/SCIM/Users/" + unique, "resourceType":"User" },