Files
Facilitor/APPL/API2/plugins/scimusers.wsc
Jos Groot Lipman e986a81b5f FSN#41668 SCIM 2e aanzet
svn path=/Website/trunk/; revision=35216
2017-09-06 10:55:50 +00:00

194 lines
5.2 KiB
XML

<?xml version="1.0"?>
<component>
<?component error="true" debug="true"?>
<registration
description="scimusers"
progid="flexwhere.WSC"
version="1.00"
classid="{6D817B6F-9D08-4636-AAD9-8BD7C5EFF56A}"
>
</registration>
<public>
<!-- properties -->
<!-- methods -->
<method name="initialize">
<PARAMETER name="params"/>
</method>
<method name="transform_filter">
<PARAMETER name="filter"/>
</method>
<method name="transform_outgoing">
<PARAMETER name="params"/>
<PARAMETER name="data"/>
</method>
<method name="transform_incoming">
<PARAMETER name="params"/>
<PARAMETER name="data"/>
</method>
<method name="get_eTag">
<PARAMETER name="params"/>
<PARAMETER name="data"/>
</method>
</public>
<script language="javascript">
<![CDATA[
/* properties */
/* methods */
/*
/*
$Id$
File: scimusers.wsc
*/
/* Globals */
var FCLT;
// De omschrijving van de objecten in FACILITOR moet FW1, FW2 etc. zijn
var scimusers_srtdeel_key = 258418;
function initialize(params)
{
FCLT = params;
}
function transform_filter(filter)
{
if ("count" in filter)
filter.limit = filter.count;
return filter;
}
function get_eTag(params, data)
{
if (data && typeof data == "object" && "meta" in data)
return data.meta.version;
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 transform_incoming(params, data)
{
//FCLT.DEZE.__DoLog(data);
var person =
{
login : data["userName"],
externallogin: data["userName"],
externalid : data["externalId"],
name : data["name"]["displayName"],
lastname : data["name"]["familyName"],
firstname : data["name"]["givenName"]
};
person["function"] = { name: data["userType"] } // id mag achterwege blijven omdat desc_is_unique
if (data["emails"].length)
{
person.email = data["emails"][0].value; // type:work/primary:true opzoeken ?
}
if (data["phoneNumbers"].length)
{
person.phone = data["phoneNumbers"][0].value; // type:work/primary:true opzoeken ?
}
// groepen negeren we nog
//FCLT.DEZE.__DoLog(person);
return { person: person };
}
function transform_one_person(params, person)
{
FCLT.DEZE.__Log(person);
var unique = FCLT.DEZE.customerId + "_person_" + String(person.id);
var oneuser = {
"userName":person.externallogin || person.login,
"externalId":person.externalid,
"id":unique,
"name":{
"formatted":person.name,
"familyName":person.lastname,
"givenName":person.firstname
},
"schemas":[
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
],
"displayName":person.name,
"meta":{
"created":person.created,
"lastModified":person.lastchange,
"location":FCLT.DEZE.HTTP.urlzelf() + "/appl/SCIM/Users/" + unique,
"resourceType":"User"
},
"userType":person["function"].name,
"emails":[
{
"value":person.email,
"type":"work",
"primary":true
}
],
"phoneNumbers":[
{
"value":person.phone,
"type":"work",
"primary":true
}
],
"groups":[]
}
var allgroups = [];
for (var j = 0; j < person.authorization.length; j++)
{
var group = person.authorization[j];
var unique = FCLT.DEZE.customerId + "_authorization_" + String(group.authorizationgroup.id);
oneuser.groups.push({
"value":unique,
"$ref":FCLT.DEZE.HTTP.urlzelf() + "/appl/SCIM/Groups/" + unique,
"display":group.authorizationgroup.name
})
}
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
var eTag = '"' + oCrypto.hex_sha1(FCLT.DEZE.JSON.stringify(oneuser)).toLowerCase() + '"';
oneuser.meta["version"] = "W/" + eTag; // Weak eTag?
return oneuser;
}
function transform_outgoing(params, data)
{
if ("person" in data)
{
var oneperson = transform_one_person(params, data.person);
return oneperson;
}
if ("persons" in data)
{
var allusers = [];
for (var i = 0; i < data.persons.length; i++)
{
if (params.limit && allusers.length > params.limit)
break;
var person = data.persons[i];
allusers.push(transform_one_person(params, person));
}
return {
"totalResults": allusers.length,
"itemsPerPage": 10,
"startIndex": 1,
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"Resources": allusers
};
}
}
]]>
</script>
</component>