diff --git a/CHANGELOG.md b/CHANGELOG.md index d74573ba2..f70fbeb7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project follows [Semantic Versioning](http://semver.org) guidelines. * New CLI command to disabled 2-Factor Authentication on an account if necessary. * Ability to delete users and locations via the CLI. * You can now require 2FA for all users, admins only, or at will using a simple configuration in the Admin CP. +* Added ability to export and import service options and their associated settings and environment variables via the Admin CP. ### Changed * Theme colors and login pages updated to give a more unique feel to the project. diff --git a/app/Services/Services/Options/InstallScriptUpdateService.php b/app/Services/Services/Options/InstallScriptUpdateService.php index abb7cfca1..7b302190e 100644 --- a/app/Services/Services/Options/InstallScriptUpdateService.php +++ b/app/Services/Services/Options/InstallScriptUpdateService.php @@ -40,7 +40,7 @@ class InstallScriptUpdateService * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException * @throws \Pterodactyl\Exceptions\Service\ServiceOption\InvalidCopyFromException */ - public function handle($option, array $data): void + public function handle($option, array $data) { if (! $option instanceof ServiceOption) { $option = $this->repository->find($option); diff --git a/app/Services/Services/Options/OptionUpdateService.php b/app/Services/Services/Options/OptionUpdateService.php index 73c69cc5d..1d2109de5 100644 --- a/app/Services/Services/Options/OptionUpdateService.php +++ b/app/Services/Services/Options/OptionUpdateService.php @@ -40,7 +40,7 @@ class OptionUpdateService * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException * @throws \Pterodactyl\Exceptions\Service\ServiceOption\NoParentConfigurationFoundException */ - public function handle($option, array $data): void + public function handle($option, array $data) { if (! $option instanceof ServiceOption) { $option = $this->repository->find($option); diff --git a/app/Services/Services/ServiceUpdateService.php b/app/Services/Services/ServiceUpdateService.php index 327c45aa7..c6f5e322f 100644 --- a/app/Services/Services/ServiceUpdateService.php +++ b/app/Services/Services/ServiceUpdateService.php @@ -36,7 +36,7 @@ class ServiceUpdateService * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ - public function handle(int $service, array $data): void + public function handle(int $service, array $data) { if (! is_null(array_get($data, 'author'))) { unset($data['author']); diff --git a/tests/Unit/Services/Services/Options/OptionCreationServiceTest.php b/tests/Unit/Services/Services/Options/OptionCreationServiceTest.php index c15db8f07..8238f858d 100644 --- a/tests/Unit/Services/Services/Options/OptionCreationServiceTest.php +++ b/tests/Unit/Services/Services/Options/OptionCreationServiceTest.php @@ -60,14 +60,16 @@ class OptionCreationServiceTest extends TestCase */ public function testCreateNewModelWithoutUsingConfigFrom() { - $model = factory(ServiceOption::class)->make(); + $model = factory(ServiceOption::class)->make([ + 'tag' => str_random(10), + ]); $this->config->shouldReceive('get')->with('pterodactyl.service.author')->once()->andReturn('test@example.com'); $this->uuid->shouldReceive('uuid4->toString')->withNoArgs()->once()->andReturn('uuid-string'); $this->repository->shouldReceive('create')->with([ 'name' => $model->name, - 'config_from' => null, 'tag' => 'test@example.com:' . $model->tag, + 'config_from' => null, 'uuid' => 'uuid-string', ], true, true)->once()->andReturn($model); diff --git a/tests/Unit/Services/Services/Sharing/ServiceOptionExporterServiceTest.php b/tests/Unit/Services/Services/Sharing/ServiceOptionExporterServiceTest.php index 381e1c015..aa5e35737 100644 --- a/tests/Unit/Services/Services/Sharing/ServiceOptionExporterServiceTest.php +++ b/tests/Unit/Services/Services/Sharing/ServiceOptionExporterServiceTest.php @@ -51,6 +51,9 @@ class ServiceOptionExporterServiceTest extends TestCase $this->service = new ServiceOptionExporterService($this->carbon, $this->repository); } + /** + * Test that a JSON structure is returned. + */ public function testJsonStructureIsExported() { $option = factory(ServiceOption::class)->make();