From 3b7d25fba1102768826fb78180c1b136fdffb13e Mon Sep 17 00:00:00 2001 From: Jan Kvetina Date: Sun, 23 Jan 2022 13:14:21 +0100 Subject: [PATCH] Store page request parameters as JSON in logs.arguments --- packages/app.spec.sql | 4 +++- packages/app.sql | 34 ++++++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/packages/app.spec.sql b/packages/app.spec.sql index b3be971..3c8d237 100644 --- a/packages/app.spec.sql +++ b/packages/app.spec.sql @@ -413,7 +413,9 @@ CREATE OR REPLACE PACKAGE app AS -- -- Returns requested URL -- - FUNCTION get_request_url + FUNCTION get_request_url ( + in_arguments_only BOOLEAN := FALSE + ) RETURN VARCHAR2; diff --git a/packages/app.sql b/packages/app.sql index f7a5683..7ce4ab1 100644 --- a/packages/app.sql +++ b/packages/app.sql @@ -933,15 +933,18 @@ CREATE OR REPLACE PACKAGE BODY app AS - FUNCTION get_request_url + FUNCTION get_request_url ( + in_arguments_only BOOLEAN := FALSE + ) RETURN VARCHAR2 AS BEGIN - RETURN UTL_URL.UNESCAPE( - OWA_UTIL.GET_CGI_ENV('SCRIPT_NAME') || - OWA_UTIL.GET_CGI_ENV('PATH_INFO') || '?' || - OWA_UTIL.GET_CGI_ENV('QUERY_STRING') - ); + RETURN CASE WHEN NOT in_arguments_only + THEN UTL_URL.UNESCAPE ( + OWA_UTIL.GET_CGI_ENV('SCRIPT_NAME') || + OWA_UTIL.GET_CGI_ENV('PATH_INFO') || '?' + ) END || + UTL_URL.UNESCAPE(OWA_UTIL.GET_CGI_ENV('QUERY_STRING')); EXCEPTION WHEN OTHERS THEN RETURN NULL; @@ -1491,12 +1494,31 @@ CREATE OR REPLACE PACKAGE BODY app AS FUNCTION log_request RETURN logs.log_id%TYPE AS + v_args logs.arguments%TYPE; BEGIN map_tree := app.arr_map_tree(); + + -- parse arguments + v_args := app.get_request_url(in_arguments_only => TRUE); -- + BEGIN + SELECT JSON_OBJECTAGG ( + REGEXP_REPLACE(REGEXP_SUBSTR(v_args, '[^&]+', 1, LEVEL), '[=].*$', '') + VALUE REGEXP_REPLACE(REGEXP_SUBSTR(v_args, '[^&]+', 1, LEVEL), '^[^=]+[=]', '') + ) INTO v_args + FROM DUAL + CONNECT BY LEVEL <= REGEXP_COUNT(v_args, '&') + 1 + ORDER BY LEVEL; + EXCEPTION + WHEN OTHERS THEN + app.log_error('JSON_ERROR'); + END; + + -- create log RETURN app.log__ ( in_flag => app.flag_request, in_action_name => app.get_request(), + in_arguments => v_args, in_payload => app.get_request_url() || CHR(10) ); END;