mirror of
https://github.com/pelican-dev/panel.git
synced 2025-11-08 12:29:26 +01:00
improve error handling for plugin.json loading
This commit is contained in:
parent
c7c1b8b88c
commit
10dd7b7b47
@ -8,7 +8,9 @@ use Exception;
|
|||||||
use Filament\Forms\Components\Component;
|
use Filament\Forms\Components\Component;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
|
use JsonException;
|
||||||
use Sushi\Sushi;
|
use Sushi\Sushi;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -97,41 +99,67 @@ class Plugin extends Model implements HasPluginSettings
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = File::json($path, JSON_THROW_ON_ERROR);
|
try {
|
||||||
|
$data = File::json($path, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
$panels = null;
|
$panels = null;
|
||||||
if (array_key_exists('panels', $data)) {
|
if (array_key_exists('panels', $data)) {
|
||||||
$panels = $data['panels'];
|
$panels = $data['panels'];
|
||||||
$panels = is_array($panels) ? implode(',', $panels) : $panels;
|
$panels = is_array($panels) ? implode(',', $panels) : $panels;
|
||||||
|
}
|
||||||
|
|
||||||
|
$composerPackages = null;
|
||||||
|
if (array_key_exists('composer_packages', $data)) {
|
||||||
|
$composerPackages = $data['composer_packages'];
|
||||||
|
$composerPackages = is_array($composerPackages) ? implode(',', $composerPackages) : $composerPackages;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'id' => $data['id'],
|
||||||
|
'name' => $data['name'],
|
||||||
|
'author' => $data['author'],
|
||||||
|
'version' => Arr::get($data, 'version', '1.0.0'),
|
||||||
|
'description' => Arr::get($data, 'description', null),
|
||||||
|
'category' => Arr::get($data, 'category', null),
|
||||||
|
'url' => Arr::get($data, 'url', null),
|
||||||
|
'update_url' => Arr::get($data, 'update_url', null),
|
||||||
|
'namespace' => $data['namespace'],
|
||||||
|
'class' => $data['class'],
|
||||||
|
'panels' => $panels,
|
||||||
|
'panel_version' => Arr::get($data, 'update_url', null),
|
||||||
|
'composer_packages' => $composerPackages,
|
||||||
|
|
||||||
|
'status' => Arr::get($data, 'meta.status', PluginStatus::NotInstalled->value),
|
||||||
|
'status_message' => Arr::get($data, 'meta.status_message', null),
|
||||||
|
'load_order' => Arr::integer($data, 'meta.load_order', 0),
|
||||||
|
];
|
||||||
|
|
||||||
|
$plugins[] = $data;
|
||||||
|
} catch (Exception $exception) {
|
||||||
|
report($exception);
|
||||||
|
|
||||||
|
if (!$exception instanceof JsonException) {
|
||||||
|
$plugins[] = [
|
||||||
|
'id' => $data['id'] ?? Str::uuid(),
|
||||||
|
'name' => $data['name'] ?? 'Invalid Plugin',
|
||||||
|
'author' => $data['author'] ?? 'Unknown',
|
||||||
|
'version' => '0.0.0',
|
||||||
|
'description' => 'Plugin.json is invalid!',
|
||||||
|
'category' => 'invalid',
|
||||||
|
'url' => null,
|
||||||
|
'update_url' => null,
|
||||||
|
'namespace' => 'Error',
|
||||||
|
'class' => 'Error',
|
||||||
|
'panels' => null,
|
||||||
|
'panel_version' => null,
|
||||||
|
'composer_packages' => null,
|
||||||
|
|
||||||
|
'status' => PluginStatus::Errored->value,
|
||||||
|
'status_message' => $exception->getMessage(),
|
||||||
|
'load_order' => 0,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$composerPackages = null;
|
|
||||||
if (array_key_exists('composer_packages', $data)) {
|
|
||||||
$composerPackages = $data['composer_packages'];
|
|
||||||
$composerPackages = is_array($composerPackages) ? implode(',', $composerPackages) : $composerPackages;
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'id' => $data['id'],
|
|
||||||
'name' => $data['name'],
|
|
||||||
'author' => $data['author'],
|
|
||||||
'version' => Arr::get($data, 'version', '1.0.0'),
|
|
||||||
'description' => Arr::get($data, 'description', null),
|
|
||||||
'category' => Arr::get($data, 'category', null),
|
|
||||||
'url' => Arr::get($data, 'url', null),
|
|
||||||
'update_url' => Arr::get($data, 'update_url', null),
|
|
||||||
'namespace' => $data['namespace'],
|
|
||||||
'class' => $data['class'],
|
|
||||||
'panels' => $panels,
|
|
||||||
'panel_version' => Arr::get($data, 'update_url', null),
|
|
||||||
'composer_packages' => $composerPackages,
|
|
||||||
|
|
||||||
'status' => Arr::get($data, 'meta.status', PluginStatus::NotInstalled->value),
|
|
||||||
'status_message' => Arr::get($data, 'meta.status_message', null),
|
|
||||||
'load_order' => Arr::integer($data, 'meta.load_order', 0),
|
|
||||||
];
|
|
||||||
|
|
||||||
$plugins[] = $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $plugins;
|
return $plugins;
|
||||||
|
|||||||
@ -188,11 +188,13 @@ class PluginService
|
|||||||
$plugin = $plugin instanceof Plugin ? $plugin->id : $plugin;
|
$plugin = $plugin instanceof Plugin ? $plugin->id : $plugin;
|
||||||
$path = plugin_path($plugin, 'plugin.json');
|
$path = plugin_path($plugin, 'plugin.json');
|
||||||
|
|
||||||
$pluginData = File::json($path, JSON_THROW_ON_ERROR);
|
if (File::exists($path)) {
|
||||||
$metaData = array_merge($pluginData['meta'] ?? [], $data);
|
$pluginData = File::json($path, JSON_THROW_ON_ERROR);
|
||||||
$pluginData['meta'] = $metaData;
|
$metaData = array_merge($pluginData['meta'] ?? [], $data);
|
||||||
|
$pluginData['meta'] = $metaData;
|
||||||
|
|
||||||
File::put($path, json_encode($pluginData, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
|
File::put($path, json_encode($pluginData, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setStatus(string|Plugin $plugin, PluginStatus $status, ?string $message = null): void
|
private function setStatus(string|Plugin $plugin, PluginStatus $status, ?string $message = null): void
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user