Log HTTP requests and responses

This commit is contained in:
bohwaz 2022-10-21 18:21:38 +02:00
parent 4b30a2c550
commit 806a194245
4 changed files with 42 additions and 7 deletions

View file

@ -39,3 +39,9 @@ define('KaraDAV\WWW_URL', sprintf('http%s://%s%s%s', $https, $name, $port, $root
* If set to NULL, WOPI support is disabled
*/
const WOPI_DISCOVERY_URL = null;
/**
* Path to a log file (eg. __DIR__ . '/debug.log')
* This will log all HTTP requests and responses received by the server
*/
const LOG_FILE = null;

View file

@ -30,4 +30,9 @@ class WebDAV extends WebDAV_Server
header('Access-Control-Allow-Headers: Authorization, *');
header('Access-Control-Allow-Methods: GET,HEAD,PUT,DELETE,COPY,MOVE,PROPFIND,MKCOL,LOCK,UNLOCK');
}
public function log(string $message, ...$params)
{
http_log('DAV: ' . $message, ...$params);
}
}

View file

@ -77,3 +77,20 @@ function format_bytes(int $bytes, string $unit = 'B'): string
return $bytes . ' ' . $unit;
}
}
function http_log(string $message, ...$params): void
{
if (PHP_SAPI != 'cli-server' && !LOG_FILE) {
return;
}
$msg = vsprintf($message, $params) . "\n\n";
if (PHP_SAPI == 'cli-server') {
file_put_contents('php://stderr', $msg);
}
if (LOG_FILE) {
file_put_contents(LOG_FILE, $msg, FILE_APPEND);
}
}

View file

@ -10,9 +10,16 @@ $s = new Server;
$method = $_SERVER['REQUEST_METHOD'] ?? $_SERVER['REDIRECT_REQUEST_METHOD'];
$qs = $_SERVER['QUERY_STRING'] ?? null;
$s->dav->log("<= %s %s", $method, $uri . ($qs ? '?' : '') . $qs);
$s->dav->log('%s', print_r(apache_request_headers(), true));
$s->dav->log('%s', $_SERVER['PHP_AUTH_USER'] ?? 'not logged in');
$headers = apache_request_headers();
http_log("===== ROUTER: Got new request: %s from %s =====", date('d/m/Y H:i:s'), $_SERVER['REMOTE_ADDR']);
http_log("ROUTER: <= %s %s (User: %s)\nRequest headers:\n %s",
$method,
$uri . ($qs ? '?' : '') . $qs,
$_SERVER['PHP_AUTH_USER'] ?? 'none',
implode("\n ", array_map(fn ($v, $k) => $k . ': ' . $v, $headers, array_keys($headers)))
);
if (PHP_SAPI == 'cli-server') {
if (is_file(__DIR__ . '/' . $uri)) {
@ -23,8 +30,8 @@ if (PHP_SAPI == 'cli-server') {
return false;
}
if ($method != 'GET' && $method != 'HEAD') {
$s->dav->log('%s', file_get_contents('php://input'));
if ($method == 'PROPPATCH' || $method == 'PROPFIND') {
http_log("ROUTER: <= Request body:\n%s", file_get_contents('php://input'));
}
}
@ -34,12 +41,12 @@ if (isset($_SERVER['REDIRECT_REQUEST_METHOD'])) {
if (!$s->route($uri)) {
if (PHP_SAPI == 'cli-server') {
$s->dav->log("=> Router fail: 404");
$s->dav->log("ROUTER: => Route is not managed: 404");
}
http_response_code(404);
echo '<h1>Invalid URL</h1>';
}
else {
$s->dav->log('=> %d %s', http_response_code(), print_r(headers_list(), true));
http_log("ROUTER: => %d\nResponse headers:\n %s", http_response_code(), implode("\n ", headers_list()));
}