Modules: Improved install command based on testing

- Updated output to be clearer
- Added warning and confirmation to local install flow
- Adjusted module folder name creation
This commit is contained in:
Dan Brown
2026-03-06 09:28:46 +00:00
parent ec3dd856db
commit f2f76a3c56
3 changed files with 22 additions and 5 deletions

View File

@@ -268,7 +268,7 @@ class InstallModuleCommand extends Command
if ($isRemote) {
// Warning about fetching from source
$host = parse_url($location, PHP_URL_HOST);
$this->warn("This will download a module from {$host}. Modules can contain code which would have the ability to do anything on the BookStack host server.\nYou should only install modules from trusted sources.");
$this->warn("\nThis will download a module from: {$host}\n\nModules can contain code which would have the ability to do anything on the BookStack host server.\nYou should only install modules from trusted sources.");
$trustHost = $this->confirm('Are you sure you trust this source?');
if (!$trustHost) {
return null;
@@ -286,13 +286,20 @@ class InstallModuleCommand extends Command
return $this->downloadModuleFile($location);
}
// Validate file and get full location
// Validate the file and get the full location
$zipPath = realpath($location);
if (!$zipPath || !is_file($zipPath)) {
$this->error("ERROR: Module file not found at {$location}");
return null;
}
$this->warn("\nThis will install a module from: {$zipPath}\n\nModules can contain code which would have the ability to do anything on the BookStack host server.\nYou should only install modules from trusted sources.");
$trustHost = $this->confirm('Are you sure you want to install this module?');
if (!$trustHost) {
return null;
}
return $zipPath;
}

View File

@@ -44,7 +44,7 @@ class ThemeModuleManager
*/
public function addFromZip(string $name, ThemeModuleZip $zip): ThemeModule
{
$baseFolderName = Str::limit(Str::slug($name), 20);
$baseFolderName = Str::limit(Str::slug($name), 40, '');
$folderName = $baseFolderName;
while (!$baseFolderName || file_exists($this->modulesFolderPath . DIRECTORY_SEPARATOR . $folderName)) {
$folderName = ($baseFolderName ?: 'mod') . '-' . Str::random(4);