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

    File:           Shared/csp_report.asp
    Description:    FUTURE USE: De browser rapporteert een overtreding van de Content-Security-Policy aan deze pagina
                    Momenteel is report-uri deprecated en bovendien niet goed geimplementeerd in Firefox (https://bugzilla.mozilla.org/show_bug.cgi?id=1140266)
                    Dat laatste zorgt ervoor dat Facilitor de pagina niet geauthenticeerd kan aanvragen waardoor het eerder een risico is dan dat het wat oplost.
                    Het alternatief; report-to, is momenteel nog niet voldoende door browsers ondersteund.
                    Daarom laten we het rapporteren van CSP violations nog even achterwege.

    Note:           De ingestelde CSP-header heeft iets geblokkeerd, dat loggen we hier
*/

DOCTYPE_Disable = 1;

%>
<!-- #include file="../Shared/common.inc" -->
<%

// Kopie uit api.inc
function BytesToStr(bytes)
{
    var stream = Server.CreateObject("ADODB.STREAM");
    stream.type = 1;
    stream.open;
    stream.write(bytes);
    stream.position = 0;
    stream.type = 2; // Text
    stream.charset = "utf-8";

    // Mogelijk was het nog utf-8. Dat is riskant met unicode quotes (FCLT#60591)
    // Daarom expliciete conversie
    var win1252Stream = new ActiveXObject("ADODB.Stream");
    win1252Stream.Open();
    win1252Stream.CharSet = "Windows-1252"; // het doel
    stream.copyTo(win1252Stream);
    stream.close;

    win1252Stream.position = 0;

    var ReadBytes = 131072; // optimaal volgens https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/readtext-method?view=sql-server-ver15
    var sOut = "";
    while (!win1252Stream.EOS)
    {
        sOut = sOut + win1252Stream.ReadText(ReadBytes);
    }
    win1252Stream.close;

    return sOut;
}

function RequestJSON()
{
    var raw_request;
    if (Request.TotalBytes > 0)
    {
        var lngBytesCount = Request.TotalBytes;
        raw_request = BytesToStr(Request.BinaryRead(lngBytesCount));
    }
    try
    {
        var csp_report = JSON.parse(raw_request);
    }
    catch (e)
    {
        __DoLog("JSON.parse faalt met: {0}<br>{1}".format(e.description, raw_request), "#f00");
        return {};
    }
    return csp_report;
}

var csp_report = RequestJSON();

__DoLog("Content Security Policy overtreding, S(\"csp-header\") te streng afgesteld?", "#f00");
__DoLog(csp_report);

Response.Status = 204; // No content
Response.End;


%>
<% ASPPAGE_END(); %>
