290 lines
8.4 KiB
XML
290 lines
8.4 KiB
XML
<?xml version="1.0"?>
|
|
<component>
|
|
<?component error="true" debug="true"?>
|
|
<registration
|
|
description="scimusers"
|
|
progid="scimusers.WSC"
|
|
version="1.00"
|
|
classid="{6D817B6F-9D08-4636-AAD9-8BD7C5EFF56A}"
|
|
>
|
|
</registration>
|
|
|
|
<public>
|
|
|
|
<!-- properties -->
|
|
|
|
<!-- methods -->
|
|
<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>
|
|
<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;
|
|
|
|
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)
|
|
{
|
|
// 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;
|
|
}
|
|
|
|
function get_eTag(params, data)
|
|
{
|
|
if (data && typeof data == "object" && "meta" in data)
|
|
return data.meta.version;
|
|
return null;
|
|
}
|
|
|
|
function get_element(data)
|
|
{
|
|
if (data == undefined) data = "";
|
|
return data;
|
|
}
|
|
|
|
function transform_incoming(params, 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 : get_element(data["userName"]),
|
|
externallogin: get_element(data["userName"]),
|
|
externalid : get_element(data["externalId"]),
|
|
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 : get_element(enterprise["employeeNumber"])
|
|
};
|
|
|
|
person["function"] = { name: "Onbekend" }; // geen onderdeel van de interface
|
|
|
|
|
|
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.
|
|
|
|
if (facilitor["initials"])
|
|
person.initials = get_element(facilitor["initials"]);
|
|
|
|
person["department"] = { id: dep_id };
|
|
|
|
if (data["emails"] && data["emails"][0])
|
|
{
|
|
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++)
|
|
{ if (data["phoneNumbers"][j]["type"] == 'mobile')
|
|
{
|
|
person.mobile = get_element(data["phoneNumbers"][j].value);
|
|
}
|
|
if (data["phoneNumbers"][j]["type"] == 'work')
|
|
{
|
|
person.phone = get_element(data["phoneNumbers"][j].value);
|
|
}
|
|
}
|
|
}
|
|
|
|
return { person: person };
|
|
}
|
|
|
|
function transform_one_person(params, person)
|
|
{
|
|
var unique = FCLT.DEZE.customerId + "_person_" + String(person.id);
|
|
|
|
var oneuser = {
|
|
"userName":person.externallogin || person.login,
|
|
"id":unique,
|
|
"name":{
|
|
"formatted":person.name,
|
|
"familyName":person.lastname
|
|
},
|
|
"schemas":[
|
|
"urn:ietf:params:scim:schemas:core:2.0:User",
|
|
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
|
|
],
|
|
"displayName":person.name,
|
|
"active": !person.deactivated,
|
|
"meta":{
|
|
"created":person.created,
|
|
"lastModified":person.lastchange?person.lastchange:person.created,
|
|
"location":FCLT.DEZE.HTTP.urlzelf() + "/appl/SCIM/Users/" + unique,
|
|
"resourceType":"User"
|
|
},
|
|
"groups":[],
|
|
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" :
|
|
{
|
|
"employeeNumber":person.employeenumber
|
|
},
|
|
"urn:ietf:params:scim:schemas:extension:facilitor:2.0:User" :
|
|
{
|
|
"orgunit":
|
|
{
|
|
"value":FCLT.DEZE.customerId + "_department_" + String(person.department.id),
|
|
"$ref":FCLT.DEZE.HTTP.urlzelf() + "/appl/SCIM/OrgUnits/" + FCLT.DEZE.customerId + "_department_" + String(person.department.id)
|
|
},
|
|
"initials":person.initials
|
|
}
|
|
}
|
|
|
|
|
|
if (person.middlename) oneuser.name.middleName = person.middlename;
|
|
if (person.firstname) oneuser.name.givenName = person.firstname;
|
|
if (person.externalid) oneuser.externalId =person.externalid;
|
|
if (person.email)
|
|
{
|
|
oneuser.emails = [
|
|
{
|
|
"value":person.email,
|
|
"type":"work",
|
|
"primary":true
|
|
}];
|
|
}
|
|
|
|
var phoneNumbers = [];
|
|
|
|
if (person.mobile)
|
|
phoneNumbers.push(
|
|
{
|
|
"value":person.mobile,
|
|
"type":"mobile",
|
|
"primary":true
|
|
});
|
|
if (person.phone)
|
|
phoneNumbers.push(
|
|
{
|
|
"value":person.phone,
|
|
"type":"work",
|
|
"primary":false
|
|
});
|
|
oneuser.phoneNumbers = phoneNumbers;
|
|
|
|
var allgroups = [];
|
|
for (var j = 0; j < person.authorization.length; j++)
|
|
{
|
|
var group = person.authorization[j];
|
|
var unique = FCLT.DEZE.customerId + "_authorizationgroup_" + 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++)
|
|
{
|
|
var person = data.persons[i]; // _ users zijn er al wel uitgefiltert
|
|
allusers.push(transform_one_person(params, person));
|
|
}
|
|
|
|
return {
|
|
"totalResults": data.total_count,
|
|
"itemsPerPage": allusers.length,
|
|
"startIndex": (data.offset || 0) + 1,
|
|
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
|
|
"Resources": allusers
|
|
};
|
|
}
|
|
}
|
|
|
|
]]>
|
|
</script>
|
|
</component>
|