From d1b817443c5b34e4b564e31e9dc02e54d8db6188 Mon Sep 17 00:00:00 2001 From: Richard Underwood Date: Wed, 24 Aug 2016 11:32:43 +0100 Subject: [PATCH] Initial implementation of log rotation. --- includes/config.inc.php-dist | 5 +++++ includes/misc.inc.php | 31 +++++++++++++++++++++++++++++++ index.php | 29 +++++++++++++++++++++++++++++ logs.php | 13 ++++++++++++- 4 files changed, 77 insertions(+), 1 deletion(-) diff --git a/includes/config.inc.php-dist b/includes/config.inc.php-dist index 51f0bdd..bc00616 100644 --- a/includes/config.inc.php-dist +++ b/includes/config.inc.php-dist @@ -7,7 +7,12 @@ $apiproto = 'http'; # http | https $apisslverify = FALSE; # Verify SSL Certificate if using https for apiproto $allowzoneadd = FALSE; # Allow normal users to add zones $logging = TRUE; +$allowclearlogs = TRUE; # Allow clearing of log entries +$allowrotatelogs = FALSE;# Allow rotation to text file on server +# Log directory - if allowrotatelogs is set, this is where the logs will +# be written. It must be writeable by the web server user. +$logsdirectory = "../etc"; # If you configure this, nsedit will try to authenticate via WeFact too. # Debtors will be added to the sqlitedatabase with their crypted password. diff --git a/includes/misc.inc.php b/includes/misc.inc.php index 7041d0f..4c88c01 100644 --- a/includes/misc.inc.php +++ b/includes/misc.inc.php @@ -277,6 +277,37 @@ function clearlogs() { writelog("Logtable truncated."); } +function rotatelogs() { + global $logging, $logsdirectory; + if ($logging !== TRUE) + return FALSE; + + if(!is_dir($logsdirectory) || !is_writable($logsdirectory)) { + writelog("Logs directory cannot be written to."); + return FALSE; + } + + date_default_timezone_set('UTC'); + $filename = date("Y-m-d-His") . ".json"; + $file = fopen($logsdirectory . "/" . $filename, "x"); + + if($file === FALSE) { + writelog("Can't create file for log rotation."); + return FALSE; + } + + if(fwrite($file,json_encode(getlogs())) === FALSE) { + writelog("Can't write to file for log rotation."); + fclose($file); + return FALSE; + } else { + fclose($file); + clearlogs(); + return $filename; + } + +} + function writelog($line) { global $logging; if ($logging !== TRUE) diff --git a/index.php b/index.php index 78d1ee9..eb4cfbd 100644 --- a/index.php +++ b/index.php @@ -116,6 +116,9 @@ if ($blocklogin === TRUE) { +