Merge branch 'develop' into feature/service-changes
This commit is contained in:
commit
6bd9663f59
136 changed files with 2470 additions and 1737 deletions
|
@ -75,7 +75,7 @@ class UserController extends BaseController
|
|||
*/
|
||||
public function view(Request $request, $id)
|
||||
{
|
||||
$query = Models\User::where('id', $id);
|
||||
$query = Models\User::where((is_numeric($id) ? 'id' : 'email'), $id);
|
||||
|
||||
if (! is_null($request->input('fields'))) {
|
||||
foreach (explode(',', $request->input('fields')) as $field) {
|
||||
|
|
|
@ -27,6 +27,7 @@ namespace Pterodactyl\Http\Controllers\Admin;
|
|||
use DB;
|
||||
use Log;
|
||||
use Alert;
|
||||
use Carbon;
|
||||
use Validator;
|
||||
use Pterodactyl\Models;
|
||||
use Illuminate\Http\Request;
|
||||
|
@ -82,6 +83,7 @@ class NodesController extends Controller
|
|||
'_token',
|
||||
]));
|
||||
Alert::success('Successfully created new node. <strong>Before you can add any servers you need to first assign some IP addresses and ports.</strong>')->flash();
|
||||
Alert::info('<strong>To simplify the node setup you can generate a token on the configuration tab.</strong>')->flash();
|
||||
|
||||
return redirect()->route('admin.nodes.view', [
|
||||
'id' => $new,
|
||||
|
@ -276,4 +278,24 @@ class NodesController extends Controller
|
|||
'tab' => 'tab_delete',
|
||||
]);
|
||||
}
|
||||
|
||||
public function getConfigurationToken(Request $request, $id)
|
||||
{
|
||||
// Check if Node exists. Will lead to 404 if not.
|
||||
Models\Node::findOrFail($id);
|
||||
|
||||
// Create a token
|
||||
$token = new Models\NodeConfigurationToken();
|
||||
$token->node = $id;
|
||||
$token->token = str_random(32);
|
||||
$token->expires_at = Carbon::now()->addMinutes(5); // Expire in 5 Minutes
|
||||
$token->save();
|
||||
|
||||
$token_response = [
|
||||
'token' => $token->token,
|
||||
'expires_at' => $token->expires_at->toDateTimeString(),
|
||||
];
|
||||
|
||||
return response()->json($token_response, 200);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -232,7 +232,7 @@ class ServiceController extends Controller
|
|||
]));
|
||||
Alert::success('Successfully added new variable to this option.')->flash();
|
||||
|
||||
return redirect()->route('admin.services.option', [$service, $option])->withInput();
|
||||
return redirect()->route('admin.services.option', [$service, $option]);
|
||||
} catch (DisplayValidationException $ex) {
|
||||
return redirect()->route('admin.services.option.variable.new', [$service, $option])->withErrors(json_decode($ex->getMessage()))->withInput();
|
||||
} catch (DisplayException $ex) {
|
||||
|
|
|
@ -33,16 +33,14 @@ use Pterodactyl\Http\Controllers\Controller;
|
|||
class LanguageController extends Controller
|
||||
{
|
||||
protected $languages = [
|
||||
'de' => 'Danish',
|
||||
'de' => 'German',
|
||||
'en' => 'English',
|
||||
'es' => 'Spanish',
|
||||
'fr' => 'French',
|
||||
'it' => 'Italian',
|
||||
'pl' => 'Polish',
|
||||
'et' => 'Estonian',
|
||||
'nb' => 'Norwegian',
|
||||
'nl' => 'Dutch',
|
||||
'pt' => 'Portuguese',
|
||||
'ro' => 'Romanian',
|
||||
'ru' => 'Russian',
|
||||
'se' => 'Swedish',
|
||||
'zh' => 'Chinese',
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
namespace Pterodactyl\Http\Controllers\Remote;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Pterodactyl\Models;
|
||||
use Illuminate\Http\Request;
|
||||
use Pterodactyl\Http\Controllers\Controller;
|
||||
|
@ -107,4 +108,29 @@ class RemoteController extends Controller
|
|||
|
||||
return response('', 201);
|
||||
}
|
||||
|
||||
public function getConfiguration(Request $request, $tokenString)
|
||||
{
|
||||
// Try to query the token and the node from the database
|
||||
try {
|
||||
$token = Models\NodeConfigurationToken::where('token', $tokenString)->firstOrFail();
|
||||
$node = Models\Node::findOrFail($token->node);
|
||||
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
|
||||
return response()->json(['error' => 'token_invalid'], 403);
|
||||
}
|
||||
|
||||
// Check if token is expired
|
||||
if ($token->expires_at->lt(Carbon::now())) {
|
||||
$token->delete();
|
||||
|
||||
return response()->json(['error' => 'token_expired'], 403);
|
||||
}
|
||||
|
||||
// Delete the token, it's one-time use
|
||||
$token->delete();
|
||||
|
||||
// Manually as getConfigurationAsJson() returns it in correct format already
|
||||
return response($node->getConfigurationAsJson(), 200)
|
||||
->header('Content-Type', 'application/json');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,9 +28,9 @@ use DB;
|
|||
use Log;
|
||||
use Uuid;
|
||||
use Alert;
|
||||
use Javascript;
|
||||
use Pterodactyl\Models;
|
||||
use Illuminate\Http\Request;
|
||||
use InvalidArgumentException;
|
||||
use Pterodactyl\Exceptions\DisplayException;
|
||||
use Pterodactyl\Http\Controllers\Controller;
|
||||
use Pterodactyl\Repositories\ServerRepository;
|
||||
|
@ -49,24 +49,6 @@ class ServerController extends Controller
|
|||
//
|
||||
}
|
||||
|
||||
public function getJavascript(Request $request, $uuid, $folder, $file)
|
||||
{
|
||||
$server = Models\Server::getByUUID($uuid);
|
||||
|
||||
$info = pathinfo($file);
|
||||
$routeFile = str_replace('/', '.', $info['dirname']) . '.' . $info['filename'];
|
||||
try {
|
||||
return response()->view('server.js.' . $folder . '.' . $routeFile, [
|
||||
'server' => $server,
|
||||
'node' => Models\Node::find($server->node),
|
||||
])->header('Content-Type', 'application/javascript');
|
||||
} catch (InvalidArgumentException $ex) {
|
||||
return abort(404);
|
||||
} catch (\Exception $ex) {
|
||||
throw $ex;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders server index page for specified server.
|
||||
*
|
||||
|
@ -77,6 +59,13 @@ class ServerController extends Controller
|
|||
{
|
||||
$server = Models\Server::getByUUID($request->route()->server);
|
||||
|
||||
Javascript::put([
|
||||
'meta' => [
|
||||
'saveFile' => route('server.files.save', $server->uuidShort),
|
||||
'csrfToken' => csrf_token(),
|
||||
],
|
||||
]);
|
||||
|
||||
return view('server.index', [
|
||||
'server' => $server,
|
||||
'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
|
||||
|
@ -90,14 +79,34 @@ class ServerController extends Controller
|
|||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function getFiles(Request $request)
|
||||
public function getFiles(Request $request, $uuid)
|
||||
{
|
||||
$server = Models\Server::getByUUID($request->route()->server);
|
||||
$server = Models\Server::getByUUID($uuid);
|
||||
$this->authorize('list-files', $server);
|
||||
|
||||
$node = Models\Node::find($server->node);
|
||||
|
||||
Javascript::put([
|
||||
'server' => collect($server->makeVisible('daemonSecret'))->only('uuid', 'uuidShort', 'daemonSecret'),
|
||||
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
|
||||
'meta' => [
|
||||
'directoryList' => route('server.files.directory-list', $server->uuidShort),
|
||||
'csrftoken' => csrf_token(),
|
||||
],
|
||||
'permissions' => [
|
||||
'moveFiles' => $request->user()->can('move-files', $server),
|
||||
'copyFiles' => $request->user()->can('copy-files', $server),
|
||||
'compressFiles' => $request->user()->can('compress-files', $server),
|
||||
'decompressFiles' => $request->user()->can('decompress-files', $server),
|
||||
'createFiles' => $request->user()->can('create-files', $server),
|
||||
'downloadFiles' => $request->user()->can('download-files', $server),
|
||||
'deleteFiles' => $request->user()->can('delete-files', $server),
|
||||
],
|
||||
]);
|
||||
|
||||
return view('server.files.index', [
|
||||
'server' => $server,
|
||||
'node' => Models\Node::find($server->node),
|
||||
'node' => $node,
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -107,9 +116,9 @@ class ServerController extends Controller
|
|||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function getAddFile(Request $request)
|
||||
public function getAddFile(Request $request, $uuid)
|
||||
{
|
||||
$server = Models\Server::getByUUID($request->route()->server);
|
||||
$server = Models\Server::getByUUID($uuid);
|
||||
$this->authorize('add-files', $server);
|
||||
|
||||
return view('server.files.add', [
|
||||
|
|
|
@ -286,6 +286,11 @@ class AdminRoutes
|
|||
'as' => 'admin.nodes.delete',
|
||||
'uses' => 'Admin\NodesController@deleteNode',
|
||||
]);
|
||||
|
||||
$router->get('/{id}/configurationtoken', [
|
||||
'as' => 'admin.nodes.configuration-token',
|
||||
'uses' => 'Admin\NodesController@getConfigurationToken',
|
||||
]);
|
||||
});
|
||||
|
||||
// Location Routes
|
||||
|
|
|
@ -46,6 +46,11 @@ class RemoteRoutes
|
|||
'as' => 'remote.event',
|
||||
'uses' => 'Remote\RemoteController@event',
|
||||
]);
|
||||
|
||||
$router->get('configuration/{token}', [
|
||||
'as' => 'remote.configuration',
|
||||
'uses' => 'Remote\RemoteController@getConfiguration',
|
||||
]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -166,15 +166,6 @@ class ServerRoutes
|
|||
'uses' => 'Server\AjaxController@postResetDatabasePassword',
|
||||
]);
|
||||
});
|
||||
|
||||
// Assorted AJAX Routes
|
||||
$router->group(['prefix' => 'js'], function ($server) use ($router) {
|
||||
// Returns Server Status
|
||||
$router->get('{folder}/{file}', [
|
||||
'as' => 'server.js',
|
||||
'uses' => 'Server\ServerController@getJavascript',
|
||||
])->where('file', '.*');
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue