Don't trigger a 500 error due to unchecked data being inserted; closes #2087

This also clears up allowed values for the disk input and normalizes the messaging between edit and create screens.
This commit is contained in:
Dane Everitt 2020-06-23 20:24:09 -07:00
parent 497f73d820
commit 4a0627d182
No known key found for this signature in database
GPG Key ID: EEA66103B3D71F53
4 changed files with 20 additions and 14 deletions

View File

@ -15,9 +15,11 @@ use Pterodactyl\Models\Server;
use Prologue\Alerts\AlertsMessageBag; use Prologue\Alerts\AlertsMessageBag;
use Pterodactyl\Exceptions\DisplayException; use Pterodactyl\Exceptions\DisplayException;
use Pterodactyl\Http\Controllers\Controller; use Pterodactyl\Http\Controllers\Controller;
use Illuminate\Validation\ValidationException;
use Pterodactyl\Services\Servers\SuspensionService; use Pterodactyl\Services\Servers\SuspensionService;
use Pterodactyl\Services\Servers\ServerDeletionService; use Pterodactyl\Services\Servers\ServerDeletionService;
use Pterodactyl\Services\Servers\ReinstallServerService; use Pterodactyl\Services\Servers\ReinstallServerService;
use Pterodactyl\Exceptions\Model\DataValidationException;
use Pterodactyl\Services\Servers\BuildModificationService; use Pterodactyl\Services\Servers\BuildModificationService;
use Pterodactyl\Services\Databases\DatabasePasswordService; use Pterodactyl\Services\Databases\DatabasePasswordService;
use Pterodactyl\Services\Servers\DetailsModificationService; use Pterodactyl\Services\Servers\DetailsModificationService;
@ -255,16 +257,21 @@ class ServersController extends Controller
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse
* *
* @throws \Pterodactyl\Exceptions\DisplayException * @throws \Pterodactyl\Exceptions\DisplayException
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
* @throws \Illuminate\Validation\ValidationException
*/ */
public function updateBuild(Request $request, Server $server) public function updateBuild(Request $request, Server $server)
{ {
$this->buildModificationService->handle($server, $request->only([ try {
'allocation_id', 'add_allocations', 'remove_allocations', $this->buildModificationService->handle($server, $request->only([
'memory', 'swap', 'io', 'cpu', 'threads', 'disk', 'allocation_id', 'add_allocations', 'remove_allocations',
'database_limit', 'allocation_limit', 'backup_limit', 'oom_disabled', 'memory', 'swap', 'io', 'cpu', 'threads', 'disk',
])); 'database_limit', 'allocation_limit', 'backup_limit', 'oom_disabled',
]));
} catch (DataValidationException $exception) {
throw new ValidationException($exception->validator);
}
$this->alert->success(trans('admin/server.alerts.build_updated'))->flash(); $this->alert->success(trans('admin/server.alerts.build_updated'))->flash();
return redirect()->route('admin.servers.view.build', $server->id); return redirect()->route('admin.servers.view.build', $server->id);

View File

@ -71,8 +71,8 @@ class BuildModificationService
* @return \Pterodactyl\Models\Server * @return \Pterodactyl\Models\Server
* *
* @throws \Pterodactyl\Exceptions\DisplayException * @throws \Pterodactyl\Exceptions\DisplayException
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
*/ */
public function handle(Server $server, array $data) public function handle(Server $server, array $data)
{ {
@ -91,7 +91,7 @@ class BuildModificationService
} }
} }
/** @var \Pterodactyl\Models\Server $server */ /* @var \Pterodactyl\Models\Server $server */
$server = $this->repository->withFreshModel()->update($server->id, [ $server = $this->repository->withFreshModel()->update($server->id, [
'oom_disabled' => array_get($data, 'oom_disabled'), 'oom_disabled' => array_get($data, 'oom_disabled'),
'memory' => array_get($data, 'memory'), 'memory' => array_get($data, 'memory'),

View File

@ -176,6 +176,8 @@
<input type="text" id="pMemory" name="memory" class="form-control" value="{{ old('memory') }}" /> <input type="text" id="pMemory" name="memory" class="form-control" value="{{ old('memory') }}" />
<span class="input-group-addon">MB</span> <span class="input-group-addon">MB</span>
</div> </div>
<p class="text-muted small">The maximum amount of memory allowed for this container. Setting this to <code>0</code> will allow unlimited memory in a container.</p>
</div> </div>
<div class="form-group col-xs-6"> <div class="form-group col-xs-6">
@ -185,21 +187,18 @@
<input type="text" id="pSwap" name="swap" class="form-control" value="{{ old('swap', 0) }}" /> <input type="text" id="pSwap" name="swap" class="form-control" value="{{ old('swap', 0) }}" />
<span class="input-group-addon">MB</span> <span class="input-group-addon">MB</span>
</div> </div>
<p class="text-muted small">Setting this to <code>0</code> will disable swap space on this server. Setting to <code>-1</code> will allow unlimited swap.</p>
</div> </div>
</div> </div>
<div class="box-footer no-border no-pad-top no-pad-bottom">
<p class="text-muted small">If you do not want to assign swap space to a server, simply put <code>0</code> for the value, or <code>-1</code> to allow unlimited swap space. If you want to disable memory limiting on a server, simply enter <code>0</code> into the memory field.<p>
</div>
<div class="box-body row"> <div class="box-body row">
<div class="form-group col-xs-6"> <div class="form-group col-xs-6">
<label for="pDisk">Disk Space</label> <label for="pDisk">Disk Space</label>
<div class="input-group"> <div class="input-group">
<input type="text" id="pDisk" name="disk" class="form-control" value="{{ old('disk') }}" /> <input type="text" id="pDisk" name="disk" class="form-control" value="{{ old('disk') }}" />
<span class="input-group-addon">MB</span> <span class="input-group-addon">MB</span>
</div> </div>
<p class="text-muted small">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 <code>0</code> to allow unlimited disk usage.</p>
</div> </div>
<div class="form-group col-xs-6"> <div class="form-group col-xs-6">

View File

@ -66,7 +66,7 @@
<input type="text" name="disk" class="form-control" value="{{ old('disk', $server->disk) }}"/> <input type="text" name="disk" class="form-control" value="{{ old('disk', $server->disk) }}"/>
<span class="input-group-addon">MB</span> <span class="input-group-addon">MB</span>
</div> </div>
<p class="text-muted small">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.</p> <p class="text-muted small">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 <code>0</code> to allow unlimited disk usage.</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="io" class="control-label">Block IO Proportion</label> <label for="io" class="control-label">Block IO Proportion</label>