From d1199e59e6c544f740db19621c8ee9d407d1a8d4 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sun, 15 Aug 2021 17:15:05 -0700 Subject: [PATCH 1/8] Fix php-cs-fixer inspection in phpstorm --- .php_cs.dist => .php-cs-fixer.dist.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .php_cs.dist => .php-cs-fixer.dist.php (100%) diff --git a/.php_cs.dist b/.php-cs-fixer.dist.php similarity index 100% rename from .php_cs.dist rename to .php-cs-fixer.dist.php From 25d9ba4779755875b369dfaf9c6fe91d360c67ef Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sun, 15 Aug 2021 17:20:36 -0700 Subject: [PATCH 2/8] Run php-cs-fixer --- .php-cs-fixer.dist.php | 10 +++++++++- .../Api/Client/Servers/BackupController.php | 2 +- .../Client/Servers/ResourceUtilizationController.php | 6 ------ .../Api/Remote/Servers/ServerDetailsController.php | 1 - .../Api/Remote/Servers/ServerInstallController.php | 2 +- app/Models/Backup.php | 2 +- app/Repositories/Eloquent/BackupRepository.php | 2 -- app/Services/Backups/InitiateBackupService.php | 5 ----- config/database.php | 2 +- config/services.php | 2 +- ...21_02_23_205021_add_index_for_server_and_action.php | 4 ++-- .../2021_02_23_212657_make_sftp_port_unsigned_int.php | 4 ++-- ...force_cron_month_field_to_have_value_if_missing.php | 4 ++-- ..._092457_add_continue_on_failure_option_to_tasks.php | 4 ++-- ...only_run_when_server_online_option_to_schedules.php | 4 ++-- ...1_05_03_201016_add_support_for_locking_a_backup.php | 4 ++-- .../2021_07_12_013420_remove_userinteraction.php | 1 + .../Api/Client/ClientApiIntegrationTestCase.php | 1 - .../ScheduleTask/CreateServerScheduleTaskTest.php | 2 +- tests/Integration/Jobs/Schedule/RunTaskJobTest.php | 5 ++--- .../Services/Servers/BuildModificationServiceTest.php | 1 - 21 files changed, 30 insertions(+), 38 deletions(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 97d0c648f..7c7676810 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -3,7 +3,15 @@ use PhpCsFixer\Config; use PhpCsFixer\Finder; -$finder = (new Finder())->in(__DIR__)->exclude(['vendor', 'node_modules', 'storage', 'bootstrap/cache']); +$finder = (new Finder()) + ->in(__DIR__) + ->exclude([ + 'vendor', + 'node_modules', + 'storage', + 'bootstrap/cache', + ]) + ->notName(['_ide_helper*']); return (new Config()) ->setRiskyAllowed(true) diff --git a/app/Http/Controllers/Api/Client/Servers/BackupController.php b/app/Http/Controllers/Api/Client/Servers/BackupController.php index 7f4c63808..67b54cd28 100644 --- a/app/Http/Controllers/Api/Client/Servers/BackupController.php +++ b/app/Http/Controllers/Api/Client/Servers/BackupController.php @@ -11,8 +11,8 @@ use Pterodactyl\Models\Permission; use Illuminate\Auth\Access\AuthorizationException; use Pterodactyl\Services\Backups\DeleteBackupService; use Pterodactyl\Services\Backups\DownloadLinkService; -use Pterodactyl\Services\Backups\InitiateBackupService; use Pterodactyl\Repositories\Eloquent\BackupRepository; +use Pterodactyl\Services\Backups\InitiateBackupService; use Pterodactyl\Repositories\Wings\DaemonBackupRepository; use Pterodactyl\Transformers\Api\Client\BackupTransformer; use Pterodactyl\Http\Controllers\Api\Client\ClientApiController; diff --git a/app/Http/Controllers/Api/Client/Servers/ResourceUtilizationController.php b/app/Http/Controllers/Api/Client/Servers/ResourceUtilizationController.php index 5b80768b2..d28622392 100644 --- a/app/Http/Controllers/Api/Client/Servers/ResourceUtilizationController.php +++ b/app/Http/Controllers/Api/Client/Servers/ResourceUtilizationController.php @@ -12,14 +12,8 @@ use Pterodactyl\Http\Requests\Api\Client\Servers\GetServerRequest; class ResourceUtilizationController extends ClientApiController { - /** - * @var \Pterodactyl\Repositories\Wings\DaemonServerRepository - */ private DaemonServerRepository $repository; - /** - * @var \Illuminate\Cache\Repository - */ private Repository $cache; /** diff --git a/app/Http/Controllers/Api/Remote/Servers/ServerDetailsController.php b/app/Http/Controllers/Api/Remote/Servers/ServerDetailsController.php index 7e3790e78..6b49fafa3 100644 --- a/app/Http/Controllers/Api/Remote/Servers/ServerDetailsController.php +++ b/app/Http/Controllers/Api/Remote/Servers/ServerDetailsController.php @@ -93,7 +93,6 @@ class ServerDetailsController extends Controller * do not get incorrectly stuck in installing/restoring from backup states since * a Wings reboot would completely stop those processes. * - * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse * * @throws \Throwable diff --git a/app/Http/Controllers/Api/Remote/Servers/ServerInstallController.php b/app/Http/Controllers/Api/Remote/Servers/ServerInstallController.php index fc3e04b72..be67ee53a 100644 --- a/app/Http/Controllers/Api/Remote/Servers/ServerInstallController.php +++ b/app/Http/Controllers/Api/Remote/Servers/ServerInstallController.php @@ -8,9 +8,9 @@ use Pterodactyl\Models\Server; use Illuminate\Http\JsonResponse; use Pterodactyl\Http\Controllers\Controller; use Pterodactyl\Repositories\Eloquent\ServerRepository; -use Pterodactyl\Http\Requests\Api\Remote\InstallationDataRequest; use Pterodactyl\Events\Server\Installed as ServerInstalled; use Illuminate\Contracts\Events\Dispatcher as EventDispatcher; +use Pterodactyl\Http\Requests\Api\Remote\InstallationDataRequest; class ServerInstallController extends Controller { diff --git a/app/Models/Backup.php b/app/Models/Backup.php index 9ad03fd32..f608edc7a 100644 --- a/app/Models/Backup.php +++ b/app/Models/Backup.php @@ -107,6 +107,6 @@ class Backup extends Model { return $this->hasMany(AuditLog::class, 'metadata->backup_uuid', 'uuid') ->where('action', 'LIKE', 'server:backup.%'); - // ->where('metadata->backup_uuid', $this->uuid); + // ->where('metadata->backup_uuid', $this->uuid); } } diff --git a/app/Repositories/Eloquent/BackupRepository.php b/app/Repositories/Eloquent/BackupRepository.php index 7efdace06..051d0ce42 100644 --- a/app/Repositories/Eloquent/BackupRepository.php +++ b/app/Repositories/Eloquent/BackupRepository.php @@ -38,8 +38,6 @@ class BackupRepository extends EloquentRepository /** * Returns a query filtering only non-failed backups for a specific server. - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function getNonFailedBackups(Server $server): HasMany { diff --git a/app/Services/Backups/InitiateBackupService.php b/app/Services/Backups/InitiateBackupService.php index 8bad8f4f9..705bdf428 100644 --- a/app/Services/Backups/InitiateBackupService.php +++ b/app/Services/Backups/InitiateBackupService.php @@ -9,7 +9,6 @@ use Pterodactyl\Models\Backup; use Pterodactyl\Models\Server; use Illuminate\Database\ConnectionInterface; use Pterodactyl\Extensions\Backups\BackupManager; -use Illuminate\Database\Eloquent\Relations\HasMany; use Pterodactyl\Repositories\Eloquent\BackupRepository; use Pterodactyl\Repositories\Wings\DaemonBackupRepository; use Pterodactyl\Exceptions\Service\Backup\TooManyBackupsException; @@ -55,11 +54,7 @@ class InitiateBackupService /** * InitiateBackupService constructor. * - * @param \Pterodactyl\Repositories\Eloquent\BackupRepository $repository - * @param \Illuminate\Database\ConnectionInterface $connection - * @param \Pterodactyl\Repositories\Wings\DaemonBackupRepository $daemonBackupRepository * @param \Pterodactyl\Services\Backups\DeleteBackupService $deleteBackupService - * @param \Pterodactyl\Extensions\Backups\BackupManager $backupManager */ public function __construct( BackupRepository $repository, diff --git a/config/database.php b/config/database.php index 68f65a2e4..a4b01139c 100644 --- a/config/database.php +++ b/config/database.php @@ -111,7 +111,7 @@ return [ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), ], 'default' => [ diff --git a/config/services.php b/config/services.php index b15f7bf02..39b8116c7 100644 --- a/config/services.php +++ b/config/services.php @@ -16,7 +16,7 @@ return [ 'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), - 'endpoint' => env('MAILGUN_ENDPOINT') + 'endpoint' => env('MAILGUN_ENDPOINT'), ], 'mandrill' => [ diff --git a/database/migrations/2021_02_23_205021_add_index_for_server_and_action.php b/database/migrations/2021_02_23_205021_add_index_for_server_and_action.php index 9bf0a34e3..888125468 100644 --- a/database/migrations/2021_02_23_205021_add_index_for_server_and_action.php +++ b/database/migrations/2021_02_23_205021_add_index_for_server_and_action.php @@ -1,8 +1,8 @@ Date: Sun, 15 Aug 2021 17:37:12 -0700 Subject: [PATCH 3/8] Fix changing a user password to not incorrectly handle logging out old sessions; closes #3531 --- .../Api/Client/AccountController.php | 11 ++++++--- .../Api/Client/Account/UpdateEmailRequest.php | 6 ++++- .../Client/Account/UpdatePasswordRequest.php | 6 ++++- app/Services/Users/UserUpdateService.php | 23 +++++-------------- .../Api/Client/AccountControllerTest.php | 14 ++++++----- 5 files changed, 32 insertions(+), 28 deletions(-) diff --git a/app/Http/Controllers/Api/Client/AccountController.php b/app/Http/Controllers/Api/Client/AccountController.php index 5e790d474..ead296d3c 100644 --- a/app/Http/Controllers/Api/Client/AccountController.php +++ b/app/Http/Controllers/Api/Client/AccountController.php @@ -58,12 +58,17 @@ class AccountController extends ClientApiController * Update the authenticated user's password. All existing sessions will be logged * out immediately. * - * @throws \Pterodactyl\Exceptions\Model\DataValidationException - * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException + * @throws \Throwable */ public function updatePassword(UpdatePasswordRequest $request): JsonResponse { - $this->updateService->handle($request->user(), $request->validated()); + $user = $this->updateService->handle($request->user(), $request->validated()); + + // If you do not update the user in the session you'll end up working with a + // cached copy of the user that does not include the updated password. Do this + // to correctly store the new user details in the guard and allow the logout + // other devices functionality to work. + $this->sessionGuard->setUser($user); $this->sessionGuard->logoutOtherDevices($request->input('password')); diff --git a/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php b/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php index 193d2fd70..6287ba585 100644 --- a/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php +++ b/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php @@ -3,6 +3,8 @@ namespace Pterodactyl\Http\Requests\Api\Client\Account; use Pterodactyl\Models\User; +use Illuminate\Container\Container; +use Illuminate\Contracts\Hashing\Hasher; use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest; use Pterodactyl\Exceptions\Http\Base\InvalidPasswordProvidedException; @@ -17,8 +19,10 @@ class UpdateEmailRequest extends ClientApiRequest return false; } + $hasher = Container::getInstance()->make(Hasher::class); + // Verify password matches when changing password or email. - if (!password_verify($this->input('password'), $this->user()->password)) { + if (!$hasher->check($this->input('password'), $this->user()->password)) { throw new InvalidPasswordProvidedException(trans('validation.internal.invalid_password')); } diff --git a/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php b/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php index c0e27bdb5..de8215b07 100644 --- a/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php +++ b/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php @@ -2,6 +2,8 @@ namespace Pterodactyl\Http\Requests\Api\Client\Account; +use Illuminate\Container\Container; +use Illuminate\Contracts\Hashing\Hasher; use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest; use Pterodactyl\Exceptions\Http\Base\InvalidPasswordProvidedException; @@ -16,8 +18,10 @@ class UpdatePasswordRequest extends ClientApiRequest return false; } + $hasher = Container::getInstance()->make(Hasher::class); + // Verify password matches when changing password or email. - if (!password_verify($this->input('current_password'), $this->user()->password)) { + if (!$hasher->check($this->input('current_password'), $this->user()->password)) { throw new InvalidPasswordProvidedException(trans('validation.internal.invalid_password')); } diff --git a/app/Services/Users/UserUpdateService.php b/app/Services/Users/UserUpdateService.php index 0c7e1c172..31f4010b6 100644 --- a/app/Services/Users/UserUpdateService.php +++ b/app/Services/Users/UserUpdateService.php @@ -5,7 +5,6 @@ namespace Pterodactyl\Services\Users; use Pterodactyl\Models\User; use Illuminate\Contracts\Hashing\Hasher; use Pterodactyl\Traits\Services\HasUserLevels; -use Pterodactyl\Repositories\Eloquent\UserRepository; class UserUpdateService { @@ -16,29 +15,20 @@ class UserUpdateService */ private $hasher; - /** - * @var \Pterodactyl\Repositories\Eloquent\UserRepository - */ - private $repository; - /** * UpdateService constructor. */ - public function __construct(Hasher $hasher, UserRepository $repository) + public function __construct(Hasher $hasher) { $this->hasher = $hasher; - $this->repository = $repository; } /** - * Update the user model instance. + * Update the user model instance and return the updated model. * - * @return \Pterodactyl\Models\User - * - * @throws \Pterodactyl\Exceptions\Model\DataValidationException - * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException + * @throws \Throwable */ - public function handle(User $user, array $data) + public function handle(User $user, array $data): User { if (!empty(array_get($data, 'password'))) { $data['password'] = $this->hasher->make($data['password']); @@ -46,9 +36,8 @@ class UserUpdateService unset($data['password']); } - /** @var \Pterodactyl\Models\User $response */ - $response = $this->repository->update($user->id, $data); + $user->forceFill($data)->saveOrFail(); - return $response; + return $user->refresh(); } } diff --git a/tests/Integration/Api/Client/AccountControllerTest.php b/tests/Integration/Api/Client/AccountControllerTest.php index 3ed689ef9..971b83421 100644 --- a/tests/Integration/Api/Client/AccountControllerTest.php +++ b/tests/Integration/Api/Client/AccountControllerTest.php @@ -2,10 +2,9 @@ namespace Pterodactyl\Tests\Integration\Api\Client; -use Mockery; use Pterodactyl\Models\User; use Illuminate\Http\Response; -use Illuminate\Auth\AuthManager; +use Illuminate\Support\Facades\Hash; class AccountControllerTest extends ClientApiIntegrationTestCase { @@ -106,10 +105,7 @@ class AccountControllerTest extends ClientApiIntegrationTestCase /** @var \Pterodactyl\Models\User $user */ $user = User::factory()->create(); - $mock = Mockery::mock(AuthManager::class); - $mock->expects('logoutOtherDevices')->with('New_Password1'); - - $this->app->instance(AuthManager::class, $mock); + $initialHash = $user->password; $response = $this->actingAs($user)->putJson('/api/client/account/password', [ 'current_password' => 'password', @@ -117,6 +113,12 @@ class AccountControllerTest extends ClientApiIntegrationTestCase 'password_confirmation' => 'New_Password1', ]); + $user = $user->refresh(); + + $this->assertNotEquals($user->password, $initialHash); + $this->assertTrue(Hash::check('New_Password1', $user->password)); + $this->assertFalse(Hash::check('password', $user->password)); + $response->assertStatus(Response::HTTP_NO_CONTENT); } From ddf43bb4c5282e3ae56973eaa8170e0e923fe74b Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sun, 15 Aug 2021 18:32:40 -0700 Subject: [PATCH 4/8] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 333a9b226..42e02d5c0 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ I would like to extend my sincere thanks to the following sponsors for helping f | [**ByteAnia**](https://byteania.com/?utm_source=pterodactyl) | ByteAnia offers the best performing and most affordable **Ryzen 5000 Series hosting** on the market for *unbeatable prices*! | | [**Aussie Server Hosts**](https://aussieserverhosts.com/) | No frills Australian Owned and operated High Performance Server hosting for some of the most demanding games serving Australia and New Zealand. | | [**VibeGAMES**](https://vibegames.net/) | VibeGAMES is a game server provider that specializes in DDOS protection for the games we offer. We have multiple locations in the US, Brazil, France, Germany, Singapore, Australia and South Africa.| +| [**RocketNode**](https://rocketnode.net) | RocketNode is a VPS and Game Server provider that offers the best performing VPS and Game hosting Solutions at affordable prices! | ## Documentation * [Panel Documentation](https://pterodactyl.io/panel/1.0/getting_started.html) From 5d41ac09fdf7fe36ae26dfbef642c72d8db2e152 Mon Sep 17 00:00:00 2001 From: Cam White <72230943+JexUK@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:48:06 +0100 Subject: [PATCH 5/8] Grammatical fix on SetupTwoFactorModal (#3549) --- .../components/dashboard/forms/SetupTwoFactorModal.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/scripts/components/dashboard/forms/SetupTwoFactorModal.tsx b/resources/scripts/components/dashboard/forms/SetupTwoFactorModal.tsx index 4bb73f368..aea603995 100644 --- a/resources/scripts/components/dashboard/forms/SetupTwoFactorModal.tsx +++ b/resources/scripts/components/dashboard/forms/SetupTwoFactorModal.tsx @@ -80,8 +80,8 @@ const SetupTwoFactorModal = () => { <>

Two-factor authentication enabled

- Two-factor authentication has been enabled on your account. Should you loose access to - this device you'll need to use one of the codes displayed below in order to access your + Two-factor authentication has been enabled on your account. Should you lose access to + your authenticator device, you'll need to use one of the codes displayed below in order to access your account.

From b94d69bbabebb302a30b23184aaf8cabef7c7a73 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 18 Aug 2021 21:32:45 +0300 Subject: [PATCH 6/8] Introduce OOM Killer to Server Creation (#3548) --- resources/views/admin/servers/new.blade.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/resources/views/admin/servers/new.blade.php b/resources/views/admin/servers/new.blade.php index 4fdf158bf..78333cb19 100644 --- a/resources/views/admin/servers/new.blade.php +++ b/resources/views/admin/servers/new.blade.php @@ -38,6 +38,7 @@

+

Email address of the Server Owner.

@@ -164,7 +165,7 @@ -

Advanced: Enter the specific CPU cores that this process can run on, or leave blank to allow all cores. This can be a single number, or a comma seperated list. Example: 0, 0-1,3, or 0,1,3,4.

+

Advanced: Enter the specific CPU threads that this process can run on, or leave blank to allow all threads. This can be a single number, or a comma separated list. Example: 0, 0-1,3, or 0,1,3,4.

@@ -187,6 +188,7 @@ MB +

Setting this to 0 will disable swap space on this server. Setting to -1 will allow unlimited swap.

@@ -194,10 +196,12 @@
+
MB
+

This server will not be allowed to boot if it is using more than this amount of space. If a server goes over this limit while running it will be safely stopped and locked until enough space is available. Set to 0 to allow unlimited disk usage.

@@ -210,6 +214,14 @@

Advanced: The IO performance of this server relative to other running containers on the system. Value should be between 10 and 1000. Please see this documentation for more information about it.

+
+
+ + +
+ +

Terminates the server if it breaches the memory limits. Enabling OOM killer may cause server processes to exit unexpectedly.

+
From b4cae916ac1b62480d82e97dd421d8b7df9007d7 Mon Sep 17 00:00:00 2001 From: Matthew Penner Date: Wed, 18 Aug 2021 11:58:41 -0700 Subject: [PATCH 7/8] transfers: fix allocation array merging logic (#3551) --- .../Remote/Servers/ServerTransferController.php | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php b/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php index 9259c32d8..5962f307c 100644 --- a/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php +++ b/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php @@ -146,17 +146,14 @@ class ServerTransferController extends Controller * * @throws \Throwable */ - public function success(string $uuid) + public function success(string $uuid): JsonResponse { $server = $this->repository->getByUuid($uuid); $transfer = $server->transfer; /** @var \Pterodactyl\Models\Server $server */ $server = $this->connection->transaction(function () use ($server, $transfer) { - $allocations = [$transfer->old_allocation]; - if (!empty($transfer->old_additional_allocations)) { - array_push($allocations, $transfer->old_additional_allocations); - } + $allocations = array_merge([$transfer->old_allocation], $transfer->old_additional_allocations); // Remove the old allocations for the server and re-assign the server to the new // primary allocation and node. @@ -173,7 +170,7 @@ class ServerTransferController extends Controller }); // Delete the server from the old node making sure to point it to the old node so - // that we do not delete it from the new node the server was transfered to. + // that we do not delete it from the new node the server was transferred to. try { $this->daemonServerRepository ->setServer($server) @@ -199,11 +196,7 @@ class ServerTransferController extends Controller $this->connection->transaction(function () use (&$transfer) { $transfer->forceFill(['successful' => false])->saveOrFail(); - $allocations = [$transfer->new_allocation]; - if (!empty($transfer->new_additional_allocations)) { - array_push($allocations, $transfer->new_additional_allocations); - } - + $allocations = array_merge([$transfer->new_allocation], $transfer->new_additional_allocations); Allocation::query()->whereIn('id', $allocations)->update(['server_id' => null]); }); From b67aceb685b2a757ae45d65830941699eaaa0e77 Mon Sep 17 00:00:00 2001 From: Omar Kamel <30291302+TekExplorer@users.noreply.github.com> Date: Fri, 20 Aug 2021 13:07:05 -0400 Subject: [PATCH 8/8] Add environment variable for `per_schedule_task_limit` (#3557) The environment variable `PTERODACTYL_PER_SCHEDULE_TASK_LIMIT` can be used to change the maximum number of tasks per schedule. --- config/pterodactyl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/pterodactyl.php b/config/pterodactyl.php index db08688d3..b7cd12559 100644 --- a/config/pterodactyl.php +++ b/config/pterodactyl.php @@ -141,7 +141,7 @@ return [ 'schedules' => [ // The total number of tasks that can exist for any given schedule at once. - 'per_schedule_task_limit' => 10, + 'per_schedule_task_limit' => env('PTERODACTYL_PER_SCHEDULE_TASK_LIMIT', 10), ], 'allocations' => [