FSN#40442 FACFAC Superuser vrije SQL-SELECT kunnen uitvoeren
svn path=/Website/trunk/; revision=33789
This commit is contained in:
200
APPL/MGT/mgt_genericsql.asp
Normal file
200
APPL/MGT/mgt_genericsql.asp
Normal file
@@ -0,0 +1,200 @@
|
||||
<%@language = "javascript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: mgt_genericsql.asp
|
||||
|
||||
Description: Ingang om generiek sql SELECT statement uit te voeren
|
||||
Context: Rechtstreeks of vanuit logfile
|
||||
|
||||
Notes:
|
||||
*/
|
||||
%>
|
||||
|
||||
<!-- #include file="../shared/common.inc" -->
|
||||
<!-- #include file="../Shared/adovbs.inc" -->
|
||||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||||
<%
|
||||
__Logging = 0; // Is te laat...
|
||||
Application("otap_environment") == "O" || user.checkAutorisation("WEB_FACFAC");
|
||||
var sql = getFParam("sql", getQParam("sql", ""));
|
||||
|
||||
/*
|
||||
//Onze SQL-statement zo maar naar een cloud-service sturen mag vast niet van ISO-27001
|
||||
if (sql && sql != "opener")
|
||||
{
|
||||
SXH_PROXY_SET_PROXY = 2
|
||||
var url="http://www.dpriver.com/cgi-bin/ppserver";
|
||||
var http_request = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0");
|
||||
//http_request.setProxy(SXH_PROXY_SET_PROXY, "127.0.0.1:8888")
|
||||
|
||||
http_request.open("POST", url, false);
|
||||
http_request.setRequestHeader("Content-Type", "application/xml; charset=UTF-8")
|
||||
//6470-1140-4758-5296 demo
|
||||
//4149-9094-8133-2031 online
|
||||
// demo mei 2017 <clientid>dpriver-9094-8133-2031</clientid>
|
||||
var req = "<sqlpp_request><clientid>dpriver-9094-8133-2031</clientid><dbvendor>oracle</dbvendor><outputfmt>html2</outputfmt><inputsql>";
|
||||
req += Server.HTMLEncode(sql);
|
||||
req += '</inputsql><formatoptions><keywordcs>Uppercase</keywordcs><identifiercs>Lowercase</identifiercs>'
|
||||
+ '<functioncs>Uppercase</functioncs><lnbrwithcomma>after</lnbrwithcomma><liststyle>stack</liststyle>'
|
||||
+ '<salign>sleft</salign><quotechar>"</quotechar><maxlenincm>80</maxlenincm>'
|
||||
+ '<andorunderwhere>yes</andorunderwhere></formatoptions></sqlpp_request>';
|
||||
http_request.send(req);
|
||||
|
||||
var xslDoc = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
xslDoc.loadXML(http_request.responseText);
|
||||
retvalue = xslDoc.selectSingleNode("sqlpp_result/retvalue");
|
||||
retmessage = xslDoc.selectSingleNode("sqlpp_result/retmessage");
|
||||
if (retvalue.text != "0")
|
||||
{
|
||||
// retmessage.text: AS(1,130) expected token:JOIN
|
||||
RegCode = retmessage.text.match(/^(\w*)\(1\,(\d+)/); // Zoek: AS(1,130) expected token:JOIN
|
||||
if (RegCode && RegCode.length > 2)
|
||||
{
|
||||
var ll = RegCode[1].length;
|
||||
var pos = parseInt(RegCode[2], 10);
|
||||
sql = sql.substr(0, pos-1) + "<span style='background-color:red'>"+RegCode[1]+"</span>" + sql.substr(pos-1+ll);
|
||||
}
|
||||
|
||||
Response.Write("<i>"+retmessage.text+"</i>");
|
||||
Response.Write("<br>" + sql); // origineel terug
|
||||
}
|
||||
else
|
||||
{
|
||||
formatted_sql = xslDoc.selectSingleNode("sqlpp_result/formattedsql");
|
||||
Response.Write(formatted_sql.text);
|
||||
}
|
||||
}
|
||||
*/
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
<% FCLTHeader.Generate({outputmode: 0}) %>
|
||||
<script>
|
||||
<% if (sql == "opener") {
|
||||
sql = "";
|
||||
%>
|
||||
$(function () {
|
||||
if (window.opener && window.opener.genericsql)
|
||||
{
|
||||
$("#sql").val(window.opener.genericsql);
|
||||
$("form").submit();
|
||||
}
|
||||
});
|
||||
<% } %>
|
||||
|
||||
function fliptable(evt)
|
||||
{
|
||||
FcltMgr.stopPropagation(evt);
|
||||
$("table#sqldatatable").each(function() {
|
||||
var $this = $(this);
|
||||
var newrows = [];
|
||||
$this.find("tr").each(function(){
|
||||
var i = 0;
|
||||
$(this).find("td,th").each(function()
|
||||
{
|
||||
if ($(this).closest("thead").hasClass("tableFloatingHeader"))
|
||||
return;
|
||||
i++;
|
||||
if(newrows[i] === undefined) { newrows[i] = $("<tr></tr>"); }
|
||||
this.align = 'left'; // de data
|
||||
if (this.tagName == 'TH')
|
||||
this.style = 'text-align:right'; // de headers
|
||||
newrows[i].append($(this));
|
||||
});
|
||||
});
|
||||
$this.find("tr").remove();
|
||||
$.each(newrows, function(){
|
||||
$this.append(this);
|
||||
});
|
||||
});
|
||||
$("table#sqldatatable").width('auto');
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
table.rstable td {
|
||||
border-left: 1px solid #bbb;
|
||||
}
|
||||
body {
|
||||
padding: 5px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body id="searchbody">
|
||||
<div id="search">
|
||||
<form method='post'>
|
||||
<textarea name='sql' id='sql' style='width:800px;height:200px' spellcheck="false"><%=safe.textarea(sql)%></textarea>
|
||||
<button type='submit'>Execute</button>
|
||||
</form>
|
||||
</div>
|
||||
<%
|
||||
if (!sql)
|
||||
Response.End;
|
||||
|
||||
try
|
||||
{
|
||||
var hiresTimer = new ActiveXObject("SLNKDWF.About");
|
||||
var tm_start = hiresTimer.usTimer;
|
||||
var oRs = Oracle.RealConnection.Execute("SELECT * FROM ({0})".format(sql)); // de wrapper beschermt tegen INSERT, DELETE en UPDATE
|
||||
var tm = (hiresTimer.usTimer - tm_start) / 1000;;
|
||||
Response.Write(tm.toFixed(1) + "ms")
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
Response.Write(" <i style='color:red' class='fa fa-warning fa-lg'></i> " + e.description);
|
||||
Response.End;
|
||||
}
|
||||
var rst = new ResultsetTable({ sql: "dummy",
|
||||
pRs: oRs, // oRs is al eerder bepaald
|
||||
ID: "sqldatatable",
|
||||
showAll: true, //showall,
|
||||
outputmode: 0,
|
||||
title: "SQL <button onclick='fliptable(event)'>Flip</button>",
|
||||
noPrint: true,
|
||||
noExcel: true,
|
||||
buttons: [] // print en excel komen vanzelf
|
||||
});
|
||||
function fnfnmyFloat(kolom)
|
||||
{
|
||||
return function (oRs)
|
||||
{
|
||||
var v = oRs(kolom).Value;
|
||||
return safe.displayfloat(v, 2, true); // true voor trimZeros, we weten helemaal niet of die 2 zo bedoeld was
|
||||
}
|
||||
}
|
||||
|
||||
for (i= 0; i < oRs.Fields.Count; i++)
|
||||
{
|
||||
var kolomnaam = oRs.Fields(i).Name.toLowerCase();
|
||||
var colpar = {caption: kolomnaam,
|
||||
content: kolomnaam,
|
||||
datatype: null,
|
||||
align: null
|
||||
}
|
||||
var kolomtype = oRs.Fields(i).Type;
|
||||
if (kolomtype == adInteger || kolomtype == adDecimal)
|
||||
{
|
||||
colpar.datatype = 'number';
|
||||
}
|
||||
else if (kolomtype == adCurrency || kolomtype == adNumeric || kolomtype == adVarNumeric || kolomtype == adDouble)
|
||||
{
|
||||
colpar.align = "right"
|
||||
colpar.content = fnfnmyFloat(kolomnaam);
|
||||
}
|
||||
else if (kolomtype == adDBTimeStamp)
|
||||
{
|
||||
colpar.datatype = 'datetime'; // ??
|
||||
}
|
||||
rst.addColumn(new Column(colpar));
|
||||
}
|
||||
|
||||
var cnt = rst.processResultset();
|
||||
if (cnt == 1)
|
||||
{
|
||||
%><script>fliptable()</script><%
|
||||
}
|
||||
%>
|
||||
</body>
|
||||
@@ -158,6 +158,8 @@ htmlLogger =
|
||||
this._file_handle.WriteLine("td.tm:hover div.caller, div.caller:hover { display:block; }");
|
||||
this._file_handle.WriteLine("</style>");
|
||||
this._file_handle.WriteLine("<title>*" + __LogfileTitle + (rooturl?" "+rooturl:"") + " FACILITOR logger</title>");
|
||||
if (Application("otap_environment") == "O")
|
||||
this._file_handle.WriteLine("<script type='text/javascript' src='../shared/logger.js'></script>");
|
||||
this._file_handle.WriteLine("</head>");
|
||||
this._file_handle.WriteLine("<body>");
|
||||
if (typeof __LogNoClear == "undefined")
|
||||
|
||||
24
APPL/Shared/logger.js
Normal file
24
APPL/Shared/logger.js
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: logger.js
|
||||
Description: Wordt bij OTAP==O bijgeladen om SELECT in logfile klikbaar te maken
|
||||
*/
|
||||
|
||||
function showSQL(sql)
|
||||
{
|
||||
window.genericsql = sql;
|
||||
var url = "../mgt/mgt_genericsql.asp?sql=opener";
|
||||
window.open(url);
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
var times = document.getElementsByClassName('tm');
|
||||
for (var i = 0; i < times.length; i++)
|
||||
{
|
||||
var tddata = times[i].nextElementSibling;
|
||||
if (tddata.innerText.substr(0, 6).toUpperCase() == 'SELECT')
|
||||
tddata.innerHTML = '<a href="#" onclick="showSQL(this.parentElement.innerText);return false;" title="View SQL">SELECT</a>' + tddata.innerHTML.substr(6);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user