From 21e0220716e718e3f0d264eadc9601e47fc88f20 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 1 Dec 2023 23:42:39 +0100 Subject: [PATCH] files: update parsing --- www/files/index.php | 68 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/www/files/index.php b/www/files/index.php index c223efc..853cbdd 100644 --- a/www/files/index.php +++ b/www/files/index.php @@ -2,7 +2,20 @@ require "../format.inc"; $TITLE = 'Downloads'; -if ($_SERVER['PATH_INFO'] !== '') { +global $getProd; +global $getVers; +$getProd = null; +$getVers = null; +$info = explode('/', $_SERVER['PATH_INFO']); +if ($info[1] === 'elwig' || $info[1] === 'winziprint') { + $getProd = $info[1]; + $getVers = $info[2]; + if (sizeof($info) > 3) { + header('Status: 404'); + header('Content-Length: 0'); + exit(); + } +} else if ($_SERVER['PATH_INFO'] !== '') { header('Status: 404'); header('Content-Length: 0'); exit(); @@ -14,37 +27,68 @@ foreach (scandir('.') as $file) { $files[$file] = [filesize($file), filemtime($file), filectime($file)]; } +$entities = []; +foreach ($files as $name => [$size, $mtime, $ctime]) { + $p1 = strrpos($name, '-') + 1; + $p2 = strrpos($name, '.'); + $vers = substr($name, $p1, $p2 - $p1); + $url = "https://www.necronda.net/elwig/files/$name"; + $mod = date(DATE_ATOM, $mtime); + $cre = date(DATE_ATOM, $ctime); + $prod = strtolower(substr($name, 0, $p1 - 1)); + $entities[$name] = [ + $prod, + $vers, + $url, + $size, + $mtime, + $ctime, + $mod, + $cre + ]; +} +$versions = []; +if ($getVers === 'latest') { + foreach ($entities as $name => [$prod, $vers, $url, $size, $mtime, $ctime, $mod, $cre]) { + $versions[$prod] = $vers; + } +} +$entities = array_filter($entities, function($e) { + global $getProd; + global $getVers; + return (empty($getProd) || $getProd === $e[0]) && (empty($getVers) || $getVers === $e[1]); +}); + $format = get_fmt(); if ($format === 'json') { header('Content-Type: application/json; charset=UTF-8'); echo "{\"status\": \"success\", \"data\": [\n"; $first = true; - foreach ($files as $name => [$size, $mtime, $ctime]) { + foreach ($entities as $name => [$prod, $vers, $url, $size, $mtime, $ctime, $mod, $cre]) { if (!$first) echo ",\n"; - $p1 = strrpos($name, '-') + 1; - $p2 = strrpos($name, '.'); - $vers = substr($name, $p1, $p2 - $p1); - $url = "https://www.necronda.net/elwig/files/$name"; - $mod = date(DATE_ATOM, $mtime); - $cre = date(DATE_ATOM, $ctime); - echo " {\"version\": \"$vers\", \"name\": \"$name\", \"url\": \"$url\", \"size\": $size, \"created\": \"$cre\", \"modified\": \"$mod\"}"; + echo " {\"product\": \"$prod\", \"version\": \"$vers\", \"name\": \"$name\", \"url\": \"$url\", \"size\": $size, \"created\": \"$cre\", \"modified\": \"$mod\"}"; $first = false; } echo "\n]}\n"; } else if ($format === 'text') { header('Content-Type: text/plain; charset=UTF-8'); - foreach ($files as $name => [$size, $mtime, $ctime]) { + foreach ($entities as $name => [$prod, $vers, $url, $size, $mtime, $ctime, $mod, $cre]) { echo "$name\t" . number_format($size / 1024 / 1024, 1) . " MB\n"; } } else if ($format === 'html') { + if (isset($getProd) && isset($getVers) && sizeof($entities) === 1) { + header('Status: 303'); + header('Location: ' . $entities[array_key_first($entities)][2]); + exit(); + } header('Content-Type: text/html; charset=UTF-8'); require "../header.inc"; ?>

Downloads

- [$size, $mtime, $ctime]) { - echo " \n"; + [$prod, $vers, $url, $size, $mtime, $ctime, $mod, $cre]) { + echo " \n"; } ?>
NameGröße
$name" . number_format($size / 1024 / 1024, 1) . " MB
$name" . number_format($size / 1024 / 1024, 1) . " MB