170 lines
6.8 KiB
Plaintext
170 lines
6.8 KiB
Plaintext
<%@ language = "JavaScript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: api_perslid.asp
|
|
|
|
Description: API om een perslid te kunnen muteren.
|
|
Parameters: apiname, apikey
|
|
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
|
|
|
Notes:
|
|
|
|
Status:
|
|
*/
|
|
DOCTYPE_Disable = 1;
|
|
LCL_Disable = 1
|
|
THIS_FILE = "appl/api/api_perslid.asp";
|
|
%>
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="../api/api.inc" -->
|
|
<!-- #include file="../Shared/json2.js" -->
|
|
<!-- #include file="../Shared/save2db.inc"-->
|
|
<%
|
|
Session.Codepage = 65001;
|
|
Response.Charset = 'utf-8';
|
|
Session.Abandon(); // Voor de zekerheid
|
|
|
|
try
|
|
{
|
|
var API = new API_func(); // Valideert ook
|
|
|
|
var asJSON = getQParam("json","0")!="0";
|
|
|
|
var params = RequestJSON();
|
|
if (!params)
|
|
API.error("Error parsing input JSON");
|
|
|
|
// FAC_API_OPTIONS_JSON
|
|
var urole = "fe"; // Altijd?
|
|
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESFOF";
|
|
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
|
|
|
/*
|
|
params = {
|
|
externId: "AAFM_12345", // Zelf zorgen dat het uniek is in het doel-systeem
|
|
voornaam: "Jos",
|
|
achternaam: "Groot Lipman",
|
|
email: "user@example.com",
|
|
telefoon: "053-1234567",
|
|
mobiel: "06-12345678"
|
|
};
|
|
*/
|
|
warning = "";
|
|
// TODO: Autorisatie
|
|
prs_key = -1;
|
|
switch (params.request)
|
|
{
|
|
case "select": // zoekt een persoon op basis van params.externId
|
|
var sql = "SELECT prs_perslid_key"
|
|
+ " FROM prs_perslid"
|
|
+ " WHERE prs_perslid_oslogin = " + safe.quoted_sql("_" + params.externId);
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.Eof)
|
|
{
|
|
prs_key = oRs("prs_perslid_key").Value;
|
|
}
|
|
oRs.Close();
|
|
break;
|
|
case "update": // doet desnoods een insert
|
|
var fields = [];
|
|
|
|
if ("voornaam" in params)
|
|
fields.push({ dbs: "prs_perslid_voornaam", typ: "varchar", val: params.voornaam });
|
|
if ("achternaam" in params)
|
|
fields.push({ dbs: "prs_perslid_naam", typ: "varchar", val: params.achternaam });
|
|
if ("tussenvoegsel" in params)
|
|
fields.push({ dbs: "prs_perslid_tussenvoegsel", typ: "varchar", val: params.tussenvoegsel });
|
|
if ("email" in params)
|
|
fields.push({ dbs: "prs_perslid_email", typ: "varchar", val: params.email });
|
|
if ("geslacht" in params)
|
|
fields.push({ dbs: "geslacht", typ: "varchar", val: params.geslacht });
|
|
if ("prs_perslid_mobiel" in params)
|
|
fields.push({ dbs: "prs_perslid_mobiel", typ: "varchar", val: params.mobiel });
|
|
|
|
var sql = "SELECT prs_perslid_key"
|
|
+ " FROM prs_perslid"
|
|
+ " WHERE prs_perslid_oslogin = " + safe.quoted_sql("_" + params.externId);
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.Eof)
|
|
{
|
|
prs_key = oRs("prs_perslid_key").Value;
|
|
sql = buildUpdate("prs_perslid", fields, { noValidateToken: true })
|
|
+ " prs_perslid_key = " + prs_key;
|
|
var err = Oracle.Execute(sql, true);
|
|
if (err.friendlyMsg)
|
|
warning = err.friendlyMsg;
|
|
//else
|
|
// shared.trackaction("PRSUPD", prs_key);
|
|
}
|
|
else // Nieuwe
|
|
{ /// TODO: Speciale flags?
|
|
/// TODO: _default groep (door de trigger) is te veel. Misschien _defaultextern?
|
|
fields.push({ dbs: "prs_perslid_key", typ: "key", seq: "prs_s_prs_alluitvoerende_keys" });
|
|
fields.push({ dbs: "prs_perslid_oslogin", typ: "varchar", val: "_" + params.externId }); // De underscore voorkomt nagenoeg volledig dat ze ergens in beeld komen
|
|
fields.push({ dbs: "prs_afdeling_key", typ: "key", val: user.prs_afdeling_key() }); // Vooralsnog altijd zelfde als de API-user!
|
|
fields.push({ dbs: "prs_srtperslid_key", typ: "key", val: user.prs_srtperslid_key() });
|
|
fields.push({ dbs: "prs_perslid_ingids", typ: "check", val: 0 });
|
|
|
|
var prsIns = buildInsert("prs_perslid", fields, { noValidateToken: true });
|
|
prs_key = prsIns.sequences["prs_perslid_key"];
|
|
var err = Oracle.Execute(prsIns.sql, true);
|
|
if (err.friendlyMsg)
|
|
warning = err.friendlyMsg;
|
|
else
|
|
{
|
|
shared.trackaction("PRSNEW", prs_key);
|
|
// We willen niet in authgroep _default maar in _defaultextern
|
|
var sql = "DELETE FROM fac_gebruikersgroep"
|
|
+ " WHERE prs_perslid_key = " + prs_key;
|
|
Oracle.Execute(sql);
|
|
var sql = " INSERT INTO fac_gebruikersgroep"
|
|
+ " (fac_groep_key, prs_perslid_key)"
|
|
+ " SELECT fac_groep_key, " + prs_key
|
|
+ " FROM fac_groep"
|
|
+ " WHERE fac_groep_upper = '_DEFAULTEXTERN'";
|
|
Oracle.Execute(sql);
|
|
}
|
|
}
|
|
oRs.Close();
|
|
break;
|
|
default:
|
|
API.error("Unknown API request");
|
|
}
|
|
// We hebben nu een prs_key
|
|
|
|
Response.ContentType = "application/json";
|
|
Response.AddHeader("Access-Control-Allow-Origin", "*"); // Opdat FireFox cross-domain toestaat
|
|
|
|
var result = { success: true };
|
|
if (warning)
|
|
result = { succes: false, error: warning };
|
|
else
|
|
{
|
|
result.prs_key = prs_key;
|
|
if (prs_key > 0)
|
|
{ // plak prs_auth achter een deeplink en deze gebruiker kan daarmee (vandaag) inloggen
|
|
result.prs_auth = "userauth=" + prs_key + "&userhmac=" + safe.url(protectHMAC.create(String(prs_key)));
|
|
}
|
|
}
|
|
|
|
var antwoord = JSON.stringify(result, null, getQParam("pretty","0")=="1"?2:0);
|
|
|
|
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
|
|
var eTag = '"' + oCrypto.hex_sha1(antwoord).toLowerCase() + '"';
|
|
Response.AddHeader("ETag", eTag);
|
|
if (Request.ServerVariables("HTTP_IF_NONE_MATCH") == eTag)
|
|
{ // We hebben een match!
|
|
Response.Clear();
|
|
Response.Status = "304 Not modified";
|
|
Response.End;
|
|
}
|
|
if (API.apidata.loglevel) __Log2File(antwoord, API.APIname + "_OUT");
|
|
Response.write(antwoord);
|
|
}
|
|
catch (e)
|
|
{
|
|
API.error(typeof e == "string"? e : "API_error: " + e.description);
|
|
}
|
|
%> |