<%@language = "javascript" %>
<% /*
    $Revision$
    $Id$

    We weten niet wie de gebruiker is.
    Probeer op allerlei manieren SSO
    Als het lukt geven we een user_key terug in Session("user_key");
    Als het niet lukt zal doorgaans door common.inc verder gegaan worden in de interactieve Logon.asp

    LET OP: Dit bestand wordt via Server.Transfer vanuit Common.inc aangeroepen
*/
DOCTYPE_Disable = 1;
ANONYMOUS_Allowed = 1;
LOGIN_try = 1; // prevent recursion
NO_ADDHEADER = 1; // common.inc voert wat globale acties hierdoor niet meer uit
THIS_FILE = 'appl/shared/logintry.asp';

if (Response.Expires > 0)
    FCLTEXPIRES = Response.Expires; // Aanroeper wist het beter?
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/login.inc" -->
<!-- #include file="../api/api.inc" -->
<%

var querystring = getQParam("querystring", "");

if (typeof Session("sso_sgf") == "string") // Vanuit SGF12-portal/ sso_sgf.asp
{
    Session.Contents.Remove("ASPFIXATION"); // Niet moeilijk doen
    settings.overrule_setting("login_use_email", 0); // We hebben altijd login gescanned namelijk
    tryLogin(String(Session("sso_sgf")),null);
    if (user_key < 0 && parseInt(String(Session("sso_sgf")), 10))
        doLogin(parseInt(String(Session("sso_sgf")), 10)); // je mag ook key meegeven
    Session.Contents.Remove("sso_sgf");
}

if (user_key < 0)
    SimpleSSO(); // de base64 simple sso

// Ingescande QR-code bookmark gaat naar \appl\prs\prs_perslid_qr_confirm.asp

if (user_key < 0) // Probeer de user_key uit een cookie te halen
{
    var FcltId = "" + Request.Cookies("fcltid");
    if (FcltId != null && FcltId != "")
    {
        setUserFromSession (FcltId);
        if (user_key > 0)
            makeSessionCookie("Remember Login"); // Atijd nieuwe
    }
}

if (user_key < 0)
{
    var auth = String(Request.ServerVariables("HTTP_AUTHORIZATION"));
    if (auth.match(/^Basic /))
    {
        var b64 = auth.substring(6);
        var plain = decode_b64(b64);
        if (plain.split(":").length > 1)
        {
            var ww = plain.split(":");
            ww.shift();
            tryLogin(plain.split(":")[0], ww.join(":")); // Behoudt eventuele ':' in wachtwoord
        }
    }
}

if (user_key < 0)
{
    // Deeplink met &userauth=27399&userhmac=1387370160%3AECQXKFpi8RU5WTK2pfJ0zRnc7QY
    if (Request.QueryString("userauth").Count > 0)
    {
        var userauth = getQParamInt("userauth"); // Zal een perslid_key zijn
        var userhmac = getQParam("userhmac");
        protectHMAC.verify(String(userauth), userhmac);
        doLogin(userauth);
    }
}

if (user_key < 0 && getQParamInt("sso", -1) > 0)
{
    var sso = getQParamInt("sso");
    var key = sso==1?S("sso_advanced_secret"):S("sso_advanced_secret_alt");
    if (!key)
        abort_with_warning("SSO Advanced secret is not set");
    var ip_restrict = sso==1?S("sso_advanced_autoip"):S("sso_advanced_autoip_alt");
    var ip_ok = true;
    if (ip_restrict)
    {
        var ip = String(Request.ServerVariables("REMOTE_ADDR"));
        ip_ok = new RegExp(ip_restrict.replace(/\./ig, "\\."), "ig").test(ip);
        __Log("SSO IP-restrictie {0} versus remote {1}: {2}".format(ip_restrict, ip, ip_ok));
    }

    if (ip_ok)
        SecureSSO({ strSharedKey: key,
                    Timeout: S("sso_advanced_timeout"),
                    sso: sso
                  });
}

if (user_key < 0)
{
    if (Session("fallback_user_key") > 0) // (QRC) bookmark met fallback user_key
    {
        doLogin(Session("fallback_user_key"), { noFacSession: true });// gezet in Shorturl.asp
        Session("login_by_fallback") = true; // fac_like_deep.asp wist dan sessie
        Session.Contents.Remove("fallback_user_key");
    }
}

// Pas héél laat api_user_key zetten om te voorkomen dat je
// bestaande sessie ongeldig wordt (Vinder/ telefoongids)
// JGL (later) maar volgens mij komt je dan hier helemaal niet dus is het niet echt relevant
var APIname = getQParam("API", "");
if (user_key < 0 && APIname)
{
    var API = new API_func(); // controleert vanzelf

    if (API.apidata.prs_perslid_key)
        user_key = API.apidata.prs_perslid_key;
}

// LogOff.asp kan Session("no_sso") gezet hebben
// Ook: met &sso=0
if (Request.QueryString("sso") == "0")
    Session("no_sso") = 1;

if (user_key < 0 && S("os_logon")
        && typeof Session("no_sso") == "undefined")
{
    var extern=false;
    var i;
    for (var i in S("os_logon_exclude")) // via proxy binnen?
    {
        if (Request.ServerVariables(S("os_logon_exclude")[i]).count>0)
            extern = true;
    }
    if (!extern)
        IntegratedSSO(); // Voor licentieklanten
}

if (user_key > 0)
{   // gelukt, teruggeven aan aanroeper
    Session("user_key") = user_key;
}
%>