Added startup management, cleaned up code.
Refactored entire startup repository code block to be more efficient and cleaner. Also includes modifications to front-end to make it match backend name and design.
This commit is contained in:
parent
d51ae5ec23
commit
349b36d38a
8 changed files with 252 additions and 146 deletions
|
@ -475,27 +475,34 @@ class ServersController extends Controller
|
|||
return redirect()->route('admin.servers.view.delete', $id);
|
||||
}
|
||||
|
||||
// //
|
||||
// public function postUpdateServerStartup(Request $request, $id)
|
||||
// {
|
||||
// try {
|
||||
// $server = new ServerRepository;
|
||||
// $server->updateStartup($id, $request->except([
|
||||
// '_token',
|
||||
// ]), true);
|
||||
// Alert::success('Server startup variables were successfully updated.')->flash();
|
||||
// } catch (\Pterodactyl\Exceptions\DisplayException $e) {
|
||||
// Alert::danger($e->getMessage())->flash();
|
||||
// } catch (\Exception $e) {
|
||||
// Log::error($e);
|
||||
// Alert::danger('An unhandled exception occured while attemping to update startup variables for this server. Please try again.')->flash();
|
||||
// } finally {
|
||||
// return redirect()->route('admin.servers.view', [
|
||||
// 'id' => $id,
|
||||
// 'tab' => 'tab_startup',
|
||||
// ])->withInput();
|
||||
// }
|
||||
// }
|
||||
/**
|
||||
* Update the startup command as well as variables.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Response\RedirectResponse
|
||||
*/
|
||||
public function saveStartup(Request $request, $id)
|
||||
{
|
||||
$repo = new ServerRepository;
|
||||
|
||||
try {
|
||||
$repo->updateStartup($id, $request->except('_token'), true);
|
||||
|
||||
Alert::success('Startup variables were successfully modified and assigned for this server.')->flash();
|
||||
} catch(DisplayException $ex) {
|
||||
Alert::danger($ex->getMessage())->flash();
|
||||
} catch (TransferException $ex) {
|
||||
Log::warning($ex);
|
||||
Alert::danger('A TransferException occurred while attempting to update the startup for this server, please ensure the daemon is running. This error has been logged.')->flash();
|
||||
} catch (\Exception $ex) {
|
||||
Log::error($ex);
|
||||
Alert::danger('An unhandled exception occured while attemping to update startup variables for this server. This error has been logged.')->flash();
|
||||
}
|
||||
|
||||
return redirect()->route('admin.servers.view.startup', $id);
|
||||
}
|
||||
|
||||
//
|
||||
// public function postDatabase(Request $request, $id)
|
||||
// {
|
||||
|
|
|
@ -309,9 +309,7 @@ class ServerController extends Controller
|
|||
|
||||
try {
|
||||
$repo = new ServerRepository;
|
||||
$repo->updateStartup($server->id, $request->except([
|
||||
'_token',
|
||||
]));
|
||||
$repo->updateStartup($server->id, $request->except('_token'));
|
||||
Alert::success('Server startup variables were successfully updated.')->flash();
|
||||
} catch (DisplayException $ex) {
|
||||
Alert::danger($ex->getMessage())->flash();
|
||||
|
|
|
@ -174,6 +174,10 @@ class AdminRoutes
|
|||
'uses' => 'Admin\ServersController@viewStartup',
|
||||
]);
|
||||
|
||||
$router->post('/view/{id}/startup', [
|
||||
'uses' => 'Admin\ServersController@saveStartup',
|
||||
]);
|
||||
|
||||
$router->get('/view/{id}/database', [
|
||||
'as' => 'admin.servers.view.database',
|
||||
'uses' => 'Admin\ServersController@viewDatabase',
|
||||
|
|
|
@ -617,87 +617,63 @@ class ServerRepository
|
|||
{
|
||||
$server = Models\Server::with('variables', 'option.variables')->findOrFail($id);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
// Check the startup
|
||||
DB::transaction(function () use ($admin, $data, $server) {
|
||||
if (isset($data['startup']) && $admin) {
|
||||
$server->startup = $data['startup'];
|
||||
$server->save();
|
||||
}
|
||||
|
||||
// Check those Variables
|
||||
$server->option->variables->transform(function ($item, $key) use ($server) {
|
||||
$displayValue = $server->variables->where('variable_id', $item->id)->pluck('variable_value')->first();
|
||||
$item->server_value = (! is_null($displayValue)) ? $displayValue : $item->default_value;
|
||||
|
||||
return $item;
|
||||
});
|
||||
|
||||
$variableList = [];
|
||||
if ($server->option->variables) {
|
||||
foreach ($server->option->variables as &$variable) {
|
||||
// Move on if the new data wasn't even sent
|
||||
if (! isset($data[$variable->env_variable])) {
|
||||
$variableList[] = [
|
||||
'id' => $variable->id,
|
||||
'env' => $variable->env_variable,
|
||||
'val' => $variable->server_value,
|
||||
];
|
||||
foreach($server->option->variables as &$variable) {
|
||||
$set = isset($data['env_' . $variable->id]);
|
||||
|
||||
// Variable is required but was not passed into the function.
|
||||
if ($variable->required && ! $set) {
|
||||
throw new DisplayException('A required variable (' . $variable->env_variable . ') was not passed in the request.');
|
||||
}
|
||||
|
||||
// If user is not an admin and are trying to edit a non-editable field
|
||||
// or an invisible field just silently skip the variable.
|
||||
if (! $admin && (! $variable->user_editable || ! $variable->user_viewable)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Update Empty but skip validation
|
||||
if (empty($data[$variable->env_variable])) {
|
||||
$variableList[] = [
|
||||
'id' => $variable->id,
|
||||
'env' => $variable->env_variable,
|
||||
'val' => null,
|
||||
];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Is the variable required?
|
||||
// @TODO: is this even logical to perform this check?
|
||||
if (isset($data[$variable->env_variable]) && empty($data[$variable->env_variable])) {
|
||||
if ($variable->required) {
|
||||
throw new DisplayException('A required service option variable field (' . $variable->env_variable . ') was included in this request but was left blank.');
|
||||
// Confirm value is valid when compared aganist regex.
|
||||
// @TODO: switch to Laravel validation rules.
|
||||
if ($set && ! is_null($variable->regex)) {
|
||||
if (! preg_match($variable->regex, $data['env_' . $variable->id])) {
|
||||
throw new DisplayException('The value passed for a variable (' . $variable->env_variable . ') could not be matched aganist the regex for that field (' . $variable->regex . ').');
|
||||
}
|
||||
}
|
||||
|
||||
// Variable hidden and/or not user editable
|
||||
if ((! $variable->user_viewable || ! $variable->user_editable) && ! $admin) {
|
||||
throw new DisplayException('A service option variable field (' . $variable->env_variable . ') does not exist or you do not have permission to edit it.');
|
||||
$svar = Models\ServerVariable::firstOrNew([
|
||||
'server_id' => $server->id,
|
||||
'variable_id' => $variable->id,
|
||||
]);
|
||||
|
||||
// Set the value; if one was not passed set it to the default value
|
||||
if ($set) {
|
||||
$svar->variable_value = $data['env_' . $variable->id];
|
||||
|
||||
// Not passed, check if this record exists if so keep value, otherwise set default
|
||||
} else {
|
||||
$svar->variable_value = ($svar->exists) ? $svar->variable_value : $variable->default_value;
|
||||
}
|
||||
|
||||
// Check aganist Regex Pattern
|
||||
if (! is_null($variable->regex) && ! preg_match($variable->regex, $data[$variable->env_variable])) {
|
||||
throw new DisplayException('Failed to validate service option variable field (' . $variable->env_variable . ') aganist regex (' . $variable->regex . ').');
|
||||
}
|
||||
|
||||
$variableList[] = [
|
||||
'id' => $variable->id,
|
||||
'env' => $variable->env_variable,
|
||||
'val' => $data[$variable->env_variable],
|
||||
];
|
||||
$svar->save();
|
||||
}
|
||||
}
|
||||
|
||||
// Add Variables
|
||||
$environmentVariables = [
|
||||
'STARTUP' => $server->startup,
|
||||
];
|
||||
foreach ($variableList as $item) {
|
||||
$environmentVariables[$item['env']] = $item['val'];
|
||||
// Reload Variables
|
||||
$server->load('variables');
|
||||
$environment = $server->option->variables->map(function ($item, $key) use ($server) {
|
||||
$display = $server->variables->where('variable_id', $item->id)->pluck('variable_value')->first();
|
||||
|
||||
// Update model or make a new record if it doesn't exist.
|
||||
$model = Models\ServerVariable::firstOrNew([
|
||||
'variable_id' => $item['id'],
|
||||
'server_id' => $server->id,
|
||||
]);
|
||||
$model->variable_value = $item['val'];
|
||||
$model->save();
|
||||
}
|
||||
return [
|
||||
'variable' => $item->env_variable,
|
||||
'value' => (! is_null($display)) ? $display : $item->default_value,
|
||||
];
|
||||
});
|
||||
|
||||
$server->node->guzzleClient([
|
||||
'X-Access-Server' => $server->uuid,
|
||||
|
@ -705,21 +681,11 @@ class ServerRepository
|
|||
])->request('PATCH', '/server', [
|
||||
'json' => [
|
||||
'build' => [
|
||||
'env|overwrite' => $environmentVariables,
|
||||
'env|overwrite' => $environment->pluck('value', 'variable')->merge(['STARTUP' => $server->startup]),
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return true;
|
||||
} catch (TransferException $ex) {
|
||||
DB::rollBack();
|
||||
throw new DisplayException('An error occured while attempting to update the server configuration.', $ex);
|
||||
} catch (\Exception $ex) {
|
||||
DB::rollBack();
|
||||
throw $ex;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function queueDeletion($id, $force = false)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue