Files
Facilitor/APPL/API/api_perslid.asp
Jos Groot Lipman 2aa489e0c7 FCLT#Recordsets die niet gesloten zijn beter detecteren
svn path=/Website/trunk/; revision=47235
2020-06-24 15:42:24 +00:00

172 lines
6.9 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";
INTERNAL_ERROR_api_perslid_ISUNSAFE; // abort abort.....
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../api/api.inc" -->
<!-- #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);
}
%><% ASPPAGE_END(); %>