Upload via GUI (34 Dateien)

This commit is contained in:
2026-11-05 21:22:26 +00:00
parent 752b42245a
commit c0b4092498
8 changed files with 447 additions and 20 deletions
+25 -3
View File
@@ -116,6 +116,7 @@ function site_app_platforms(): array
'minecraft' => ['label' => 'Minecraft', 'what' => 'Plugin (JAR)', 'ext' => 'jar', 'magic' => 'PK', 'file' => 'DeskHub-Minecraft.jar', 'mime' => 'application/java-archive'],
'wordpress' => ['label' => 'WordPress', 'what' => 'Plugin (ZIP)', 'ext' => 'zip', 'magic' => 'PK', 'file' => 'deskhub-tickets-wordpress.zip', 'mime' => 'application/zip'],
'chrome' => ['label' => 'Chrome', 'what' => 'Erweiterung (ZIP)', 'ext' => 'zip', 'magic' => 'PK', 'file' => 'deskhub-chrome-erweiterung.zip', 'mime' => 'application/zip'],
'server' => ['label' => 'DeskHub-Server', 'what' => 'System-Update (ZIP des Projekts)', 'ext' => 'zip', 'magic' => 'PK', 'file' => 'deskhub-update.zip', 'mime' => 'application/zip'],
];
}
@@ -142,6 +143,8 @@ function site_zip_app_version(string $platform, string $zipPath): ?string
if ($platform === 'chrome' && preg_match('#^(?:[^/]+/)?manifest\.json$#', $name)) {
$data = json_decode((string) $zip->getFromIndex($i), true);
if (is_array($data) && isset($data['manifest_version'], $data['version'])) $found = (string) $data['version'];
} elseif ($platform === 'server' && preg_match('#^(?:[^/]+/)?version\.php$#', $name)) {
if (preg_match("/define\s*\(\s*'DESKHUB_VERSION'\s*,\s*'(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)'/", (string) $zip->getFromIndex($i, 8192), $m)) $found = $m[1];
} elseif ($platform === 'wordpress' && preg_match('#\.php$#i', $name)) {
$head = (string) $zip->getFromIndex($i, 8192);
if (preg_match('/^[ \/*#@]*Plugin Name:/mi', $head) && preg_match('/^[ \/*#@]*Version:\s*([0-9][0-9A-Za-z.+-]*)/mi', $head, $m)) $found = $m[1];
@@ -164,6 +167,25 @@ function site_app_release(string $platform): ?array
return $rows[0];
}
/** Signatur für das System-Update (Nachricht wie includes/update_security.php). Leer, wenn kein Signierschlüssel eingerichtet ist. */
function site_sign_update(string $version, string $sha256): string
{
$key = site_signing_key();
if (!$key) return '';
openssl_sign("deskhub-update\n" . ltrim(trim($version), 'vV') . "\n" . strtolower($sha256), $sig, $key, OPENSSL_ALGO_SHA256);
return base64_encode($sig);
}
/** Alle Versionen einer Plattform, neueste zuerst. */
function site_app_versions(string $platform): array
{
$stmt = site_db()->prepare('SELECT * FROM app_releases WHERE platform = ?');
$stmt->execute([$platform]);
$rows = $stmt->fetchAll();
usort($rows, fn($a, $b) => version_compare($b['version'], $a['version']) ?: ((int) $b['id'] <=> (int) $a['id']));
return $rows;
}
function site_app_releases(): array
{
$rows = site_db()->query('SELECT * FROM app_releases')->fetchAll();
@@ -181,10 +203,10 @@ function site_publish_app(string $platform, string $tmp, string $version, string
if ($size < 1024 || $size > SITE_MAX_APP_BYTES) return ['ok' => false, 'error' => 'Die Datei muss zwischen 1 KB und 300 MB groß sein.'];
$head = (string) file_get_contents($tmp, false, null, 0, 2);
if ($head !== $kind['magic']) return ['ok' => false, 'error' => 'Dateityp passt nicht zur gewählten Plattform.'];
if (in_array($platform, ['wordpress', 'chrome'], true)) {
// Version steht im Paket (Plugin-Kopf bzw. manifest.json); eine eingetippte Nummer hat Vorrang
if (in_array($platform, ['wordpress', 'chrome', 'server'], true)) {
// Version steht im Paket (Plugin-Kopf, manifest.json bzw. version.php); eine eingetippte Nummer hat Vorrang
$inZip = site_zip_app_version($platform, $tmp);
if ($inZip === null) return ['ok' => false, 'error' => $platform === 'wordpress' ? 'Das ist kein WordPress-Plugin: In einer PHP-Datei fehlt der Kopf mit "Plugin Name:" und "Version:".' : 'Das ist keine Chrome-Erweiterung: manifest.json mit "version" fehlt.'];
if ($inZip === null) return ['ok' => false, 'error' => ['wordpress' => 'Das ist kein WordPress-Plugin: In einer PHP-Datei fehlt der Kopf mit "Plugin Name:" und "Version:".', 'chrome' => 'Das ist keine Chrome-Erweiterung: manifest.json mit "version" fehlt.', 'server' => 'Das ist kein DeskHub-Paket: version.php mit DESKHUB_VERSION fehlt.'][$platform]];
if ($version === '') $version = $inZip;
}
if (!preg_match('/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/', $version)) return ['ok' => false, 'error' => 'Bitte eine Versionsnummer wie 3.4.0 eingeben.'];