Skip to content

Commit 4719b20

Browse files
committed
Implement server startup stuff
1 parent 401d72a commit 4719b20

File tree

3 files changed

+129
-26
lines changed

3 files changed

+129
-26
lines changed

app/Http/Controllers/Server/ServerController.php

Lines changed: 63 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,7 @@
2929
use Alert;
3030
use Log;
3131

32-
use Pterodactyl\Models\Server;
33-
use Pterodactyl\Models\Node;
34-
use Pterodactyl\Models\Download;
35-
use Pterodactyl\Models\Allocation;
36-
32+
use Pterodactyl\Models;
3733
use Pterodactyl\Exceptions\DisplayException;
3834
use Pterodactyl\Exceptions\DisplayValidationException;
3935
use Pterodactyl\Repositories\Daemon\FileRepository;
@@ -57,10 +53,10 @@ public function __construct()
5753

5854
public function getJavascript(Request $request, $uuid, $file)
5955
{
60-
$server = Server::getByUUID($uuid);
56+
$server = Models\Server::getByUUID($uuid);
6157
return response()->view('server.js.' . $server->a_serviceFile . '.' . basename($file, '.js'), [
6258
'server' => $server,
63-
'node' => Node::find($server->node)
59+
'node' => Models\Node::find($server->node)
6460
])->header('Content-Type', 'application/javascript');
6561
}
6662

@@ -72,11 +68,11 @@ public function getJavascript(Request $request, $uuid, $file)
7268
*/
7369
public function getIndex(Request $request)
7470
{
75-
$server = Server::getByUUID($request->route()->server);
71+
$server = Models\Server::getByUUID($request->route()->server);
7672
return view('server.index', [
7773
'server' => $server,
78-
'allocations' => Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
79-
'node' => Node::find($server->node)
74+
'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
75+
'node' => Models\Node::find($server->node)
8076
]);
8177
}
8278

@@ -89,12 +85,12 @@ public function getIndex(Request $request)
8985
public function getFiles(Request $request)
9086
{
9187

92-
$server = Server::getByUUID($request->route()->server);
88+
$server = Models\Server::getByUUID($request->route()->server);
9389
$this->authorize('list-files', $server);
9490

9591
return view('server.files.index', [
9692
'server' => $server,
97-
'node' => Node::find($server->node)
93+
'node' => Models\Node::find($server->node)
9894
]);
9995
}
10096

@@ -107,12 +103,12 @@ public function getFiles(Request $request)
107103
public function getAddFile(Request $request)
108104
{
109105

110-
$server = Server::getByUUID($request->route()->server);
106+
$server = Models\Server::getByUUID($request->route()->server);
111107
$this->authorize('add-files', $server);
112108

113109
return view('server.files.add', [
114110
'server' => $server,
115-
'node' => Node::find($server->node),
111+
'node' => Models\Node::find($server->node),
116112
'directory' => (in_array($request->get('dir'), [null, '/', ''])) ? '' : trim($request->get('dir'), '/') . '/'
117113
]);
118114
}
@@ -128,7 +124,7 @@ public function getAddFile(Request $request)
128124
public function getEditFile(Request $request, $uuid, $file)
129125
{
130126

131-
$server = Server::getByUUID($uuid);
127+
$server = Models\Server::getByUUID($uuid);
132128
$this->authorize('edit-files', $server);
133129

134130
$fileInfo = (object) pathinfo($file);
@@ -152,7 +148,7 @@ public function getEditFile(Request $request, $uuid, $file)
152148

153149
return view('server.files.edit', [
154150
'server' => $server,
155-
'node' => Node::find($server->node),
151+
'node' => Models\Node::find($server->node),
156152
'file' => $file,
157153
'contents' => $fileContent->content,
158154
'directory' => (in_array($fileInfo->dirname, ['.', './', '/'])) ? '/' : trim($fileInfo->dirname, '/') . '/',
@@ -172,8 +168,8 @@ public function getEditFile(Request $request, $uuid, $file)
172168
public function getDownloadFile(Request $request, $uuid, $file)
173169
{
174170

175-
$server = Server::getByUUID($uuid);
176-
$node = Node::find($server->node);
171+
$server = Models\Server::getByUUID($uuid);
172+
$node = Models\Node::find($server->node);
177173

178174
$this->authorize('download-files', $server);
179175

@@ -197,16 +193,38 @@ public function getDownloadFile(Request $request, $uuid, $file)
197193
*/
198194
public function getSettings(Request $request, $uuid)
199195
{
200-
$server = Server::getByUUID($uuid);
196+
$server = Models\Server::getByUUID($uuid);
197+
$variables = Models\ServiceVariables::select('service_variables.*', 'server_variables.variable_value as a_serverValue')
198+
->join('server_variables', 'server_variables.variable_id', '=', 'service_variables.id')
199+
->where('service_variables.option_id', $server->option)
200+
->where('server_variables.server_id', $server->id)
201+
->get();
202+
$service = Models\Service::findOrFail($server->service);
203+
204+
$serverVariables = [
205+
'{{SERVER_MEMORY}}' => $server->memory,
206+
'{{SERVER_IP}}' => $server->ip,
207+
'{{SERVER_PORT}}' => $server->port,
208+
];
209+
210+
$processed = str_replace(array_keys($serverVariables), array_values($serverVariables), $server->startup);
211+
foreach($variables as &$variable) {
212+
$replace = ($variable->user_viewable === 1) ? $variable->a_serverValue : '**';
213+
$processed = str_replace('{{' . $variable->env_variable . '}}', $replace, $processed);
214+
}
215+
201216
return view('server.settings', [
202217
'server' => $server,
203-
'node' => Node::find($server->node)
218+
'node' => Models\Node::find($server->node),
219+
'variables' => $variables,
220+
'service' => $service,
221+
'processedStartup' => $processed,
204222
]);
205223
}
206224

207225
public function postSettingsSFTP(Request $request, $uuid)
208226
{
209-
$server = Server::getByUUID($uuid);
227+
$server = Models\Server::getByUUID($uuid);
210228
$this->authorize('reset-sftp', $server);
211229

212230
try {
@@ -224,4 +242,28 @@ public function postSettingsSFTP(Request $request, $uuid)
224242
return redirect()->route('server.settings', $uuid);
225243
}
226244

245+
public function postSettingsStartup(Request $request, $uuid)
246+
{
247+
$server = Models\Server::getByUUID($uuid);
248+
$this->authorize('edit-startup', $server);
249+
250+
try {
251+
$repo = new ServerRepository;
252+
$repo->updateStartup($server->id, $request->except([
253+
'_token'
254+
]));
255+
Alert::success('Server startup variables were successfully updated.')->flash();
256+
} catch (DisplayException $ex) {
257+
Alert::danger($ex->getMessage())->flash();
258+
} catch(\Exception $ex) {
259+
Log::error($ex);
260+
Alert::danger('An unhandled exception occured while attemping to update startup variables for this server. Please try again.')->flash();
261+
} finally {
262+
return redirect()->route('server.settings', [
263+
'uuid' => $uuid,
264+
'tab' => 'tab_startup'
265+
])->withInput();
266+
}
267+
}
268+
227269
}

app/Http/Routes/ServerRoutes.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public function map(Router $router) {
5353
'uses' => 'Server\ServerController@postSettingsSFTP'
5454
]);
5555

56+
$router->post('/settings/startup', [
57+
'as' => 'server.settings.startup',
58+
'uses' => 'Server\ServerController@postSettingsStartup'
59+
]);
60+
5661
// File Manager Routes
5762
$router->get('/files', [
5863
'as' => 'files.index',

resources/views/server/settings.blade.php

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,19 +78,75 @@
7878
@endcan
7979
@can('view-startup', $server)
8080
<div class="tab-pane" id="tab_startup">
81-
<div class="panel panel-default">
82-
<div class="panel-heading"></div>
83-
<div class="panel-body">
84-
Startup
81+
<form action="{{ route('server.settings.startup', $server->uuidShort) }}" method="POST">
82+
<div class="panel panel-default">
83+
<div class="panel-heading"></div>
84+
<div class="panel-body">
85+
<div class="row">
86+
<div class="form-group col-md-12">
87+
<label class="control-label">Startup Command:</label>
88+
<div class="input-group">
89+
<span class="input-group-addon">{{ $service->executable }}</span>
90+
<input type="text" class="form-control" readonly="readonly" value="{{ $processedStartup }}" />
91+
</div>
92+
</div>
93+
</div>
94+
</div>
95+
@can('edit-startup', $server)
96+
<div class="panel-heading" style="border-top: 1px solid #ddd;"></div>
97+
<div class="panel-body">
98+
<div class="row">
99+
@foreach($variables as $item)
100+
<div class="form-group col-md-6">
101+
<label class="control-label">
102+
@if($item->required === 1)<span class="label label-primary">Required</span> @endif
103+
{{ $item->name }}
104+
</label>
105+
<div>
106+
<input type="text"
107+
@if($item->user_editable === 1)
108+
name="{{ $item->env_variable }}"
109+
@else
110+
readonly="readonly"
111+
@endif
112+
class="form-control" value="{{ old($item->env_variable, $item->a_serverValue) }}" data-action="matchRegex" data-regex="{{ $item->regex }}" />
113+
</div>
114+
<p class="text-muted"><small>{{ $item->description }}<br />Regex: <code>{{ $item->regex }}</code><br />Access as: <code>&#123;&#123;{{$item->env_variable}}&#125;&#125;</code></small></p>
115+
</div>
116+
@endforeach
117+
</div>
118+
</div>
119+
<div class="panel-heading" style="border-top: 1px solid #ddd;"></div>
120+
<div class="panel-body">
121+
<div class="row">
122+
<div class="col-md-12">
123+
{!! csrf_field() !!}
124+
<input type="submit" class="btn btn-primary btn-sm" value="Update Startup Arguments" />
125+
</div>
126+
</div>
127+
</div>
128+
@endcan
85129
</div>
86-
</div>
130+
</form>
87131
</div>
88132
@endcan
89133
</div>
90134
</div>
91135
<script>
92136
$(document).ready(function () {
93137
$('.server-settings').addClass('active');
138+
$('[data-action="matchRegex"]').keyup(function (event) {
139+
if (!$(this).data('regex')) return;
140+
var input = $(this).val();
141+
console.log(escapeRegExp($(this).data('regex')));
142+
var regex = new RegExp(escapeRegExp($(this).data('regex')));
143+
console.log(regex);
144+
if (!regex.test(input)) {
145+
$(this).parent().parent().removeClass('has-success').addClass('has-error');
146+
} else {
147+
$(this).parent().parent().removeClass('has-error').addClass('has-success');
148+
}
149+
});
94150
});
95151
</script>
96152
@endsection

0 commit comments

Comments
 (0)