269 lines
8.3 KiB
JavaScript
269 lines
8.3 KiB
JavaScript
/*
|
|
$Id$
|
|
|
|
File: wsf_shared.js
|
|
Description: Hulpfuncties voor WSF bestanden
|
|
Context: bijvoorbeeld gen_import.wsf
|
|
Note: We herhalen hier de noodzakelijke functies van appl/shared/shared.inc
|
|
|
|
*/
|
|
|
|
function padout(number)
|
|
{ return (number < 10) ? "0" + number : number;
|
|
}
|
|
// Noot: altijd jaar vooraan, goed voor logfiles, niet bedoeld voor presentatie
|
|
function toDateString(jsDate)
|
|
{
|
|
return padout(jsDate.getFullYear()) + "-" + padout(jsDate.getMonth() + 1) + "-" + padout(jsDate.getDate());
|
|
}
|
|
function toDateTimeString(jsDate)
|
|
{
|
|
return toDateString(jsDate) + " "
|
|
+ padout(jsDate.getHours()) + ":" + padout(jsDate.getMinutes()) + ":" + padout(jsDate.getSeconds());
|
|
}
|
|
function __Log(s, params)
|
|
{
|
|
var params = params || {}; // default logging met timestamp.
|
|
var severity = params.severity || "I";
|
|
WScript.Echo(toDateTimeString(new Date) + ";" + severity + ";" + s);
|
|
}
|
|
function __DoLog(s, params)
|
|
{
|
|
__Log(s, params);
|
|
}
|
|
function subfolderKey(pNiveau, pKey)
|
|
{
|
|
var keyStr = "0000000" + pKey;
|
|
var subfolder = pNiveau + keyStr.substr(keyStr.length - 7, 4) + "___/" + pNiveau + pKey;
|
|
return subfolder;
|
|
}
|
|
function Fill(i, c)
|
|
{ // Maakt een string met i tekens 'char'.
|
|
return new Array(i + 1).join(c);
|
|
}
|
|
|
|
function isOffline()
|
|
{
|
|
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
|
if (fso.FileExists("../forceonline.txt"))
|
|
return false;
|
|
if (fso.FileExists("../offline.html"))
|
|
return true;
|
|
if (fso.FileExists("../../offline.html"))
|
|
return true;
|
|
if (fso.FileExists("../../../temp/offline.html"))
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function Connect2Oracle(p_params)
|
|
{
|
|
var params = {};
|
|
if (typeof p_params == "string")
|
|
params.modulename = p_params;
|
|
else if (typeof p_params == "object")
|
|
params = p_params;
|
|
|
|
var udl = (params.udl ? params.udl : "../Oracle.udl");
|
|
var Oracle = new ActiveXObject("ADODB.Connection");
|
|
Oracle.Open('File Name='+udl);
|
|
if (params.modulename)
|
|
{ // Vind je terug in Toad/Session browser
|
|
var sql = "BEGIN DBMS_APPLICATION_INFO.SET_MODULE (" + safe.quoted_sql(params.modulename) + ", NULL); END;";
|
|
Oracle.Execute(sql);
|
|
}
|
|
sql = "BEGIN fac.initsession(" + (params.language ? safe.quoted_sql(params.language) : "NULL") + "); END;"
|
|
Oracle.Execute(sql);
|
|
__Log("Session initiated: " + sql);
|
|
return Oracle;
|
|
}
|
|
|
|
String.prototype.format = function()
|
|
{
|
|
var formatted = this;
|
|
for (var i = 0; i < arguments.length; i++)
|
|
{
|
|
if (typeof arguments[i] == "string")
|
|
arguments[i] = arguments[i].replace(/\$/g, '$$$$');
|
|
var regexp = new RegExp('\\{'+i+'\\}', 'gi');
|
|
formatted = formatted.replace(regexp, arguments[i]);
|
|
}
|
|
return formatted;
|
|
};
|
|
|
|
Date.prototype.toSQL = function toSQL(withTime, withSeconds)
|
|
{ // extracted from shared.inc
|
|
var year = this.getFullYear();
|
|
if (year < 1000 || year > 9999)
|
|
__Log("Invalid year " + this.toLocaleString()); // Net iets minder erg dan ORA-01830
|
|
|
|
var str = padout(this.getDate()) + "-" + padout(this.getMonth() + 1) + "-" + padout(this.getFullYear())
|
|
var dateformat = "DD-MM-YYYY";
|
|
if (withTime)
|
|
{
|
|
str += " " + padout(this.getHours()) + ":" + padout(this.getMinutes());
|
|
dateformat += " HH24:MI";
|
|
if (withSeconds)
|
|
{
|
|
str += ":" + padout(this.getSeconds());
|
|
dateformat += ":SS";
|
|
}
|
|
}
|
|
return "to_date(" + safe.quoted_sql(str) + ", '" + dateformat + "')";
|
|
}
|
|
|
|
safe = { // extracted from shared.inc
|
|
quoted_sql: function (tekst, maxlen) // maxlen is optioneel
|
|
{
|
|
if (tekst == null)
|
|
return "NULL";
|
|
if (!maxlen)
|
|
maxlen = 4000;
|
|
tekst = tekst.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]+/g, "?");
|
|
tekst = tekst.substr(0, maxlen);
|
|
return "'" + tekst.replace(/\'/g,"''") + "'"; // " syntax highlight correctie
|
|
},
|
|
quoted_sql_upper: function (tekst, maxlen)
|
|
{
|
|
if (tekst == null)
|
|
return "NULL";
|
|
return safe.quoted_sql(tekst.toUpperCase(), maxlen);
|
|
},
|
|
quoted_sql_join: function (tekstarr, toupper) // Vooral voor IN () clausules met tekstwaardes
|
|
{
|
|
if (!tekstarr || !tekstarr.length)
|
|
return "NULL";
|
|
|
|
var safearr = [];
|
|
for (var i = 0; i < tekstarr.length; i++)
|
|
{
|
|
safearr.push(toupper? safe.quoted_sql_upper(tekstarr[i]) : safe.quoted_sql(tekstarr[i]))
|
|
}
|
|
return safearr.join(", ");
|
|
},
|
|
filename: function (naam) // geen 'lage' karakters een geen (back)slashes, *,%,<,>, '"', ':', '?' and '|'
|
|
{
|
|
return naam.replace(/[\x00-\x1F|\/|\\|\*|\%\<\>\"\:\;\?\|]+/g, "_"); // " syntax highlight correctie
|
|
},
|
|
// Altijd quotes er om, we verdubbelen interne
|
|
// CR+LF binnen een waarde maken we alleen LF van
|
|
csv: function (waarde)
|
|
{
|
|
if (waarde==null)
|
|
return "";
|
|
return "\"" + String(waarde).replace(/\x0D\x0A/g,'\x0A').replace(/\"/g,'""') + "\""; // " syntax highlight correctie
|
|
},
|
|
url: function (s)
|
|
{
|
|
return unescape(encodeURIComponent(escape(s||""))).replace(/\+/g, "%2B");
|
|
}
|
|
}
|
|
|
|
function Hexify(p_path)
|
|
{
|
|
var oStream = new ActiveXObject("ADODB.Stream");
|
|
oStream.charset = "Windows-1252";
|
|
oStream.Open();
|
|
oStream.Type = 2; // adTypeText
|
|
|
|
oZIP = new ActiveXObject("SLNKDWF.Zip");
|
|
oZIP.FileToHexStream(p_path, oStream);
|
|
|
|
oStream.Position = 0;
|
|
ReadBytes = 131072; // optimaal volgens http://support.microsoft.com/kb/280067
|
|
var result = "";
|
|
while (!oStream.EOS)
|
|
{
|
|
result = result + oStream.ReadText(ReadBytes);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function Base64fy(p_filename)
|
|
{
|
|
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
|
var base64="";
|
|
if (fso.FileExists(p_filename))
|
|
{
|
|
var bytes = ReadBinaryFile(p_filename);
|
|
var base64 = encodeBase64(bytes);
|
|
}
|
|
else
|
|
{
|
|
__Log("Cannot find file.");
|
|
}
|
|
return base64;
|
|
}
|
|
|
|
function ReadBinaryFile (p_filename)
|
|
{
|
|
var oStream = new ActiveXObject("ADODB.Stream");
|
|
oStream.Open();
|
|
oStream.Type = 1; // adTypeBinary
|
|
oStream.LoadFromFile(p_filename);
|
|
return oStream.Read;
|
|
}
|
|
|
|
function encodeBase64(p_bytes){
|
|
var l_xml=new ActiveXObject("Msxml2.DOMDocument.6.0");
|
|
// Create temporary node with Base64 data type
|
|
var xml_element = l_xml.createElement("tmp");
|
|
xml_element.dataType = "bin.base64";
|
|
// Set bytes, get encoded String
|
|
xml_element.nodeTypedValue = p_bytes
|
|
var encodeBase64 = xml_element.text
|
|
return encodeBase64;
|
|
}
|
|
|
|
function jwt_encode(claim, secret)
|
|
{
|
|
var header =
|
|
{
|
|
"typ":"JWT",
|
|
"alg":"HS256"
|
|
};
|
|
|
|
claim.ver = "1.0";
|
|
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
|
|
|
|
var sheader = oCrypto.base64(JSON.stringify(header, false)); // no padding
|
|
var sclaim = oCrypto.base64(JSON.stringify(claim, false));
|
|
var signature = oCrypto.hex_hmac_sha256(secret, sheader + "." + sclaim);
|
|
var sig64 = oCrypto.hex2base64(signature, false, true); // no padding, urlsafe
|
|
var jwt = sheader + "." + sclaim + "." + sig64;
|
|
|
|
return jwt;
|
|
}
|
|
|
|
// Kopie van APPL\AUT\Login.inc
|
|
function getBearerToken(prs_key, idp_code, duration)
|
|
{
|
|
var sql = "SELECT aut_idp_audience"
|
|
+ " , aut_idp_issuer"
|
|
+ " , aut_idp_secret"
|
|
+ " , aut_idp_duration"
|
|
+ " FROM aut_idp"
|
|
+ " WHERE aut_idp_code = " + safe.quoted_sql_upper(idp_code);
|
|
var oRs = Oracle.Execute(sql);
|
|
// logisch? if (oRs("aut_idp_duration").Value)
|
|
duration = Math.min(oRs("aut_idp_duration").Value, duration || 30);
|
|
var iat = Math.round(new Date().getTime() / 1000);
|
|
var exp = iat + duration;
|
|
|
|
var claim =
|
|
{
|
|
iat: iat,
|
|
exp: exp,
|
|
jti: "#" + prs_key + "#" + String(new Date().getTime()),
|
|
aud: oRs("aut_idp_audience").Value,
|
|
iss: oRs("aut_idp_issuer").Value,
|
|
perslid_key: prs_key,
|
|
ver: "1.0"
|
|
}
|
|
var jwt = jwt_encode(claim, oRs("aut_idp_secret").Value);
|
|
oRs.Close();
|
|
|
|
return jwt;
|
|
} |