|
4 | 4 |
|
5 | 5 | use Ramsey\Uuid\Uuid; |
6 | 6 | use Pterodactyl\Models\Egg; |
| 7 | +use Illuminate\Support\Arr; |
7 | 8 | use Illuminate\Http\UploadedFile; |
| 9 | +use Illuminate\Support\Collection; |
8 | 10 | use Illuminate\Database\ConnectionInterface; |
9 | 11 | use Pterodactyl\Contracts\Repository\EggRepositoryInterface; |
10 | 12 | use Pterodactyl\Contracts\Repository\NestRepositoryInterface; |
@@ -63,43 +65,47 @@ public function handle(UploadedFile $file, int $nest): Egg |
63 | 65 | throw new InvalidFileUploadException(sprintf('The selected file ["%s"] was not in a valid format to import. (is_file: %s is_valid: %s err_code: %s err: %s)', $file->getFilename(), $file->isFile() ? 'true' : 'false', $file->isValid() ? 'true' : 'false', $file->getError(), $file->getErrorMessage())); |
64 | 66 | } |
65 | 67 |
|
66 | | - $parsed = json_decode($file->openFile()->fread($file->getSize())); |
| 68 | + /** @var array $parsed */ |
| 69 | + $parsed = json_decode($file->openFile()->fread($file->getSize()), true); |
67 | 70 | if (json_last_error() !== 0) { |
68 | 71 | throw new BadJsonFormatException(trans('exceptions.nest.importer.json_error', ['error' => json_last_error_msg()])); |
69 | 72 | } |
70 | 73 |
|
71 | | - if (object_get($parsed, 'meta.version') !== 'PTDL_v1') { |
| 74 | + if (Arr::get($parsed, 'meta.version') !== 'PTDL_v1') { |
72 | 75 | throw new InvalidFileUploadException(trans('exceptions.nest.importer.invalid_json_provided')); |
73 | 76 | } |
74 | 77 |
|
75 | 78 | $nest = $this->nestRepository->getWithEggs($nest); |
76 | 79 | $this->connection->beginTransaction(); |
77 | 80 |
|
| 81 | + /** @var \Pterodactyl\Models\Egg $egg */ |
78 | 82 | $egg = $this->repository->create([ |
79 | 83 | 'uuid' => Uuid::uuid4()->toString(), |
80 | 84 | 'nest_id' => $nest->id, |
81 | | - 'author' => object_get($parsed, 'author'), |
82 | | - 'name' => object_get($parsed, 'name'), |
83 | | - 'description' => object_get($parsed, 'description'), |
84 | | - 'features' => object_get($parsed, 'features'), |
| 85 | + 'author' => Arr::get($parsed, 'author'), |
| 86 | + 'name' => Arr::get($parsed, 'name'), |
| 87 | + 'description' => Arr::get($parsed, 'description'), |
| 88 | + 'features' => Arr::get($parsed, 'features'), |
85 | 89 | // Maintain backwards compatability for eggs that are still using the old single image |
86 | 90 | // string format. New eggs can provide an array of Docker images that can be used. |
87 | | - 'docker_images' => object_get($parsed, 'images') ?? [object_get($parsed, 'image')], |
88 | | - 'file_denylist' => implode(PHP_EOL, object_get($parsed, 'file_denylist') ?? []), |
89 | | - 'update_url' => object_get($parsed, 'meta.update_url'), |
90 | | - 'config_files' => object_get($parsed, 'config.files'), |
91 | | - 'config_startup' => object_get($parsed, 'config.startup'), |
92 | | - 'config_logs' => object_get($parsed, 'config.logs'), |
93 | | - 'config_stop' => object_get($parsed, 'config.stop'), |
94 | | - 'startup' => object_get($parsed, 'startup'), |
95 | | - 'script_install' => object_get($parsed, 'scripts.installation.script'), |
96 | | - 'script_entry' => object_get($parsed, 'scripts.installation.entrypoint'), |
97 | | - 'script_container' => object_get($parsed, 'scripts.installation.container'), |
| 91 | + 'docker_images' => Arr::get($parsed, 'images') ?? [Arr::get($parsed, 'image')], |
| 92 | + 'file_denylist' => Collection::make(Arr::get($parsed, 'file_denylist'))->filter(function ($value) { |
| 93 | + return !empty($value); |
| 94 | + }), |
| 95 | + 'update_url' => Arr::get($parsed, 'meta.update_url'), |
| 96 | + 'config_files' => Arr::get($parsed, 'config.files'), |
| 97 | + 'config_startup' => Arr::get($parsed, 'config.startup'), |
| 98 | + 'config_logs' => Arr::get($parsed, 'config.logs'), |
| 99 | + 'config_stop' => Arr::get($parsed, 'config.stop'), |
| 100 | + 'startup' => Arr::get($parsed, 'startup'), |
| 101 | + 'script_install' => Arr::get($parsed, 'scripts.installation.script'), |
| 102 | + 'script_entry' => Arr::get($parsed, 'scripts.installation.entrypoint'), |
| 103 | + 'script_container' => Arr::get($parsed, 'scripts.installation.container'), |
98 | 104 | 'copy_script_from' => null, |
99 | 105 | ], true, true); |
100 | 106 |
|
101 | | - collect($parsed->variables)->each(function ($variable) use ($egg) { |
102 | | - $this->eggVariableRepository->create(array_merge((array) $variable, [ |
| 107 | + Collection::make($parsed['variables'] ?? [])->each(function (array $variable) use ($egg) { |
| 108 | + $this->eggVariableRepository->create(array_merge($variable, [ |
103 | 109 | 'egg_id' => $egg->id, |
104 | 110 | ])); |
105 | 111 | }); |
|
0 commit comments