17bd08c30SSascha Leib<?php /* BOTMON PLUGIN HEARTBEAT TICKER SCRIPT */ 2cf9f7fe8SSascha Leib 3*b2e3bd8bSSascha Leib // Note: this script is called in HEAD mode, therefore it can not return any payload. 413c9d29dSSascha Leib 5*b2e3bd8bSSascha Leib // select the session identifier? 613c9d29dSSascha Leib $sessionId = $_COOKIE['DokuWiki'] ?? ''; 7*b2e3bd8bSSascha Leib $sessionType = 'dw'; 813c9d29dSSascha Leib if ($sessionId == '') { 9abfc901fSSascha Leib $sessionId = $_SERVER['REMOTE_ADDR'] ?? ''; 10f162e4a9SSascha Leib if ($sessionId == '127.0.0.1' || $sessionId == '::1') { 11abfc901fSSascha Leib $sessionId = 'localhost'; 12abfc901fSSascha Leib } 13*b2e3bd8bSSascha Leib $sessionType = 'ip'; 14abfc901fSSascha Leib } 15abfc901fSSascha Leib 16*b2e3bd8bSSascha Leib // check if valid session id string: 17*b2e3bd8bSSascha Leib if (strlen($sessionId) < 46 && !preg_match('/^[\w\d\.:]+$/', $sessionId)) { 18*b2e3bd8bSSascha Leib $sessionId = 'invalid-session-id'; 19*b2e3bd8bSSascha Leib } 20*b2e3bd8bSSascha Leib 21*b2e3bd8bSSascha Leib // clean the page ID 22*b2e3bd8bSSascha Leib $pageId = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $_GET['p'] ?? ''); 23*b2e3bd8bSSascha Leib 24*b2e3bd8bSSascha Leib // clean the user agent string 25*b2e3bd8bSSascha Leib $agent = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $_SERVER['HTTP_USER_AGENT'] ?? ''); 26*b2e3bd8bSSascha Leib 27*b2e3bd8bSSascha Leib /* build the resulting log line */ 28cf9f7fe8SSascha Leib $logArr = Array( 29*b2e3bd8bSSascha Leib $_SERVER['REMOTE_ADDR'] ?? '', /* Remote IP */ 30*b2e3bd8bSSascha Leib $pageId, /* Page ID */ 31abfc901fSSascha Leib $sessionId, /* Session ID */ 32*b2e3bd8bSSascha Leib $agent /* User agent */ 33cf9f7fe8SSascha Leib ); 34cf9f7fe8SSascha Leib 35cf9f7fe8SSascha Leib /* create the log line */ 364cddc661SSascha Leib $filename = 'logs/' . gmdate('Y-m-d') . '.tck.txt'; /* use GMT date for filename */ 37cf9f7fe8SSascha Leib $line = gmdate('Y-m-d H:i:s'); /* use GMT time for log entries */ 38cf9f7fe8SSascha Leib foreach ($logArr as $val) { 39cf9f7fe8SSascha Leib $line .= "\t" . $val; 40cf9f7fe8SSascha Leib }; 41cf9f7fe8SSascha Leib 42cf9f7fe8SSascha Leib /* write the log line to the file */ 4387d76396SSascha Leib $tickfile = fopen($filename, 'a'); 44cf9f7fe8SSascha Leib if (!$tickfile) { 45cf9f7fe8SSascha Leib http_response_code(500); 46cf9f7fe8SSascha Leib die("Error: Unable to open log file. Please check file permissions."); 47cf9f7fe8SSascha Leib } 48cf9f7fe8SSascha Leib if (fwrite($tickfile, $line . "\n") === false) { 49*b2e3bd8bSSascha Leib http_response_code(507); 50cf9f7fe8SSascha Leib fclose($tickfile); 51cf9f7fe8SSascha Leib die("Error: Could not write to log file."); 52cf9f7fe8SSascha Leib } 53cf9f7fe8SSascha Leib fclose($tickfile); 54cf9f7fe8SSascha Leib 55cf9f7fe8SSascha Leib /* Send "Accepted" header */ 56cf9f7fe8SSascha Leib http_response_code(202); 57cf9f7fe8SSascha Leib echo "OK";