<%@ 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"; %> <% 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); } %>