Finish front-end server modification changes.
Everything is back to the point that it was before this massive code overhaul began. FInal steps before merging this into develop will be some unit tests.
This commit is contained in:
parent
5fb4b2cdcf
commit
508ff8cfb3
|
@ -9,6 +9,16 @@
|
||||||
|
|
||||||
namespace Pterodactyl\Contracts\Repository;
|
namespace Pterodactyl\Contracts\Repository;
|
||||||
|
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
interface EggVariableRepositoryInterface extends RepositoryInterface
|
interface EggVariableRepositoryInterface extends RepositoryInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Return editable variables for a given egg. Editable variables must be set to
|
||||||
|
* user viewable in order to be picked up by this function.
|
||||||
|
*
|
||||||
|
* @param int $egg
|
||||||
|
* @return \Illuminate\Support\Collection
|
||||||
|
*/
|
||||||
|
public function getEditableVariables(int $egg): Collection;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
namespace Pterodactyl\Contracts\Repository;
|
namespace Pterodactyl\Contracts\Repository;
|
||||||
|
|
||||||
|
use Pterodactyl\Models\Server;
|
||||||
use Pterodactyl\Contracts\Repository\Attributes\SearchableInterface;
|
use Pterodactyl\Contracts\Repository\Attributes\SearchableInterface;
|
||||||
|
|
||||||
interface ServerRepositoryInterface extends RepositoryInterface, SearchableInterface
|
interface ServerRepositoryInterface extends RepositoryInterface, SearchableInterface
|
||||||
|
@ -52,6 +53,19 @@ interface ServerRepositoryInterface extends RepositoryInterface, SearchableInter
|
||||||
*/
|
*/
|
||||||
public function getVariablesWithValues($id, $returnAsObject = false);
|
public function getVariablesWithValues($id, $returnAsObject = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the primary allocation for a given server. If a model is passed into
|
||||||
|
* the function, load the allocation relationship onto it. Otherwise, find and
|
||||||
|
* return the server from the database.
|
||||||
|
*
|
||||||
|
* @param int|\Pterodactyl\Models\Server $server
|
||||||
|
* @param bool $refresh
|
||||||
|
* @return \Pterodactyl\Models\Server
|
||||||
|
*
|
||||||
|
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||||
|
*/
|
||||||
|
public function getPrimaryAllocation($server, bool $refresh = false): Server;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return enough data to be used for the creation of a server via the daemon.
|
* Return enough data to be used for the creation of a server via the daemon.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,163 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Pterodactyl - Panel
|
|
||||||
* Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
|
|
||||||
*
|
|
||||||
* This software is licensed under the terms of the MIT license.
|
|
||||||
* https://opensource.org/licenses/MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pterodactyl\Http\Controllers\Server;
|
|
||||||
|
|
||||||
use Log;
|
|
||||||
use Alert;
|
|
||||||
use Pterodactyl\Models;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Pterodactyl\Exceptions\DisplayException;
|
|
||||||
use Pterodactyl\Http\Controllers\Controller;
|
|
||||||
use Pterodactyl\Exceptions\DisplayValidationException;
|
|
||||||
|
|
||||||
class ServerController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Returns the allocation overview for a server.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param string $uuid
|
|
||||||
* @return \Illuminate\View\View
|
|
||||||
*/
|
|
||||||
public function getAllocation(Request $request, $uuid)
|
|
||||||
{
|
|
||||||
$server = Models\Server::byUuid($uuid);
|
|
||||||
$this->authorize('view-allocation', $server);
|
|
||||||
$server->js();
|
|
||||||
|
|
||||||
return view('server.settings.allocation', [
|
|
||||||
'server' => $server->load(['allocations' => function ($query) {
|
|
||||||
$query->orderBy('ip', 'asc');
|
|
||||||
$query->orderBy('port', 'asc');
|
|
||||||
}]),
|
|
||||||
'node' => $server->node,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the startup overview for a server.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param string $uuid
|
|
||||||
* @return \Illuminate\View\View
|
|
||||||
*/
|
|
||||||
public function getStartup(Request $request, $uuid)
|
|
||||||
{
|
|
||||||
$server = Models\Server::byUuid($uuid);
|
|
||||||
$this->authorize('view-startup', $server);
|
|
||||||
|
|
||||||
$server->load(['node', 'allocation', 'variables']);
|
|
||||||
$variables = Models\EggVariable::where('option_id', $server->option_id)->get();
|
|
||||||
|
|
||||||
$replacements = [
|
|
||||||
'{{SERVER_MEMORY}}' => $server->memory,
|
|
||||||
'{{SERVER_IP}}' => $server->allocation->ip,
|
|
||||||
'{{SERVER_PORT}}' => $server->allocation->port,
|
|
||||||
];
|
|
||||||
|
|
||||||
$processed = str_replace(array_keys($replacements), array_values($replacements), $server->startup);
|
|
||||||
|
|
||||||
foreach ($variables as $var) {
|
|
||||||
if ($var->user_viewable) {
|
|
||||||
$serverVar = $server->variables->where('variable_id', $var->id)->first();
|
|
||||||
$var->server_set_value = $serverVar->variable_value ?? $var->default_value;
|
|
||||||
} else {
|
|
||||||
$var->server_set_value = '[hidden]';
|
|
||||||
}
|
|
||||||
|
|
||||||
$processed = str_replace('{{' . $var->env_variable . '}}', $var->server_set_value, $processed);
|
|
||||||
}
|
|
||||||
|
|
||||||
$server->js();
|
|
||||||
|
|
||||||
return view('server.settings.startup', [
|
|
||||||
'server' => $server,
|
|
||||||
'node' => $server->node,
|
|
||||||
'variables' => $variables->where('user_viewable', 1),
|
|
||||||
'service' => $server->service,
|
|
||||||
'processedStartup' => $processed,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the SFTP overview for a server.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param string $uuid
|
|
||||||
* @return \Illuminate\View\View
|
|
||||||
*/
|
|
||||||
public function getSFTP(Request $request, $uuid)
|
|
||||||
{
|
|
||||||
$server = Models\Server::byUuid($uuid);
|
|
||||||
$this->authorize('view-sftp', $server);
|
|
||||||
$server->js();
|
|
||||||
|
|
||||||
return view('server.settings.sftp', [
|
|
||||||
'server' => $server,
|
|
||||||
'node' => $server->node,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles changing the SFTP password for a server.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param string $uuid
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*/
|
|
||||||
public function postSettingsSFTP(Request $request, $uuid)
|
|
||||||
{
|
|
||||||
$server = Models\Server::byUuid($uuid);
|
|
||||||
$this->authorize('reset-sftp', $server);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$repo = new ServerRepository;
|
|
||||||
$repo->updateSFTPPassword($server->id, $request->input('sftp_pass'));
|
|
||||||
Alert::success('Successfully updated this servers SFTP password.')->flash();
|
|
||||||
} catch (DisplayValidationException $ex) {
|
|
||||||
return redirect()->route('server.settings.sftp', $uuid)->withErrors(json_decode($ex->getMessage()));
|
|
||||||
} catch (DisplayException $ex) {
|
|
||||||
Alert::danger($ex->getMessage())->flash();
|
|
||||||
} catch (\Exception $ex) {
|
|
||||||
Log::error($ex);
|
|
||||||
Alert::danger('An unknown error occured while attempting to update this server\'s SFTP settings.')->flash();
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->route('server.settings.sftp', $uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles changing the startup settings for a server.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param string $uuid
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*/
|
|
||||||
public function postSettingsStartup(Request $request, $uuid)
|
|
||||||
{
|
|
||||||
$server = Models\Server::byUuid($uuid);
|
|
||||||
$this->authorize('edit-startup', $server);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$repo = new ServerRepository;
|
|
||||||
$repo->updateStartup($server->id, $request->except('_token'));
|
|
||||||
Alert::success('Server startup variables were successfully updated.')->flash();
|
|
||||||
} catch (DisplayValidationException $ex) {
|
|
||||||
return redirect()->route('server.settings.startup', $uuid)->withErrors(json_decode($ex->getMessage()));
|
|
||||||
} catch (DisplayException $ex) {
|
|
||||||
Alert::danger($ex->getMessage())->flash();
|
|
||||||
} catch (\Exception $ex) {
|
|
||||||
Log::error($ex);
|
|
||||||
Alert::danger('An unhandled exception occured while attemping to update startup variables for this server. Please try again.')->flash();
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->route('server.settings.startup', $uuid);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pterodactyl\Http\Controllers\Server\Settings;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
use Prologue\Alerts\AlertsMessageBag;
|
||||||
|
use Pterodactyl\Http\Controllers\Controller;
|
||||||
|
use Pterodactyl\Traits\Controllers\JavascriptInjection;
|
||||||
|
use Pterodactyl\Services\Servers\StartupCommandViewService;
|
||||||
|
use Pterodactyl\Services\Servers\StartupModificationService;
|
||||||
|
use Pterodactyl\Http\Requests\Server\UpdateStartupParametersFormRequest;
|
||||||
|
|
||||||
|
class StartupController extends Controller
|
||||||
|
{
|
||||||
|
use JavascriptInjection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Prologue\Alerts\AlertsMessageBag
|
||||||
|
*/
|
||||||
|
private $alert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Pterodactyl\Services\Servers\StartupCommandViewService
|
||||||
|
*/
|
||||||
|
private $commandViewService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Pterodactyl\Services\Servers\StartupModificationService
|
||||||
|
*/
|
||||||
|
private $modificationService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* StartupController constructor.
|
||||||
|
*
|
||||||
|
* @param \Prologue\Alerts\AlertsMessageBag $alert
|
||||||
|
* @param \Pterodactyl\Services\Servers\StartupCommandViewService $commandViewService
|
||||||
|
* @param \Pterodactyl\Services\Servers\StartupModificationService $modificationService
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
AlertsMessageBag $alert,
|
||||||
|
StartupCommandViewService $commandViewService,
|
||||||
|
StartupModificationService $modificationService
|
||||||
|
) {
|
||||||
|
$this->alert = $alert;
|
||||||
|
$this->commandViewService = $commandViewService;
|
||||||
|
$this->modificationService = $modificationService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render the server startup page.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\View\View
|
||||||
|
*
|
||||||
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
|
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$server = $request->attributes->get('server');
|
||||||
|
$this->authorize('view-startup', $server);
|
||||||
|
$this->injectJavascript();
|
||||||
|
|
||||||
|
$data = $this->commandViewService->handle($server->id);
|
||||||
|
|
||||||
|
return view('server.settings.startup', [
|
||||||
|
'variables' => $data->get('variables'),
|
||||||
|
'server_values' => $data->get('server_values'),
|
||||||
|
'startup' => $data->get('startup'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle request to update the startup variables for a server. Authorization
|
||||||
|
* is handled in the form request.
|
||||||
|
*
|
||||||
|
* @param \Pterodactyl\Http\Requests\Server\UpdateStartupParametersFormRequest $request
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
*
|
||||||
|
* @throws \Pterodactyl\Exceptions\DisplayException
|
||||||
|
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
|
||||||
|
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||||
|
*/
|
||||||
|
public function update(UpdateStartupParametersFormRequest $request): RedirectResponse
|
||||||
|
{
|
||||||
|
$this->modificationService->handle($request->attributes->get('server'), $request->normalize());
|
||||||
|
$this->alert->success(trans('server.config.startup.edited'))->flash();
|
||||||
|
|
||||||
|
return redirect()->route('server.settings.startup', ['server' => $request->attributes->get('server')->uuidShort]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pterodactyl\Http\Requests\Server;
|
||||||
|
|
||||||
|
use Pterodactyl\Http\Requests\FrontendUserFormRequest;
|
||||||
|
use Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface;
|
||||||
|
|
||||||
|
class UpdateStartupParametersFormRequest extends FrontendUserFormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $validationAttributes = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the user has permission to update the startup parameters
|
||||||
|
* for this server.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
if (! parent::authorize()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->user()->can('edit-startup', $this->attributes->get('server'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that all of the required fields were passed and that the environment
|
||||||
|
* variable values meet the defined criteria for those fields.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$repository = $this->container->make(EggVariableRepositoryInterface::class);
|
||||||
|
|
||||||
|
$variables = $repository->getEditableVariables($this->attributes->get('server')->egg_id);
|
||||||
|
$rules = $variables->mapWithKeys(function ($variable) {
|
||||||
|
$this->validationAttributes['environment.' . $variable->env_variable] = $variable->name;
|
||||||
|
|
||||||
|
return ['environment.' . $variable->env_variable => $variable->rules];
|
||||||
|
})->toArray();
|
||||||
|
|
||||||
|
return array_merge($rules, [
|
||||||
|
'environment' => 'required|array',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return attributes to provide better naming conventions for error messages.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function attributes()
|
||||||
|
{
|
||||||
|
return $this->validationAttributes;
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
namespace Pterodactyl\Repositories\Eloquent;
|
namespace Pterodactyl\Repositories\Eloquent;
|
||||||
|
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
use Pterodactyl\Models\EggVariable;
|
use Pterodactyl\Models\EggVariable;
|
||||||
use Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface;
|
use Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface;
|
||||||
|
|
||||||
|
@ -21,4 +22,20 @@ class EggVariableRepository extends EloquentRepository implements EggVariableRep
|
||||||
{
|
{
|
||||||
return EggVariable::class;
|
return EggVariable::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return editable variables for a given egg. Editable variables must be set to
|
||||||
|
* user viewable in order to be picked up by this function.
|
||||||
|
*
|
||||||
|
* @param int $egg
|
||||||
|
* @return \Illuminate\Support\Collection
|
||||||
|
*/
|
||||||
|
public function getEditableVariables(int $egg): Collection
|
||||||
|
{
|
||||||
|
return $this->getBuilder()->where([
|
||||||
|
['egg_id', '=', $egg],
|
||||||
|
['user_viewable', '=', 1],
|
||||||
|
['user_editable', '=', 1],
|
||||||
|
])->get($this->getColumns());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,6 +77,36 @@ class ServerRepository extends EloquentRepository implements ServerRepositoryInt
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the primary allocation for a given server. If a model is passed into
|
||||||
|
* the function, load the allocation relationship onto it. Otherwise, find and
|
||||||
|
* return the server from the database.
|
||||||
|
*
|
||||||
|
* @param int|\Pterodactyl\Models\Server $server
|
||||||
|
* @param bool $refresh
|
||||||
|
* @return \Pterodactyl\Models\Server
|
||||||
|
*
|
||||||
|
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||||
|
*/
|
||||||
|
public function getPrimaryAllocation($server, bool $refresh = false): Server
|
||||||
|
{
|
||||||
|
$instance = $server;
|
||||||
|
if (! $instance instanceof Server) {
|
||||||
|
Assert::integerish($server, 'First argument passed to getPrimaryAllocation must be instance of \Pterodactyl\Models\Server or integer, received %s.');
|
||||||
|
$instance = $this->getBuilder()->find($server, $this->getColumns());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $instance) {
|
||||||
|
throw new RecordNotFoundException;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $instance->relationLoaded('allocation') || $refresh) {
|
||||||
|
$instance->load('allocation');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $instance;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pterodactyl\Services\Servers;
|
||||||
|
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
|
||||||
|
|
||||||
|
class StartupCommandViewService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var \Pterodactyl\Contracts\Repository\ServerRepositoryInterface
|
||||||
|
*/
|
||||||
|
private $repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* StartupCommandViewService constructor.
|
||||||
|
*
|
||||||
|
* @param \Pterodactyl\Contracts\Repository\ServerRepositoryInterface $repository
|
||||||
|
*/
|
||||||
|
public function __construct(ServerRepositoryInterface $repository)
|
||||||
|
{
|
||||||
|
$this->repository = $repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a startup command for a server and return all of the user-viewable variables
|
||||||
|
* as well as thier assigned values.
|
||||||
|
*
|
||||||
|
* @param int $server
|
||||||
|
* @return \Illuminate\Support\Collection
|
||||||
|
*
|
||||||
|
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||||
|
*/
|
||||||
|
public function handle(int $server): Collection
|
||||||
|
{
|
||||||
|
$response = $this->repository->getVariablesWithValues($server, true);
|
||||||
|
$server = $this->repository->getPrimaryAllocation($response->server);
|
||||||
|
|
||||||
|
$find = ['{{SERVER_MEMORY}}', '{{SERVER_IP}}', '{{SERVER_PORT}}'];
|
||||||
|
$replace = [$server->memory, $server->allocation->ip, $server->allocation->port];
|
||||||
|
|
||||||
|
$variables = $server->egg->variables->each(function ($variable) use (&$find, &$replace, $response) {
|
||||||
|
$find[] = '{{' . $variable->env_variable . '}}';
|
||||||
|
$replace[] = $variable->user_viewable ? $response->data[$variable->env_variable] : '[hidden]';
|
||||||
|
})->filter(function ($variable) {
|
||||||
|
return $variable->user_viewable === 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
return collect([
|
||||||
|
'startup' => str_replace($find, $replace, $server->startup),
|
||||||
|
'variables' => $variables,
|
||||||
|
'server_values' => $response->data,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,8 +12,8 @@ namespace Pterodactyl\Services\Servers;
|
||||||
use Pterodactyl\Models\Server;
|
use Pterodactyl\Models\Server;
|
||||||
use GuzzleHttp\Exception\RequestException;
|
use GuzzleHttp\Exception\RequestException;
|
||||||
use Illuminate\Database\ConnectionInterface;
|
use Illuminate\Database\ConnectionInterface;
|
||||||
use Pterodactyl\Exceptions\DisplayException;
|
|
||||||
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
|
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
|
||||||
|
use Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException;
|
||||||
use Pterodactyl\Contracts\Repository\ServerVariableRepositoryInterface;
|
use Pterodactyl\Contracts\Repository\ServerVariableRepositoryInterface;
|
||||||
use Pterodactyl\Contracts\Repository\Daemon\ServerRepositoryInterface as DaemonServerRepositoryInterface;
|
use Pterodactyl\Contracts\Repository\Daemon\ServerRepositoryInterface as DaemonServerRepositoryInterface;
|
||||||
|
|
||||||
|
@ -118,9 +118,9 @@ class StartupModificationService
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->connection->beginTransaction();
|
$this->connection->beginTransaction();
|
||||||
if (isset($data['environment'])) {
|
if (! is_null(array_get($data, 'environment'))) {
|
||||||
$validator = $this->validatorService->isAdmin($this->admin)
|
$validator = $this->validatorService->isAdmin($this->admin)
|
||||||
->setFields($data['environment'])
|
->setFields(array_get($data, 'environment', []))
|
||||||
->validate(array_get($data, 'egg_id', $server->egg_id));
|
->validate(array_get($data, 'egg_id', $server->egg_id));
|
||||||
|
|
||||||
foreach ($validator->getResults() as $result) {
|
foreach ($validator->getResults() as $result) {
|
||||||
|
@ -159,12 +159,11 @@ class StartupModificationService
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->daemonServerRepository->setNode($server->node_id)->setAccessServer($server->uuid)->update($daemonData);
|
$this->daemonServerRepository->setNode($server->node_id)->setAccessServer($server->uuid)->update($daemonData);
|
||||||
$this->connection->commit();
|
|
||||||
} catch (RequestException $exception) {
|
} catch (RequestException $exception) {
|
||||||
$response = $exception->getResponse();
|
$this->connection->rollBack();
|
||||||
throw new DisplayException(trans('admin/server.exceptions.daemon_exception', [
|
throw new DaemonConnectionException($exception);
|
||||||
'code' => is_null($response) ? 'E_CONN_REFUSED' : $response->getStatusCode(),
|
}
|
||||||
]), $exception, 'warning');
|
|
||||||
}
|
$this->connection->commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,8 +292,8 @@ return [
|
||||||
'command' => 'Startup Command',
|
'command' => 'Startup Command',
|
||||||
'edit_params' => 'Edit Parameters',
|
'edit_params' => 'Edit Parameters',
|
||||||
'update' => 'Update Startup Parameters',
|
'update' => 'Update Startup Parameters',
|
||||||
'startup_var' => 'Startup Command Variable',
|
|
||||||
'startup_regex' => 'Input Rules',
|
'startup_regex' => 'Input Rules',
|
||||||
|
'edited' => 'Startup variables have been successfully edited. They will take effect the next time this server is started.',
|
||||||
],
|
],
|
||||||
'sftp' => [
|
'sftp' => [
|
||||||
'header' => 'SFTP Configuration',
|
'header' => 'SFTP Configuration',
|
||||||
|
|
|
@ -21,26 +21,20 @@
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form action="{{ route('server.settings.startup', $server->uuidShort) }}" method="POST">
|
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-12">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
<h3 class="box-title">@lang('server.config.startup.command')</h3>
|
<h3 class="box-title">@lang('server.config.startup.command')</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<div class="form-group">
|
<div class="form-group no-margin-bottom">
|
||||||
<input type="text" class="form-control" readonly value="{{ $processedStartup }}" />
|
<input type="text" class="form-control" readonly value="{{ $startup }}" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@can('edit-startup', $server)
|
|
||||||
<div class="box-footer">
|
|
||||||
{!! csrf_field() !!}
|
|
||||||
<input type="submit" class="btn btn-primary btn-sm pull-right" value="@lang('server.config.startup.update')" />
|
|
||||||
</div>
|
|
||||||
@endcan
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@can('edit-startup', $server)
|
@can('edit-startup', $server)
|
||||||
|
<form action="{{ route('server.settings.startup', $server->uuidShort) }}" method="POST">
|
||||||
@foreach($variables as $v)
|
@foreach($variables as $v)
|
||||||
<div class="col-xs-12 col-md-4 col-sm-6">
|
<div class="col-xs-12 col-md-4 col-sm-6">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
|
@ -50,11 +44,11 @@
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<input
|
<input
|
||||||
@if($v->user_editable)
|
@if($v->user_editable)
|
||||||
name="env_{{ $v->id }}"
|
name="environment[{{ $v->env_variable }}]"
|
||||||
@else
|
@else
|
||||||
readonly
|
readonly
|
||||||
@endif
|
@endif
|
||||||
class="form-control" type="text" value="{{ old('env_' . $v->id, $v->server_set_value) }}" />
|
class="form-control" type="text" value="{{ old('environment.' . $v->env_variable, $server_values[$v->env_variable]) }}" />
|
||||||
<p class="small text-muted">{{ $v->description }}</p>
|
<p class="small text-muted">{{ $v->description }}</p>
|
||||||
<p class="no-margin">
|
<p class="no-margin">
|
||||||
@if($v->required && $v->user_editable )
|
@if($v->required && $v->user_editable )
|
||||||
|
@ -68,14 +62,22 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-footer">
|
<div class="box-footer">
|
||||||
<p class="no-margin text-muted small"><strong>@lang('server.config.startup.startup_var'):</strong> <code>{{ $v->env_variable }}</code></p>
|
|
||||||
<p class="no-margin text-muted small"><strong>@lang('server.config.startup.startup_regex'):</strong> <code>{{ $v->rules }}</code></p>
|
<p class="no-margin text-muted small"><strong>@lang('server.config.startup.startup_regex'):</strong> <code>{{ $v->rules }}</code></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
@endcan
|
<div class="col-xs-12">
|
||||||
|
<div class="box box-primary">
|
||||||
|
<div class="box-footer">
|
||||||
|
{!! csrf_field() !!}
|
||||||
|
{!! method_field('PATCH') !!}
|
||||||
|
<input type="submit" class="btn btn-primary btn-sm pull-right" value="@lang('server.config.startup.update')" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@endcan
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ Route::group(['prefix' => 'settings'], function () {
|
||||||
|
|
||||||
Route::get('/sftp', 'Settings\SftpController@index')->name('server.settings.sftp');
|
Route::get('/sftp', 'Settings\SftpController@index')->name('server.settings.sftp');
|
||||||
|
|
||||||
Route::get('/startup', 'ServerController@getStartup')->name('server.settings.startup');
|
Route::get('/startup', 'Settings\StartupController@index')->name('server.settings.startup');
|
||||||
Route::post('/startup', 'ServerController@postSettingsStartup');
|
Route::patch('/startup', 'Settings\StartupController@update');
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue