302 lines
14 KiB
Plaintext
302 lines
14 KiB
Plaintext
<%@language = "javascript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: shorturl.asp
|
|
Description: Redirect naar een bookmark url
|
|
Parameters: u Bookmark die in de bookmark tabel moet zitten.
|
|
Dit moet de eerste parameter zijn als er nog meer komen
|
|
k Een integer keywaarde die plat achter de bookmark_query wordt geplakt
|
|
-- Optionele parameter(s): die worden allemaal blind
|
|
doorgegeven naar het volgende scherm
|
|
Context: Vanuit root
|
|
Note: Welbeschouwd is dit gewoon een url-shortener
|
|
http://sgf12/Facilitor5iWork/?u=J448UIrR43
|
|
Het is verleidelijk de u= parameter ook door te geven maar
|
|
dat is in tegenspraak met het betekenisloos zijn van de u-param
|
|
Als je dat wilt moet je maar BOOKMARK's gebruiken
|
|
*/
|
|
ANONYMOUS_Allowed = 1;
|
|
if (getQParam("sso", "") == "")
|
|
{
|
|
LOGIN_try = 1; // prevent auto-sso to SAML when prs_perslid_key_auth is set
|
|
}
|
|
%>
|
|
<!-- #include file="../Shared/common.inc"-->
|
|
<!-- #include file="../shared/useragent.inc" -->
|
|
|
|
<%
|
|
__Log("== Entering shorturl.asp ==");
|
|
|
|
var u = getQParam("u");
|
|
var known_bookmarks =
|
|
{
|
|
'toegang': { gui: 'appl/bez/bez_admitcheck.asp?u=toegang&k='},
|
|
'afspraak': { gui: 'appl/bez/bez_afspraak.asp?afspr_key=', mob: 'appl/pda/afspraak.asp?afs_key=' },
|
|
'bestelling': { gui: 'appl/bes/bes_bestelling.asp?bes_key=', mob: 'appl/pda/bestelling.asp?bes_key=' },
|
|
'bestelopdr': { gui: 'appl/bes/bes_opdr.asp?ordernr=' },
|
|
'contract': { gui: 'appl/cnt/cnt_contract.asp?cnt_key=', mob: 'appl/pda/contract.asp?cnt_key=' },
|
|
/*deprecated*/'deel': { gui: 'appl/ins/ins_deel.asp?ins_key=', mob: 'appl/pda/ins_deel.asp?ins_key=' },
|
|
'object': { gui: 'appl/ins/ins_deel.asp?ins_key=', mob: 'appl/pda/ins_deel.asp?ins_key=' },
|
|
'factuur': { gui: 'appl/fin/fin_factuur.asp?fin_key=', mob: 'appl/pda/factuur.asp?fin_key=' },
|
|
'gebouw': { gui: 'appl/alg/alg_gebouw.asp?key=' },
|
|
'faq': { gui: 'appl/fac/fac_faq.asp?faq_key=' },
|
|
'locatie': { gui: 'appl/alg/alg_locatie.asp?key=' },
|
|
'melding': { gui: 'appl/mld/mld_melding.asp?mld_key=', mob: 'appl/pda/melding.asp?mld_key=' },
|
|
'message': { gui: 'appl/msg/msg_message.asp?message_key=', mob: 'appl/pda/message.asp?msg_key=' },
|
|
'opdracht': { gui: 'appl/mld/mld_opdr.asp?opdr_key=',
|
|
mob: 'appl/pda/order.asp?opdr_key=',
|
|
lckgui: 'appl/mld/mld_opdr_actions.asp?opdr_key=',
|
|
lckmob: 'appl/mld/mld_opdr_actions.asp?opdr_key=' },
|
|
'perslid': { gui: 'appl/prs/prs_perslid.asp?prs_key=', mob: 'appl/pda/user_info.asp?prs_key=' },
|
|
'reservering': { gui: 'appl/res/res_reservering.asp?rsv_ruimte_key=', mob: 'appl/pda/reservering.asp?rsv_ruimte_key=' },
|
|
'ruimte': { gui: 'appl/alg/alg_ruimte.asp?key=', mob: 'appl/pda/ruimte.asp?ruimte_key=' },
|
|
'verdieping': { gui: 'appl/alg/alg_verdieping.asp?key='},
|
|
'xreservering': { gui: 'appl/res/res_reservering.asp?rsv_ruimte_key='},
|
|
/* 'Genereer QR code's; (default acties en/of qrc=1) */
|
|
'alg_ruimte': { gui: 'appl/alg/alg_ruimte.asp?key=', mob: 'appl/pda/ruimte.asp?qrc=1&ruimte_key=' },
|
|
'res_ruimte': { gui: 'appl/mgt/res_ruimte.asp?id=', mob: 'appl/pda/reserveringen.asp?qrc=1&res_ruimte_key=' },
|
|
'res_object': { gui: 'appl/mgt/res_deel.asp?id=', mob: 'appl/pda/reserveringen.asp?qrc=1&res_deel_key=' },
|
|
'ins_object': { gui: 'appl/ins/ins_deel.asp?ins_key=', mob: 'appl/pda/ins_deel.asp?qrc=1&ins_key=' }
|
|
}
|
|
|
|
var keyparam = getQParamInt("k", -1);
|
|
if (u == "bezoeker" && keyparam > -1) {
|
|
// Er bestaat geen bezoeker weergave, wel een afspraak weergave waar je de bezoekers terug kunt zien, zoek de afspr_key erbij
|
|
var sql = "SELECT bez_afspraak_key FROM bez_bezoekers WHERE bez_bezoekers_key = " + keyparam;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.EoF) {
|
|
u = "afspraak";
|
|
keyparam = oRs("bez_afspraak_key").Value;
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
var locked_bdradr_key = getQParamInt("lbdr", -1);
|
|
if (locked_bdradr_key > 0)
|
|
{ // Eerst: hmac controleren
|
|
var sql = "SELECT prs_bedrijfadres_locksecret,"
|
|
+ " prs_bedrijfadres_lockuser_key,"
|
|
+ " prs_bedrijfadres_lockexpire"
|
|
+ " FROM prs_bedrijfadres"
|
|
+ " WHERE prs_bedrijfadres_key = " + locked_bdradr_key
|
|
+ " AND prs_bedrijfadres_startdatum <= SYSDATE"
|
|
+ " AND prs_bedrijfadres_locksecret IS NOT NULL"
|
|
+ " AND prs_bedrijfadres_lockuser_key IS NOT NULL";
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.EOF)
|
|
shared.simpel_page("Fixed user for company '{0}' is not or no longer valid.".format(locked_bdradr_key));
|
|
|
|
var locksecret = oRs("prs_bedrijfadres_locksecret").Value;
|
|
var lockuser_key = oRs("prs_bedrijfadres_lockuser_key").Value;
|
|
var lockexpire = oRs("prs_bedrijfadres_lockexpire").Value;
|
|
oRs.Close()
|
|
__Log("Checking locked bdradr {0} expire {1} days".format(locked_bdradr_key, lockexpire));
|
|
protectQS.verify({ sleutel: locksecret,
|
|
expire: lockexpire * 24 * 60,
|
|
checkpath: "/", // altijd tegen de root zonder default.asp
|
|
no_user_key: true }); // tamper check
|
|
|
|
var user_allowed = Session("locked_user_allowed") || []; // Array voor als je meerdere tabjes open hebt
|
|
var found = false;
|
|
for (var i = 0; i < user_allowed.length; i++)
|
|
{
|
|
if (user_allowed[i].locked_user_key == lockuser_key &&
|
|
user_allowed[i].xmlnode == u &&
|
|
user_allowed[i].key == keyparam)
|
|
{
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
// add linked call as well
|
|
if (u == "opdracht")
|
|
{
|
|
var sql = "SELECT mld_melding_key"
|
|
+ " FROM mld_opdr"
|
|
+ " WHERE mld_opdr_key = " + keyparam;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.EOF)
|
|
{
|
|
user_allowed.push({ locked_user_key: lockuser_key,
|
|
xmlnode: "melding",
|
|
key: oRs("mld_melding_key").value
|
|
});
|
|
}
|
|
}
|
|
user_allowed.push({ locked_user_key: lockuser_key,
|
|
xmlnode: u,
|
|
key: keyparam
|
|
})
|
|
Session("locked_user_allowed") = user_allowed;
|
|
}
|
|
}
|
|
|
|
// For flexiblity reasons: Literal or runtime parameter(s), just pass through...
|
|
var rest = String(Request.ServerVariables("QUERY_STRING")); // Request.ServerVariables("QUERY_STRING") is url-encoded,
|
|
// dat is hier safer dan Request.QueryString
|
|
// Strip eventuele leading &fac_id=XXXX er ook af.
|
|
rest = rest.substring(rest.indexOf("u=")).substring(("u="+u).length+1);
|
|
|
|
var isKnownBookmark = false;
|
|
var isMobile = false;
|
|
if (u in known_bookmarks)
|
|
{
|
|
isKnownBookmark = true;
|
|
checkUserAgent(); // devicebits waren anders mogelijk nog niet gezet
|
|
if (Session("interface") == "desktop" || Session("interface") == "touch")
|
|
{
|
|
url = locked_bdradr_key > 0? known_bookmarks[u].lckgui : known_bookmarks[u].gui;
|
|
}
|
|
else
|
|
{
|
|
url = locked_bdradr_key > 0? known_bookmarks[u].lckmob || known_bookmarks[u].lckgui
|
|
: known_bookmarks[u].mob || known_bookmarks[u].gui;
|
|
isMobile = true;
|
|
}
|
|
|
|
url = url + keyparam;
|
|
|
|
if (keyparam > -1)
|
|
{
|
|
rest = rest.substring(("k="+keyparam).length+1);
|
|
}
|
|
if (rest)
|
|
url += "&" + rest;
|
|
}
|
|
else
|
|
{
|
|
var sql = "SELECT fac_bookmark_key,"
|
|
+ " fac_bookmark_path,"
|
|
+ " fac_bookmark_query," // Ooit was bedacht dat je de parameters apart in fac_bookmark_query stopt.
|
|
+ " prs_perslid_key_auth," // In de praktijk stoppen mensen het ook vaak in fac_bookmark_path
|
|
+ " fac_bookmark_unauth_url," // Dat kunnen we tegenwoordig (2018.1 Gold C) ook wel aan.
|
|
+ " fac_bookmark_expire,"
|
|
+ " fac_bookmark_refreshtime,"
|
|
+ " fac_bookmark_naam,"
|
|
+ " fac_bookmark_flags"
|
|
+ " FROM fac_bookmark"
|
|
+ " WHERE fac_bookmark_id = " + safe.quoted_sql(u);
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.Eof)
|
|
{
|
|
shared.simpel_page(L("lcl_fac_bookmark_unknown"));
|
|
}
|
|
if (oRs("fac_bookmark_expire").Value != null)
|
|
{
|
|
var expire = new Date(oRs("fac_bookmark_expire").Value);
|
|
if (expire <= new Date)
|
|
{
|
|
shared.simpel_page(L("lcl_fac_bookmark_expired"));
|
|
}
|
|
}
|
|
|
|
var url = oRs("fac_bookmark_path").Value;
|
|
if (url.indexOf("{$*}") > 0) // default.asp?Jumpto=cust/uwva/pacta.asp{$*}
|
|
{
|
|
url = url.replace("{$*}", safe.url("?" + rest));
|
|
rest = "";
|
|
}
|
|
var refresher = oRs("fac_bookmark_refreshtime").Value;
|
|
var bookmark_naam = oRs("fac_bookmark_naam").Value;
|
|
var bookmark_key = oRs("fac_bookmark_key").Value;
|
|
|
|
if (user_key < 0)
|
|
{
|
|
if (oRs("prs_perslid_key_auth").Value)
|
|
{
|
|
var falluser_key = oRs("prs_perslid_key_auth").Value;
|
|
if (bookmark_naam != 'faclikedeeplink' && new Perslid(falluser_key).checkAutorisation("WEB_PRSSYS", true))
|
|
{
|
|
INTERNAL_ERROR_FALLBACK_CANNOT_HAVE_PRSSYS;
|
|
// fac_like_deep.asp & fac_like.asp staan we wel toe, die hebben een Session.Abandon();
|
|
}
|
|
Session("fallback_user_key") = falluser_key; // wordt opgepikt door loginTry.asp
|
|
}
|
|
else
|
|
{
|
|
Session("unauth_url") = oRs("fac_bookmark_unauth_url").Value; // wordt opgepikt door common.asp
|
|
}
|
|
}
|
|
|
|
var params = oRs("fac_bookmark_query").Value;
|
|
if (params)
|
|
{
|
|
if (keyparam > -1)
|
|
{
|
|
rest = rest.substring(("k="+keyparam).length+1);
|
|
params += keyparam;
|
|
}
|
|
if (rest)
|
|
params += "&" + rest;
|
|
}
|
|
else
|
|
{
|
|
if (rest)
|
|
params = rest;
|
|
}
|
|
|
|
if (params)
|
|
url = url + (url.indexOf('?') > -1?"&":"?") + params;
|
|
|
|
if (oRs("fac_bookmark_flags").Value == 0)
|
|
var url = protectQS.create(url); // prs/pchange_reset.asp, PRS\prs_perslid_qr_confirm.asp en PRS\self_register_confirm.asp verwachten dit
|
|
|
|
if (user_key > -1)
|
|
shared.registeraction("bookmark", {refkey: bookmark_key, info: bookmark_naam, daily: S("fac_gui_counter_menu_daily")});
|
|
|
|
oRs.Close();
|
|
}
|
|
|
|
// Als de bookmark een refreshrate heeft ingesteld wordt automatisch gerefreshed
|
|
// We doen een refresh van de complete bookmark, niet alleen van de pagina waar de
|
|
// bookmark naar wijst. Daarmee wordt de fallback_user voor elke refresh opnieuw
|
|
// gebruikt en 'overleeft' de refresh een 'session expired'
|
|
// Voorkom recursie met norefresh
|
|
if (refresher > 0 && getQParamInt("norefresh",0) == 0)
|
|
{
|
|
theURL = "appl/shared/refresher.asp?url=" + Server.URLencode("/?norefresh=1" + transitQS()) + "&refreshrate=" + refresher;
|
|
}
|
|
else
|
|
{
|
|
var theURL = url;
|
|
}
|
|
__Log("Redirecting to: " + theURL);
|
|
|
|
if (locked_bdradr_key < 0 && isKnownBookmark && !isMobile && getQParamInt("internal", 0) == 0)
|
|
{
|
|
Session("FirstPage") = theURL;
|
|
__Log("by opening it as the first tab");
|
|
theURL = rooturl + "/";
|
|
}
|
|
|
|
var no302 = getQParamInt("no302", 0) == 1;
|
|
// locked_bdradr_key wordt nogal eens vanuit e-mails geopend.
|
|
// Dan wil je ook een gewone redirect (Melding 56152)
|
|
if (no302 || locked_bdradr_key > 0)
|
|
{
|
|
%> <!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Facilitor</title>
|
|
<meta http-equiv="refresh" content="0;url=<%=safe.htmlattr(theURL)%>">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
|
<style>
|
|
body { font-family:Arial,Helvetica; }
|
|
</style>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
<a href="<%=safe.htmlattr(theURL)%>">Auto redirect</a>
|
|
</body>
|
|
</html>
|
|
<%
|
|
}
|
|
else
|
|
Response.Redirect(theURL);
|
|
%>
|
|
|
|
<% ASPPAGE_END(); %>
|