From 13ada6d850f2d6be01481538751ebe2a6c6f3e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=85kre=20Solberg?= <andreas.solberg@uninett.no> Date: Tue, 20 Jan 2009 08:50:24 +0000 Subject: [PATCH] Adding logpeek module that allows read access to log file git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@1174 44740490-163a-0410-bde0-09ae8108e29a --- .../config-templates/module_logpeek.php | 13 ++++ modules/logpeek/default-disable | 0 modules/logpeek/hooks/hook_frontpage.php | 17 +++++ modules/logpeek/templates/default/logpeek.php | 28 +++++++++ modules/logpeek/www/index.php | 62 +++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 modules/logpeek/config-templates/module_logpeek.php create mode 100644 modules/logpeek/default-disable create mode 100644 modules/logpeek/hooks/hook_frontpage.php create mode 100644 modules/logpeek/templates/default/logpeek.php create mode 100644 modules/logpeek/www/index.php diff --git a/modules/logpeek/config-templates/module_logpeek.php b/modules/logpeek/config-templates/module_logpeek.php new file mode 100644 index 000000000..89255736d --- /dev/null +++ b/modules/logpeek/config-templates/module_logpeek.php @@ -0,0 +1,13 @@ +<?php +/* + * Configuration for the module logpeek. + * + * $Id $ + */ + +$config = array ( + 'logfile' => '/var/log/simplesamlphp.log', + 'lines' => 1500, +); + +?> diff --git a/modules/logpeek/default-disable b/modules/logpeek/default-disable new file mode 100644 index 000000000..e69de29bb diff --git a/modules/logpeek/hooks/hook_frontpage.php b/modules/logpeek/hooks/hook_frontpage.php new file mode 100644 index 000000000..96af12acf --- /dev/null +++ b/modules/logpeek/hooks/hook_frontpage.php @@ -0,0 +1,17 @@ +<?php +/** + * Hook to add the logpeek module to the frontpage. + * + * @param array &$links The links on the frontpage, split into sections. + */ +function logpeek_hook_frontpage(&$links) { + assert('is_array($links)'); + assert('array_key_exists("links", $links)'); + + $links['links'][] = array( + 'href' => SimpleSAML_Module::getModuleURL('logpeek/'), + 'text' => array('en' => 'SimpleSAMLphp logs access (Log peek)', 'no' => 'Vis simpleSAMLphp log'), + ); + +} +?> \ No newline at end of file diff --git a/modules/logpeek/templates/default/logpeek.php b/modules/logpeek/templates/default/logpeek.php new file mode 100644 index 000000000..c89f80a70 --- /dev/null +++ b/modules/logpeek/templates/default/logpeek.php @@ -0,0 +1,28 @@ +<?php +$this->data['header'] = 'Log peek'; +$this->includeAtTemplateBase('includes/header.php'); + + +?> +<div id="content"> + +<h2>SimpleSAMLphp logs (admin utility)</h2> + +<form method="get" action="?"> + <input type="text" name="tag" value="<?php echo $this->data['trackid']; ?>" /> + <input type="submit" value="Show logs" /> +</form> + + +<pre style="background: #eee; border: 1px solid #666; padding: 1em; margin: .4em; overflow: scroll"> +<?php + +if (!empty($this->data['results'])) { + foreach($this->data['results'] AS $line) { + echo $line; + } +} + +?> +</pre> +<?php $this->includeAtTemplateBase('includes/footer.php'); ?> \ No newline at end of file diff --git a/modules/logpeek/www/index.php b/modules/logpeek/www/index.php new file mode 100644 index 000000000..d1bd15adb --- /dev/null +++ b/modules/logpeek/www/index.php @@ -0,0 +1,62 @@ +<?php + + +$config = SimpleSAML_Configuration::getInstance(); +$session = SimpleSAML_Session::getInstance(); + +if (!$session->isValid('login-admin') ) { + SimpleSAML_Utilities::redirect('/' . $config->getBaseURL() . 'auth/login-admin.php', + array('RelayState' => SimpleSAML_Utilities::selfURL()) + ); +} + + +$logpeekconfig = $config->copyFromBase('logpeek', 'module_logpeek.php'); + +$logfile = $logpeekconfig->getValue('logfile', '/var/simplesamlphp.log'); + +function grepLog($logfile, $tag, $lines) { + + if (!is_readable($logfile)) throw new Exception('Log file [' . $logfile . '] is not readable. Consider checking the file permissions'); + if (!preg_match('/^[a-f0-9]{10}$/', $tag)) throw new Exception('Invalid search tag'); + + $results = array(); + $i=0 ; + $line = ''; + $fp = fopen($logfile,"r") ; + if(is_resource($fp)){ + fseek($fp,0,SEEK_END) ; + $a = ftell($fp) ; + while($i <= $lines){ + if(fgetc($fp) == "\n"){ + $line = fgets($fp); + $i++ ; + if (strstr($line, '[' . $tag . ']')) + $results[] = $line; + } + fseek($fp,$a); + $a-- ; + } + } + + $results[] = 'Start search line (' . $lines . ' lines back): ' . substr($line,0,40) . '...'; + $results = array_reverse($results); + return $results; +} + +$results = NULL; +if (isset($_REQUEST['tag'])) { + $results = grepLog($logfile, $_REQUEST['tag'], $logpeekconfig->getValue('lines', 500)); +// echo('<pre>log:'); +// print_r($results); +} + + + +$t = new SimpleSAML_XHTML_Template($config, 'logpeek:logpeek.php'); +$t->data['results'] = $results; +$t->data['trackid'] = $session->getTrackID(); +$t->show(); +exit; + +?> -- GitLab