]> BookStack Code Mirror - system-cli/commitdiff
DownloadVendorCommand: Added check for ZIP file access 21/head
authorDan Brown <redacted>
Tue, 11 Mar 2025 23:42:54 +0000 (23:42 +0000)
committerDan Brown <redacted>
Tue, 11 Mar 2025 23:42:54 +0000 (23:42 +0000)
src/Commands/DownloadVendorCommand.php
tests/Commands/DownloadVendorCommandTest.php

index 2f8e927ff9bffff574ad849ede36b8d7925bb862..7c18fed653aed596befc15389256897fbd2afe9f 100644 (file)
@@ -123,7 +123,12 @@ class DownloadVendorCommand extends Command
         $tempFile = tempnam(sys_get_temp_dir(), 'bs-cli-vendor-zip');
         $targetUrl = "https://files.bookstackapp.com/vendor/{$version}.zip";
 
-        file_put_contents($tempFile, fopen($targetUrl, 'rb'));
+        $targetFile = @fopen($targetUrl, 'rb');
+        if ($targetFile === false) {
+            throw new CommandError("Failed to download ZIP file from $targetUrl");
+        }
+
+        file_put_contents($tempFile, $targetFile);
 
         return $tempFile;
     }
index cc5e730e22b3fcd1f85080526616bca03e549cf1..20a2fb829b7e4b73b4f012757f264b815a8ccb05 100644 (file)
@@ -66,4 +66,20 @@ class DownloadVendorCommandTest extends TestCase
         });
     }
 
+    public function test_command_fails_on_zip_not_found()
+    {
+        $this->withOwnBookStackFolder(function (string $basePath) {
+            file_put_contents("$basePath/version", 'v10.02');
+            mkdir("$basePath/dev/checksums", 0777, true);
+            file_put_contents("$basePath/dev/checksums/vendor", 'abc');
+
+            $result = $this->runCommand('download-vendor');
+
+            $result->assertErrorExit();
+            $result->assertStdoutContains('Downloading ZIP from files.bookstackapp.com...');
+            $result->assertStderrContains('Failed to download ZIP file from https://files.bookstackapp.com/vendor/v10.02.zip');
+
+            $this->assertDirectoryExists("$basePath/vendor/composer");
+        });
+    }
 }
\ No newline at end of file