Skip to content

Commit aa6e733

Browse files
committed
Switch filemanager and EULA check to use pure Javascript methods
Removes the need for the javascript to be parsed by Blade template engine by using a defined javascript variable with the values that are necessary for checking everything and passing the correct values. This does make it so that if a user does not have permission to do something they could theoretically make the option show up in the context menu, however when they click it, it will simply return an error by the daemon.
1 parent e282f77 commit aa6e733

File tree

13 files changed

+566
-527
lines changed

13 files changed

+566
-527
lines changed

app/Http/Controllers/Server/ServerController.php

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Log;
2929
use Uuid;
3030
use Alert;
31+
use Javascript;
3132
use Pterodactyl\Models;
3233
use Illuminate\Http\Request;
3334
use InvalidArgumentException;
@@ -49,24 +50,6 @@ public function __construct()
4950
//
5051
}
5152

52-
public function getJavascript(Request $request, $uuid, $folder, $file)
53-
{
54-
$server = Models\Server::getByUUID($uuid);
55-
56-
$info = pathinfo($file);
57-
$routeFile = str_replace('/', '.', $info['dirname']) . '.' . $info['filename'];
58-
try {
59-
return response()->view('server.js.' . $folder . '.' . $routeFile, [
60-
'server' => $server,
61-
'node' => Models\Node::find($server->node),
62-
])->header('Content-Type', 'application/javascript');
63-
} catch (InvalidArgumentException $ex) {
64-
return abort(404);
65-
} catch (\Exception $ex) {
66-
throw $ex;
67-
}
68-
}
69-
7053
/**
7154
* Renders server index page for specified server.
7255
*
@@ -77,6 +60,13 @@ public function getIndex(Request $request)
7760
{
7861
$server = Models\Server::getByUUID($request->route()->server);
7962

63+
Javascript::put([
64+
'meta' => [
65+
'saveFile' => route('server.files.save', $server->uuidShort),
66+
'csrfToken' => csrf_token(),
67+
],
68+
]);
69+
8070
return view('server.index', [
8171
'server' => $server,
8272
'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
@@ -90,14 +80,34 @@ public function getIndex(Request $request)
9080
* @param Request $request
9181
* @return \Illuminate\Contracts\View\View
9282
*/
93-
public function getFiles(Request $request)
83+
public function getFiles(Request $request, $uuid)
9484
{
95-
$server = Models\Server::getByUUID($request->route()->server);
85+
$server = Models\Server::getByUUID($uuid);
9686
$this->authorize('list-files', $server);
9787

88+
$node = Models\Node::find($server->node);
89+
90+
Javascript::put([
91+
'server' => collect($server->makeVisible('daemonSecret'))->only('uuid', 'uuidShort', 'daemonSecret'),
92+
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
93+
'meta' => [
94+
'directoryList' => route('server.files.directory-list', $server->uuidShort),
95+
'csrftoken' => csrf_token(),
96+
],
97+
'permissions' => [
98+
'moveFiles' => $request->user()->can('move-files', $server),
99+
'copyFiles' => $request->user()->can('copy-files', $server),
100+
'compressFiles' => $request->user()->can('compress-files', $server),
101+
'decompressFiles' => $request->user()->can('decompress-files', $server),
102+
'createFiles' => $request->user()->can('create-files', $server),
103+
'downloadFiles' => $request->user()->can('download-files', $server),
104+
'deleteFiles' => $request->user()->can('delete-files', $server),
105+
],
106+
]);
107+
98108
return view('server.files.index', [
99109
'server' => $server,
100-
'node' => Models\Node::find($server->node),
110+
'node' => $node,
101111
]);
102112
}
103113

@@ -107,9 +117,9 @@ public function getFiles(Request $request)
107117
* @param Request $request
108118
* @return \Illuminate\Contracts\View\View
109119
*/
110-
public function getAddFile(Request $request)
120+
public function getAddFile(Request $request, $uuid)
111121
{
112-
$server = Models\Server::getByUUID($request->route()->server);
122+
$server = Models\Server::getByUUID($uuid);
113123
$this->authorize('add-files', $server);
114124

115125
return view('server.files.add', [

app/Http/Routes/ServerRoutes.php

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,6 @@ public function map(Router $router)
166166
'uses' => 'Server\AjaxController@postResetDatabasePassword',
167167
]);
168168
});
169-
170-
// Assorted AJAX Routes
171-
$router->group(['prefix' => 'js'], function ($server) use ($router) {
172-
// Returns Server Status
173-
$router->get('{folder}/{file}', [
174-
'as' => 'server.js',
175-
'uses' => 'Server\ServerController@getJavascript',
176-
])->where('file', '.*');
177-
});
178169
});
179170
}
180171
}

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"mtdowling/cron-expression": "1.1.0",
2727
"dingo/api": "1.0.0-beta6",
2828
"aws/aws-sdk-php": "3.19.20",
29-
"predis/predis": "1.1.1"
29+
"predis/predis": "1.1.1",
30+
"laracasts/utilities": "^2.1"
3031
},
3132
"require-dev": {
3233
"fzaninotto/faker": "~1.4",

config/app.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@
158158
igaster\laravelTheme\themeServiceProvider::class,
159159
Prologue\Alerts\AlertsServiceProvider::class,
160160
Krucas\Settings\Providers\SettingsServiceProvider::class,
161+
Laracasts\Utilities\JavaScript\JavaScriptServiceProvider::class,
161162

162163
],
163164

@@ -198,6 +199,7 @@
198199
'Hash' => Illuminate\Support\Facades\Hash::class,
199200
'Input' => Illuminate\Support\Facades\Input::class,
200201
'Inspiring' => Illuminate\Foundation\Inspiring::class,
202+
'Javascript' => Laracasts\Utilities\JavaScript\JavaScriptFacade::class,
201203
'Lang' => Illuminate\Support\Facades\Lang::class,
202204
'Log' => Illuminate\Support\Facades\Log::class,
203205
'Mail' => Illuminate\Support\Facades\Mail::class,

config/javascript.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
return [
4+
5+
/*
6+
|--------------------------------------------------------------------------
7+
| View to Bind JavaScript Vars To
8+
|--------------------------------------------------------------------------
9+
|
10+
| Set this value to the name of the view (or partial) that
11+
| you want to prepend all JavaScript variables to.
12+
| This can be a single view, or an array of views.
13+
| Example: 'footer' or ['footer', 'bottom']
14+
|
15+
*/
16+
'bind_js_vars_to_this_view' => [
17+
'layouts.master'
18+
],
19+
20+
/*
21+
|--------------------------------------------------------------------------
22+
| JavaScript Namespace
23+
|--------------------------------------------------------------------------
24+
|
25+
| By default, we'll add variables to the global window object. However,
26+
| it's recommended that you change this to some namespace - anything.
27+
| That way, you can access vars, like "SomeNamespace.someVariable."
28+
|
29+
*/
30+
'js_namespace' => 'Pterodactyl'
31+
32+
];

0 commit comments

Comments
 (0)