| 
<?php
 function logFilter($objFile, $tag, $cut){
 if (!preg_match('/^[a-f0-9]{10}$/D', $tag)) throw new Exception('Invalid search tag');
 
 $i = 0;
 $results = array();
 $line = $objFile->getPreviousLine();
 while($line !== FALSE && ($i++ < $cut)){
 if(strstr($line, '[' . $tag . ']')){
 $results[] = $line;
 }
 $line = $objFile->getPreviousLine();
 }
 $results[] = 'Searched ' . $i . ' lines backward. ' . count($results) . ' lines found.';
 $results = array_reverse($results);
 return $results;
 }
 
 
 $config = SimpleSAML_Configuration::getInstance();
 $session = SimpleSAML_Session::getSessionFromRequest();
 
 SimpleSAML_Utilities::requireAdmin();
 
 $logpeekconfig = SimpleSAML_Configuration::getConfig('module_logpeek.php');
 $logfile = $logpeekconfig->getValue('logfile', '/var/simplesamlphp.log');
 $blockSize = $logpeekconfig->getValue('blocksz', 8192);
 
 $myLog = new sspmod_logpeek_File_reverseRead($logfile, $blockSize);
 
 
 $results = NULL;
 if (isset($_REQUEST['tag'])) {
 $results = logFilter($myLog, $_REQUEST['tag'], $logpeekconfig->getValue('lines', 500));
 }
 
 
 $fileModYear = date("Y", $myLog->getFileMtime());
 $firstLine = $myLog->getFirstLine();
 $firstTimeEpoch = sspmod_logpeek_Syslog_parseLine::getUnixTime($firstLine, $fileModYear);
 $lastLine = $myLog->getLastLine();
 $lastTimeEpoch = sspmod_logpeek_Syslog_parseLine::getUnixTime($lastLine, $fileModYear);
 $fileSize = $myLog->getFileSize();
 
 $t = new SimpleSAML_XHTML_Template($config, 'logpeek:logpeek.php');
 $t->data['results'] = $results;
 $t->data['trackid'] = $session->getTrackID();
 $t->data['timestart'] = date(DATE_RFC822, $firstTimeEpoch);
 $t->data['endtime'] = date(DATE_RFC822, $lastTimeEpoch);
 $t->data['filesize'] = $fileSize;
 
 $t->show();
 ?>
 |