@@ -594,6 +594,45 @@ sub switch_to_main_db {
594594 return $class -> dbh_main;
595595}
596596
597+ sub log_user_request {
598+ my ($class , $bug_id , $attach_id , $action ) = @_ ;
599+
600+ return unless Bugzilla-> params-> {log_user_requests };
601+
602+ my $cgi = $class -> cgi;
603+ my $user_id = $class -> user-> id;
604+ my $request_url = $cgi -> request_uri // ' ' ;
605+ my $method = $cgi -> request_method;
606+ my $user_agent = $cgi -> user_agent // ' ' ;
607+ my $script_name = $cgi -> script_name;
608+ my $server = " web" ;
609+
610+ if ($script_name =~ / rest\. cgi/ ) {
611+ $server = $script_name =~ / BzAPI/ ? " bzapi" : " rest" ;
612+ }
613+ elsif ($script_name =~ / xmlrpc\. cgi/ ) {
614+ $server = " xmlrpc" ;
615+ }
616+ elsif ($script_name =~ / jsonrpc\. cgi/ ) {
617+ $server = " jsonrpc" ;
618+ }
619+
620+ my @params = ($user_id , remote_ip(), $user_agent , $request_url , $method , $bug_id , $attach_id , $action , $server );
621+ foreach my $param (@params ) {
622+ trick_taint($param ) if defined $param ;
623+ }
624+
625+ eval {
626+ local $class -> request_cache-> {dbh };
627+ $class -> switch_to_main_db();
628+ $class -> dbh-> do(" INSERT INTO user_request_log
629+ (user_id, ip_address, user_agent, request_url,
630+ method, timestamp, bug_id, attach_id, action, server)
631+ VALUES (?, ?, ?, ?, ?, NOW(), ?, ?, ?, ?)" , undef , @params );
632+ };
633+ warn $@ if $@ ;
634+ }
635+
597636sub is_shadow_db {
598637 my $class = shift ;
599638 return $class -> request_cache-> {dbh } != $class -> dbh_main;
0 commit comments