From bdefc955abc3b317bc91fa7117236f6440b6d543 Mon Sep 17 00:00:00 2001 From: sparkyx Date: Fri, 27 Feb 2026 11:47:46 +0100 Subject: [PATCH] New : allow to see and download logfile --- html/export.php | 45 +++++++++++++++-- include/admin_logfile.inc.php | 93 +++++++++++++++++++++++++++++++++++ include/admin_repo.inc.php | 7 +++ include/lib/user_menu.php | 11 +++++ 4 files changed, 152 insertions(+), 4 deletions(-) create mode 100644 include/admin_logfile.inc.php diff --git a/html/export.php b/html/export.php index d287a8ce4..209e45363 100644 --- a/html/export.php +++ b/html/export.php @@ -33,6 +33,7 @@ global $g_user,$cn,$g_parameter; require_once NOALYSS_INCLUDE.'/class/database.class.php'; require_once NOALYSS_INCLUDE . '/class/noalyss_user.class.php'; require_once NOALYSS_INCLUDE.'/lib/http_input.class.php'; +mb_internal_encoding("UTF-8"); // // for loading javascripts or style-sheet, it is needed to know the user @@ -49,12 +50,47 @@ if (isset ($_REQUEST['loadjs']) && $_REQUEST['loadjs']=='message') include_once NOALYSS_INCLUDE."/lib/message_javascript.php"; return; } + + +//------------------------------------------------ +// Export File from ADMINISTRATION MENU +//------------------------------------------------ +$hi=new HttpInput(); +if ($hi->request("admin","string",0)==1 ) { + $g_user=new Noalyss_user(new Database()); + if ($g_user->admin != 1) + { + $g_user->audit('FAIL', "ADMIN: export admin".var_export($_REQUEST,true)); + echo_warning(_("Accès interdit")); + exit(); + } + if ( $hi->get("action")=="logfile") { + $directory=dir( NOALYSS_BASE.DIRECTORY_SEPARATOR."log"); + $a_file=[]; + while ( $file = $directory->read()) { + if (preg_match("/noalyss.*log/", $file)) { + $a_file[]=$file; + } + } + $file=$hi->get("file"); + if (! in_array($file,$a_file ) ) + { + echo_warning(sprintf("%s non trouvé",$file)); + return; + } + header('Content-Type: application/x-download'); + header('Content-Disposition: attachment; filename="'.$file.'"'); + header('Cache-Control: private, max-age=0, must-revalidate'); + header('Pragma: public'); + echo file_get_contents(NOALYSS_BASE.DIRECTORY_SEPARATOR."/log/{$file}"); + } + return; +} +//------------------------------------------------ // Connect the user to the current folder and export file +//------------------------------------------------ $cn=Dossier::connect(); $g_user=new Noalyss_user($cn); -$gDossier=dossier::id(); -$g_parameter=new Noalyss_Parameter_Folder($cn); -mb_internal_encoding("UTF-8"); $g_user->Check(); /** * check if 2FA is completed @@ -62,9 +98,10 @@ $g_user->Check(); if ( ! $g_user->is_double_identified()) { exit(); } +$gDossier=dossier::id(); +$g_parameter=new Noalyss_Parameter_Folder($cn); $action=$g_user->check_dossier($gDossier); -$hi=new HttpInput(); $action=$hi->get("act"); if ( $action=='X' || $g_user->check_print($action)==0 ) diff --git a/include/admin_logfile.inc.php b/include/admin_logfile.inc.php new file mode 100644 index 000000000..ef24a9e8b --- /dev/null +++ b/include/admin_logfile.inc.php @@ -0,0 +1,93 @@ +'; +print '

'; +print _("Fichiers trace"); +print "

"; +//print p(_("Fichiers trace"),' class="text-muted"'); + +$directory=dir( NOALYSS_BASE.DIRECTORY_SEPARATOR."log"); +$a_file=[]; +while ( $file = $directory->read()) { + if (preg_match("/noalyss.*log/", $file)) { + $a_file[]=$file; + } + +} + +rsort($a_file); +$nb_file=count($a_file); +if ( $nb_file == 0) { + echo p(_("Aucune donnée"),' class="notice"'); + return; +} +if ( $http->get("sa","string","x")=="dwn") +{ + $file=$http->get("file"); + if (! in_array($file,$a_file ) ) + { + echo_warning(sprintf("%s non trouvé",$file)); + record_log("admin_logfile : {$file} not found"); + return; + } + print ""; + echo '
';
+    echo file_get_contents(NOALYSS_BASE.DIRECTORY_SEPARATOR."/log/{$file}");
+    echo '
'; + print ""; + return; +} +echo '
    '; +for ( $i=0;$i < $nb_file;$i++) +{ + $url=sprintf("%s?%s", NOALYSS_URL."/admin-noalyss.php" + , http_build_query(["action"=>"logfile","sa"=>"dwn","file"=>$a_file[$i]])); + printf ("
  1. %s
  2. ",$url,$a_file[$i]); +} +print "
"; \ No newline at end of file diff --git a/include/admin_repo.inc.php b/include/admin_repo.inc.php index e1fd207c2..4965e7ef4 100644 --- a/include/admin_repo.inc.php +++ b/include/admin_repo.inc.php @@ -47,6 +47,7 @@ if ($User->admin != 1) { $theme=(isset($User->theme))?$User->theme:""; $User->audit('FAIL',"ADMIN : [$action]".var_export($_REQUEST,true)); + record_log("Security alert [{$action}]".var_export($_REQUEST,true)); html_page_start($theme); echo '
'; echo "

"; @@ -206,6 +207,12 @@ hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #0 echo $html->saveHTML(); } +if ($action== 'logfile') +{ + /* List the connexion successfull and failed */ + require_once NOALYSS_INCLUDE."/admin_logfile.inc.php"; +} + //------------------------------------------------------------------------------ // Upgrade //------------------------------------------------------------------------------ diff --git a/include/lib/user_menu.php b/include/lib/user_menu.php index 5148f8666..6c699174b 100644 --- a/include/lib/user_menu.php +++ b/include/lib/user_menu.php @@ -62,6 +62,9 @@ function MenuAdmin() case 'info': $def=6; break; + case 'logfile': + $def=9; + break; } } if (!defined("MULTI")||(defined("MULTI")&&MULTI==1)) @@ -76,6 +79,10 @@ function MenuAdmin() array("admin-noalyss.php?action=audit_log",_("Audit"),_("Utilisateurs qui se sont connectés"),4), array("admin-noalyss.php?action=info", _("Information système"),('Information à propos de votre installation'),6), + array("admin-noalyss.php?action=logfile" + ,_("Trace") + ,_("Fichiers erreurs") + ,9), array("login.php",_("Accueil"),"",7), array("logout.php",_("Sortie"),"",8) ); @@ -96,6 +103,10 @@ function MenuAdmin() array("admin-noalyss.php?action=audit_log",_("Audit"),_("Utilisateurs qui se sont connectés"),4), array("admin-noalyss.php?action=info", _("Information système"),('Information à propos de votre installation'),6), + array("admin-noalyss.php?action=logfile" + ,_("Trace") + ,_("Fichiers erreurs") + ,9), array("login.php",_("Accueil")), array("logout.php",_("Sortie")) );