KFSG#41700 -- Scim koppeling realiseren (Error afhandeling)

svn path=/Website/branches/v2017.2/; revision=35721
This commit is contained in:
Arthur Egberink
2017-10-18 07:15:44 +00:00
parent bff6eeafab
commit 749c4fec5e
5 changed files with 170 additions and 19 deletions

View File

@@ -134,6 +134,12 @@ api2_rest = {
/* global */ JSON_Result = true; // Zelf doen we er niets mee maar
// shared.simple_page kijkt er naar
var orgError = api2.error;
api2.error = function (code, msg)
{
api2_rest.plugin.error_handler(code, msg, orgError);
}
api2_rest.authenticate();
// Kip-ei: de omzetting naar new model() mag pas als je geauthenticeerd bent
// Hierboven willen we het echter al wel meegeven
@@ -870,6 +876,16 @@ api2_rest = {
hook = null;
return outdata;
},
error_handler: function(code, msg, orgHandler)
{
var hook = api2_rest.find_plugin();
if ("error_handler" in hook)
outdata = hook.error_handler(code, msg, orgHandler);
else
outdata = orgHandler(code, msg);
hook = null;
return outdata;
},
transform_incoming: function(params, data)
{
var outdata = data;

View File

@@ -81,7 +81,7 @@ function model_prs_afdeling()
},
"created": {
"dbs": "prs_afdeling_aanmaak",
"label": "Aanmaakdatum"),
"label": "Aanmaakdatum",
"typ": "datetime",
"readonly": true
}

View File

@@ -17,6 +17,11 @@
<method name="initialize">
<PARAMETER name="params"/>
</method>
<method name="error_handler">
<PARAMETER name="code"/>
<PARAMETER name="msg"/>
<PARAMETER name="orgHandler"/>
</method>
<method name="transform_filter">
<PARAMETER name="filter"/>
</method>
@@ -56,6 +61,32 @@ function initialize(params)
FCLT = params;
}
function error_handler(code, msg, orgHandler)
{
code = code || 500;
var data = {
"schemas" : ["urn:ietf:params:scim:api:messages:2.0:Error"],
"scimType": "invalidValue",
"detail" : msg,
"status" : code
};
FCLT.DEZE.Response.ContentType = "application/json";
FCLT.DEZE.Response.Write(FCLT.DEZE.JSON.stringify(data, null, 2));
var codestr = String(code);
if (typeof code == "number")
{
var codestr = { 400: "Bad request",
403: "Forbidden",
404: "Not Found",
422: "Unprocessable Entity" }[code];
if (codestr)
code = code + " " + codestr;
}
FCLT.DEZE.Response.Status = code;
FCLT.DEZE.Response.End;
}
function transform_filter(filter)
{
if ("count" in filter)
@@ -87,9 +118,42 @@ function transform_incoming(params, data)
name : data["displayName"],
externalid : data["externalId"]
};
// TODO: Users negeren we nog
var groep_key = data["id"].replace (FCLT.DEZE.customerId + "_authorizationgroup_", "");
var sql = "DELETE fac_rapport WHERE fac_rapport_node = 'SCIMGROUPS'";
FCLT.DEZE.Oracle.Execute(sql);
if (data["members"])
{
var oRs;
for (var j = 0; j < data["members"].length; j++)
{
if (data["members"][j].value)
{
member = data["members"][j].value;
sql = "INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) "
+ " VALUES('SCIMGROUPS', " + groep_key + ", " + FCLT.DEZE.safe.quoted_sql(member.replace (FCLT.DEZE.customerId + "_person_", "")) + ")";
oRs = FCLT.DEZE.Oracle.Execute(sql);
}
}
// We slaan de groep key tijdelijk op in fac_arapport_regel
// en de perslid_key in het volgnummer omdat deze uniek moet zijn.
sql = "INSERT INTO fac_gebruikersgroep ( fac_groep_key, prs_perslid_key) "
+ "SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport r "
+ " WHERE NOT EXISTS (SELECT fac_gebruikersgroep_key "
+ " FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = fac_rapport_volgnr AND gg.fac_groep_key = r.fac_rapport_regel)";
FCLT.DEZE.Oracle.Execute(sql);
FCLT.DEZE.__Log(authorizationgroup);
sql = "DELETE fac_gebruikersgroep gg "
+ " WHERE fac_groep_key = " + groep_key
+ " AND NOT EXISTS (SELECT fac_rapport_volgnr "
+ " FROM fac_rapport r WHERE gg.prs_perslid_key = fac_rapport_volgnr AND gg.fac_groep_key = r.fac_rapport_regel)";
FCLT.DEZE.Oracle.Execute(sql);
//oRs.Close();
}
//FCLT.DEZE.__DoLog(authorizationgroup);
return { authorizationgroup: authorizationgroup };
}

View File

@@ -17,6 +17,11 @@
<method name="initialize">
<PARAMETER name="params"/>
</method>
<method name="error_handler">
<PARAMETER name="code"/>
<PARAMETER name="msg"/>
<PARAMETER name="orgHandler"/>
</method>
<method name="transform_filter">
<PARAMETER name="filter"/>
</method>
@@ -58,6 +63,32 @@ function initialize(params)
FCLT = params;
}
function error_handler(code, msg, orgHandler)
{
code = code || 500;
var data = {
"schemas" : ["urn:ietf:params:scim:api:messages:2.0:Error"],
"scimType": "invalidValue",
"detail" : msg,
"status" : code
};
FCLT.DEZE.Response.ContentType = "application/json";
FCLT.DEZE.Response.Write(FCLT.DEZE.JSON.stringify(data, null, 2));
var codestr = String(code);
if (typeof code == "number")
{
var codestr = { 400: "Bad request",
403: "Forbidden",
404: "Not Found",
422: "Unprocessable Entity" }[code];
if (codestr)
code = code + " " + codestr;
}
FCLT.DEZE.Response.Status = code;
FCLT.DEZE.Response.End;
}
function transform_filter(filter)
{
if ("count" in filter)

View File

@@ -17,6 +17,11 @@
<method name="initialize">
<PARAMETER name="params"/>
</method>
<method name="error_handler">
<PARAMETER name="code"/>
<PARAMETER name="msg"/>
<PARAMETER name="orgHandler"/>
</method>
<method name="transform_filter">
<PARAMETER name="filter"/>
</method>
@@ -55,18 +60,44 @@ function initialize(params)
FCLT = params;
}
function error_handler(code, msg, orgHandler)
{
code = code || 500;
var data = {
"schemas" : ["urn:ietf:params:scim:api:messages:2.0:Error"],
"scimType": "invalidValue",
"detail" : msg,
"status" : code
};
FCLT.DEZE.Response.ContentType = "application/json";
FCLT.DEZE.Response.Write(FCLT.DEZE.JSON.stringify(data, null, 2));
var codestr = String(code);
if (typeof code == "number")
{
var codestr = { 400: "Bad request",
403: "Forbidden",
404: "Not Found",
422: "Unprocessable Entity" }[code];
if (codestr)
code = code + " " + codestr;
}
FCLT.DEZE.Response.Status = code;
FCLT.DEZE.Response.End;
}
function transform_filter(filter)
{
if ("count" in filter)
filter.limit = filter.count;
if ("startIndex" in filter)
filter.offset = filter.startIndex - 1;
if ("filter" in filter)
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;
filter.id = v_filter;
}
return filter;
}
@@ -105,17 +136,20 @@ function transform_incoming(params, data)
var dep_id = "";
if (facilitor["orgUnit"] && facilitor["orgUnit"]["value"] )
dep_id = facilitor["orgUnit"]["value"].replace (FCLT.DEZE.customerId + "_department_", "");
else
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
person["function"] = { name: get_element(facilitor["title"]) } // id mag achterwege blijven omdat desc_is_unique
if (data["emails"])
{
person.email = data["emails"][0].value; // type:work/primary:true opzoeken ?
person.email = get_element(data["emails"][0].value); // type:work/primary:true opzoeken ?
}
person.mobile = "";
person.phone = "";
if (data["phoneNumbers"])
{
for (var j = 0; j < data["phoneNumbers"].length; j++)
@@ -127,20 +161,26 @@ function transform_incoming(params, data)
{
person.phone = get_element(data["phoneNumbers"][j].value);
}
}
}
}
// 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)
person["function"] = { name: get_element(facilitor["title"]) } // id mag achterwege blijven omdat desc_is_unique
if (person["function"]["name"])
{
sql = "INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving) "
+ "VALUES (" + FCLT.DEZE.safe.quoted_sql(person["function"]["name"]) + ")";
FCLT.DEZE.Oracle.Execute(sql);
// 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_upper = " + FCLT.DEZE.safe.quoted_sql(person["function"]["name"].toUpperCase());
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 };
}