<%@ Language=JavaScript %>
<% /*
      $Revision$
      $Id$

    File:               shared/BijlagenStream.asp
    Description:        Open een file door hem te streamen. Daardoor hoeft een bestand
                        niet per se onder de www-root te vallen
    Parameters:
        pkey            ALG_RUIMTE_KEY of ...
        pModule         "ALG" of ...
        pKenmerk_key    ALG_KENMERK_KEY of ...
        pFileName       de file die de gebruiker wil zien.
        pDosave         Als meegegeven dan wil de gebruiker 'SaveAs' doen
                        -->Negeren voortaan: we doen altijd 'attachment'. Schijnt beter te openen

    Context:            - Rechtstreeks als een gebruiker klikt op een flexveld type 'F'/'E'
                        - Vanuit BijlagenForm.asp op een document klikt (type 'F'/'E' of 'M')
    Note:               - Als het een DWF is spelen we vals: we tonen hem eventueel met SLNKDWF
                        - Als de bestandsnaam eindigt op .encrypted dan hebben we hem binnen SLNKDWF
                          met een geheime sleutel encrypted. On-the-fly decrypten we hem weer.
                        Met TAMPER bescherming!
*/ %>
<%
DOCTYPE_Disable = 1; // ook al volgt straks een response.Clear
// Session.Contents.RemoveAll(); // even om te testen
var FCLTEXPIRES = 24*60; // 24 uur kan al flink schelen. Heeft alleen zin als hmac met cacheablehmac: true is aangemaakt

var pModule = getQParamSafe("module", "");
if (pModule === "ORDN") {
    var LOCKED_USER_OK = { "xmlnode": "opdracht", "key": getQParamInt("opdr_key", null) };
} else if (pModule === "MLDN") {
    var LOCKED_USER_OK = { "xmlnode": "melding", "key": getQParamInt("mld_key", null) };
}

%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../shared/FlexFiles.inc" -->
<%
    if (user_key < 0)
        shared.simpel_page(L("lcl_no_auth"));
    protectQS.verify({ expire: 24*60 }); // tamper check

    var pBijlagen_key= getQParamInt("bijlagen_key", -1);
    var pmime        = getQParam("mime", "application/octet-stream");
    var pcontentdp   = getQParam("contentdp", "attachment");
    var pDosave      = getQParam("dosave", 0)==1;

    var vAttachPath;
    var vFileName;
    if (pBijlagen_key == -1)
    {
        var pModule      = getQParamSafe("module");
        var pNiveau      = getQParamSafe("niveau", "");
        var pKey         = getQParamInt("key", -1);
        var pKenmerk_key = getQParamInt("kenmerk_key", -1);
        var pFileName    = getQParam("filename");
        var pTmpfolder   = getQParamSafe("tmpfolder", "");
        // Doet whitelist van pModule, kan S("flexAllowedExt") overrulen
        var fpParams = (pTmpfolder != "" ? {tmpfolder: pTmpfolder} : null);
        params = flexProps(pModule, pKey, (pKenmerk_key != -1 ? pKenmerk_key : null), pNiveau, fpParams );
        vAttachPath = params.AttachPath;
        vFileName = pFileName;
    }
    else
    {
        var sql = "SELECT b.fac_bijlagen_disk_directory"
                + "     , b.fac_bijlagen_filename"
                + "  FROM fac_v_bijlagen b"
                + " WHERE b.fac_bijlagen_key = " + pBijlagen_key;
        var oRs = Oracle.Execute(sql);
        if (!oRs.eof)
        {
            vAttachPath = S("flexFilesPath") + "/" + oRs("fac_bijlagen_disk_directory").Value;
            vFileName = oRs("fac_bijlagen_filename").Value;
            var extension = vFileName.split(".").pop().toLowerCase();
            pmime = S("flex_mimetypes")[extension]
        }
        else
        {
            shared.simpel_page(L("lcl_flex_filenotfoundRO"));
        }
        oRs.Close();
    }

    // Zonder extensie downloaden keuren we goed
    // (ook al staan we sinds 5.2.1 uploaden niet meer toe)
    if (vFileName.indexOf(".") >= 0 && !new RegExp(S("flexAllowedExt"), "ig").test(vFileName))
    {
        INTERNAL_ERROR_BAD_EXT;
    }

    // Bestanden zijn nu te vinden op ...cust/[custid]/flexfiles/[module]/[key]/
    __Log("vAttachPath = " + vAttachPath);
    if (!pDosave && S("view_dwf_with_slnkdwf") && String(vFileName).match(/\.dwf$/i))
        Response.Redirect("../SLNKDwf/ShowDWF.asp?absfile=" + vAttachPath + "/" + safe.filename(vFileName));

    if (vFileName.match(/\.encrypted$/)) // Auto decrypt gewenst
    {
        var contentFile = vFileName.replace(/\.encrypted$/,"");
        var oZip = Server.CreateObject("SLNKDWF.Zip");
        oZip.Open(vAttachPath + "/" + safe.filename(vFileName));

        Response.clear;
        Response.contenttype = pmime;
        Response.AddHeader("content-disposition", "attachment; filename= \"" + safe.ContentName(contentFile) + "\"");
        oZip.DecryptToStream(Response, contentFile);
        Response.End();
    }
    else
    {
        StreamFile(vAttachPath, vFileName, { mime: pmime, pcontentdp: pcontentdp})
    }
%>
<% ASPPAGE_END(); %>
