Skip to content

Commit a52290d

Browse files
authored
Merge pull request pterodactyl#259 from Pterodactyl/feature/new-theme
Implement new AdminLTE theme for front-end of panel.
2 parents 1a6532d + 355697d commit a52290d

File tree

202 files changed

+6577
-5371
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

202 files changed

+6577
-5371
lines changed

.phraseapp.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ phraseapp:
99
- file: ./resources/lang/<locale_code>/auth.php
1010
params:
1111
tag: "auth"
12-
- file: ./resources/lang/<locale_code>/base.php
13-
params:
14-
tag: "base"
12+
# - file: ./resources/lang/<locale_code>/base.php
13+
# params:
14+
# tag: "base"
1515
- file: ./resources/lang/<locale_code>/pagination.php
1616
params:
1717
tag: "pagination"
1818
- file: ./resources/lang/<locale_code>/passwords.php
1919
params:
2020
tag: "passwords"
21-
- file: ./resources/lang/<locale_code>/server.php
22-
params:
23-
tag: "server"
21+
# - file: ./resources/lang/<locale_code>/server.php
22+
# params:
23+
# tag: "server"
2424
- file: ./resources/lang/<locale_code>/strings.php
2525
params:
2626
tag: "strings"

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ This project follows [Semantic Versioning](http://semver.org) guidelines.
99
* Basic service pack implementation to allow assignment of modpacks or software to a server to pre-install applications and allow users to update.
1010
* Users can now have a username as well as client name assigned to their account.
1111
* Ability to create a node through the CLI using `pterodactyl:node` as well as locations via `pterodactyl:location`.
12+
* New theme (AdminLTE) for front-end with tweaks to backend files to work properly with it.
1213

1314
### Fixed
1415
* Bug causing error logs to be spammed if someone timed out on an ajax based page.

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ A huge thanks to [PhraseApp](https://phraseapp.com) who provide us the software
3333

3434
Ace Editor - [license](https://github.com/ajaxorg/ace/blob/master/LICENSE) - [homepage](https://ace.c9.io)
3535

36+
AdminLTE - [license](https://github.com/almasaeed2010/AdminLTE/blob/master/LICENSE) - [homepage](https://almsaeedstudio.com)
37+
3638
Animate.css - [license](https://github.com/daneden/animate.css/blob/master/LICENSE) - [homepage](http://daneden.github.io/animate.css/)
3739

3840
Async.js - [license](https://github.com/caolan/async/blob/master/LICENSE) - [homepage](https://github.com/caolan/async/)
@@ -57,8 +59,12 @@ jQuery Terminal - [license](https://github.com/jcubic/jquery.terminal/blob/maste
5759

5860
Lodash - [license](https://github.com/lodash/lodash/blob/master/LICENSE) - [homepage](https://lodash.com/)
5961

62+
Select2 - [license](https://github.com/select2/select2/blob/master/LICENSE.md) - [homepage](https://select2.github.io)
63+
6064
Socket.io - [license](https://github.com/socketio/socket.io/blob/master/LICENSE) - [homepage](http://socket.io)
6165

66+
Socket.io File Upload - [license](https://github.com/vote539/socketio-file-upload/blob/master/server.js#L1-L27) - [homepage](https://github.com/vote539/socketio-file-upload)
67+
6268
SweetAlert - [license](https://github.com/t4t5/sweetalert/blob/master/LICENSE) - [homepage](http://t4t5.github.io/sweetalert/)
6369

6470
Typeahead — [license](https://github.com/bassjobsen/Bootstrap-3-Typeahead/blob/master/bootstrap3-typeahead.js)[homepage](https://github.com/bassjobsen/Bootstrap-3-Typeahead)

app/Exceptions/Handler.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function render($request, Exception $exception)
4949
if ($request->expectsJson()) {
5050
$response = response()->json([
5151
'error' => ($exception instanceof DisplayException) ? $exception->getMessage() : 'An unhandled error occured while attempting to process this request.',
52-
], ($this->isHttpException($exception)) ? $e->getStatusCode() : 500);
52+
], ($this->isHttpException($exception)) ? $exception->getStatusCode() : 500);
5353

5454
parent::report($exception);
5555
}

app/Http/Controllers/Base/SecurityController.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ public function generateTotp(Request $request)
7979
public function setTotp(Request $request)
8080
{
8181
if (! $request->has('token')) {
82-
return response(null, 500);
82+
return response()->json([
83+
'error' => 'Request is missing token parameter.',
84+
], 500);
8385
}
8486

8587
$user = $request->user();
@@ -101,7 +103,7 @@ public function disableTotp(Request $request)
101103
if (! $request->has('token')) {
102104
Alert::danger('Missing required `token` field in request.')->flash();
103105

104-
return redirect()->route('account.totp');
106+
return redirect()->route('account.security');
105107
}
106108

107109
$user = $request->user();

app/Http/Controllers/Server/ServerController.php

Lines changed: 86 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,11 @@ public function __construct()
5858
public function getIndex(Request $request)
5959
{
6060
$server = Models\Server::getByUUID($request->route()->server);
61+
$node = Models\Node::find($server->node);
6162

6263
Javascript::put([
64+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'daemonSecret', 'username']),
65+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
6366
'meta' => [
6467
'saveFile' => route('server.files.save', $server->uuidShort),
6568
'csrfToken' => csrf_token(),
@@ -68,8 +71,7 @@ public function getIndex(Request $request)
6871

6972
return view('server.index', [
7073
'server' => $server,
71-
'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
72-
'node' => Models\Node::find($server->node),
74+
'node' => $node,
7375
]);
7476
}
7577

@@ -120,10 +122,16 @@ public function getAddFile(Request $request, $uuid)
120122
{
121123
$server = Models\Server::getByUUID($uuid);
122124
$this->authorize('add-files', $server);
125+
$node = Models\Node::find($server->node);
126+
127+
Javascript::put([
128+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
129+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
130+
]);
123131

124132
return view('server.files.add', [
125133
'server' => $server,
126-
'node' => Models\Node::find($server->node),
134+
'node' => $node,
127135
'directory' => (in_array($request->get('dir'), [null, '/', ''])) ? '' : trim($request->get('dir'), '/') . '/',
128136
]);
129137
}
@@ -140,6 +148,7 @@ public function getEditFile(Request $request, $uuid, $file)
140148
{
141149
$server = Models\Server::getByUUID($uuid);
142150
$this->authorize('edit-files', $server);
151+
$node = Models\Node::find($server->node);
143152

144153
$fileInfo = (object) pathinfo($file);
145154
$controller = new FileRepository($uuid);
@@ -157,9 +166,15 @@ public function getEditFile(Request $request, $uuid, $file)
157166
return redirect()->route('server.files.index', $uuid);
158167
}
159168

169+
Javascript::put([
170+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
171+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
172+
'stat' => $fileContent['stat'],
173+
]);
174+
160175
return view('server.files.edit', [
161176
'server' => $server,
162-
'node' => Models\Node::find($server->node),
177+
'node' => $node,
163178
'file' => $file,
164179
'stat' => $fileContent['stat'],
165180
'contents' => $fileContent['file']->content,
@@ -193,17 +208,36 @@ public function getDownloadFile(Request $request, $uuid, $file)
193208
return redirect($node->scheme . '://' . $node->fqdn . ':' . $node->daemonListen . '/server/file/download/' . $download->token);
194209
}
195210

196-
/**
197-
* Renders server settings page.
198-
*
199-
* @param \Illuminate\Http\Request $request
200-
* @return \Illuminate\Contracts\View\View
201-
*/
202-
public function getSettings(Request $request, $uuid)
211+
public function getAllocation(Request $request, $uuid)
212+
{
213+
$server = Models\Server::getByUUID($uuid);
214+
$this->authorize('view-allocation', $server);
215+
$node = Models\Node::find($server->node);
216+
217+
Javascript::put([
218+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
219+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
220+
]);
221+
222+
return view('server.settings.allocation', [
223+
'server' => $server,
224+
'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
225+
'node' => $node,
226+
]);
227+
}
228+
229+
public function getStartup(Request $request, $uuid)
203230
{
204231
$server = Models\Server::getByUUID($uuid);
232+
$this->authorize('view-startup', $server);
233+
$node = Models\Node::find($server->node);
205234
$allocation = Models\Allocation::findOrFail($server->allocation);
206235

236+
Javascript::put([
237+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
238+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
239+
]);
240+
207241
$variables = Models\ServiceVariables::select(
208242
'service_variables.*',
209243
DB::raw('COALESCE(server_variables.variable_value, service_variables.default_value) as a_serverValue')
@@ -231,19 +265,53 @@ public function getSettings(Request $request, $uuid)
231265
$processed = str_replace('{{' . $variable->env_variable . '}}', $replace, $processed);
232266
}
233267

234-
return view('server.settings', [
268+
return view('server.settings.startup', [
235269
'server' => $server,
236-
'databases' => Models\Database::select('databases.*', 'database_servers.host as a_host', 'database_servers.port as a_port')
237-
->where('server_id', $server->id)
238-
->join('database_servers', 'database_servers.id', '=', 'databases.db_server')
239-
->get(),
240270
'node' => Models\Node::find($server->node),
241271
'variables' => $variables->where('user_viewable', 1),
242272
'service' => $service,
243273
'processedStartup' => $processed,
244274
]);
245275
}
246276

277+
public function getDatabases(Request $request, $uuid)
278+
{
279+
$server = Models\Server::getByUUID($uuid);
280+
$this->authorize('view-databases', $server);
281+
$node = Models\Node::find($server->node);
282+
283+
Javascript::put([
284+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
285+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
286+
]);
287+
288+
return view('server.settings.databases', [
289+
'server' => $server,
290+
'node' => $node,
291+
'databases' => Models\Database::select('databases.*', 'database_servers.host as a_host', 'database_servers.port as a_port')
292+
->where('server_id', $server->id)
293+
->join('database_servers', 'database_servers.id', '=', 'databases.db_server')
294+
->get(),
295+
]);
296+
}
297+
298+
public function getSFTP(Request $request, $uuid)
299+
{
300+
$server = Models\Server::getByUUID($uuid);
301+
$this->authorize('view-sftp', $server);
302+
$node = Models\Node::find($server->node);
303+
304+
Javascript::put([
305+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'daemonSecret', 'username']),
306+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
307+
]);
308+
309+
return view('server.settings.sftp', [
310+
'server' => $server,
311+
'node' => $node,
312+
]);
313+
}
314+
247315
public function postSettingsSFTP(Request $request, $uuid)
248316
{
249317
$server = Models\Server::getByUUID($uuid);
@@ -254,15 +322,15 @@ public function postSettingsSFTP(Request $request, $uuid)
254322
$repo->updateSFTPPassword($server->id, $request->input('sftp_pass'));
255323
Alert::success('Successfully updated this servers SFTP password.')->flash();
256324
} catch (DisplayValidationException $ex) {
257-
return redirect()->route('server.settings', $uuid)->withErrors(json_decode($ex->getMessage()));
325+
return redirect()->route('server.settings.sftp', $uuid)->withErrors(json_decode($ex->getMessage()));
258326
} catch (DisplayException $ex) {
259327
Alert::danger($ex->getMessage())->flash();
260328
} catch (\Exception $ex) {
261329
Log::error($ex);
262330
Alert::danger('An unknown error occured while attempting to update this server\'s SFTP settings.')->flash();
263331
}
264332

265-
return redirect()->route('server.settings', $uuid);
333+
return redirect()->route('server.settings.sftp', $uuid);
266334
}
267335

268336
public function postSettingsStartup(Request $request, $uuid)

app/Http/Controllers/Server/SubuserController.php

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Log;
2929
use Auth;
3030
use Alert;
31+
use Javascript;
3132
use Pterodactyl\Models;
3233
use Illuminate\Http\Request;
3334
use Pterodactyl\Exceptions\DisplayException;
@@ -51,11 +52,17 @@ public function getIndex(Request $request, $uuid)
5152
{
5253
$server = Models\Server::getByUUID($uuid);
5354
$this->authorize('list-subusers', $server);
55+
$node = Models\Node::find($server->node);
56+
57+
Javascript::put([
58+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
59+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
60+
]);
5461

5562
return view('server.users.index', [
5663
'server' => $server,
57-
'node' => Models\Node::find($server->node),
58-
'subusers' => Models\Subuser::select('subusers.*', 'users.email as a_userEmail')
64+
'node' => $node,
65+
'subusers' => Models\Subuser::select('subusers.*', 'users.email', 'users.username')
5966
->join('users', 'users.id', '=', 'subusers.user_id')
6067
->where('server_id', $server->id)
6168
->get(),
@@ -66,6 +73,12 @@ public function getView(Request $request, $uuid, $id)
6673
{
6774
$server = Models\Server::getByUUID($uuid);
6875
$this->authorize('view-subuser', $server);
76+
$node = Models\Node::find($server->node);
77+
78+
Javascript::put([
79+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
80+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
81+
]);
6982

7083
$subuser = Models\Subuser::select('subusers.*', 'users.email as a_userEmail')
7184
->join('users', 'users.id', '=', 'subusers.user_id')
@@ -87,7 +100,7 @@ public function getView(Request $request, $uuid, $id)
87100

88101
return view('server.users.view', [
89102
'server' => $server,
90-
'node' => Models\Node::find($server->node),
103+
'node' => $node,
91104
'subuser' => $subuser,
92105
'permissions' => $permissions,
93106
]);
@@ -137,10 +150,16 @@ public function getNew(Request $request, $uuid)
137150
{
138151
$server = Models\Server::getByUUID($uuid);
139152
$this->authorize('create-subuser', $server);
153+
$node = Models\Node::find($server->node);
154+
155+
Javascript::put([
156+
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
157+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
158+
]);
140159

141160
return view('server.users.new', [
142161
'server' => $server,
143-
'node' => Models\Node::find($server->node),
162+
'node' => $node,
144163
]);
145164
}
146165

0 commit comments

Comments
 (0)