Complete implementation of new Server model.

This commit is contained in:
Dane Everitt 2017-02-02 19:41:38 -05:00
parent 644ee85f59
commit 3114b7e52a
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
10 changed files with 170 additions and 202 deletions

View file

@ -34,17 +34,10 @@ class ServerController extends BaseController
{
public function info(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$node = Models\Node::findOrFail($server->node_id);
$client = Models\Node::guzzleRequest($node->id);
$server = Models\Server::byUuid($uuid)->load('allocations');
try {
$response = $client->request('GET', '/server', [
'headers' => [
'X-Access-Token' => $server->daemonSecret,
'X-Access-Server' => $server->uuid,
],
]);
$response = $server->guzzleClient()->request('GET', '/server');
$json = json_decode($response->getBody());
$daemon = [
@ -59,8 +52,7 @@ class ServerController extends BaseController
Log::error($ex);
}
$allocations = Models\Allocation::select('id', 'ip', 'port', 'ip_alias as alias')->where('assigned_to', $server->id)->get();
foreach ($allocations as &$allocation) {
foreach ($server->allocations as &$allocation) {
$allocation->default = ($allocation->id === $server->allocation_id);
unset($allocation->id);
}
@ -69,7 +61,7 @@ class ServerController extends BaseController
'uuidShort' => $server->uuidShort,
'uuid' => $server->uuid,
'name' => $server->name,
'node' => $node->name,
'node' => $server->node->name,
'limits' => [
'memory' => $server->memory,
'swap' => $server->swap,
@ -78,7 +70,7 @@ class ServerController extends BaseController
'cpu' => $server->cpu,
'oom_disabled' => (bool) $server->oom_disabled,
],
'allocations' => $allocations,
'allocations' => $server->allocations,
'sftp' => [
'username' => (Auth::user()->can('view-sftp', $server)) ? $server->username : null,
],
@ -91,16 +83,10 @@ class ServerController extends BaseController
public function power(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$client = Models\Node::guzzleRequest($server->node_id);
$server = Models\Server::byUuid($uuid);
Auth::user()->can('power-' . $request->input('action'), $server);
$res = $client->request('PUT', '/server/power', [
'headers' => [
'X-Access-Server' => $server->uuid,
'X-Access-Token' => $server->daemonSecret,
],
$res = $server->guzzleClient()->request('PUT', '/server/power', [
'exceptions' => false,
'json' => [
'action' => $request->input('action'),

View file

@ -67,18 +67,14 @@ class AjaxController extends Controller
*/
public function getStatus(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
if (! $server) {
return response()->json([], 404);
}
$client = Models\Node::guzzleRequest($server->node_id);
try {
$res = $client->request('GET', '/server', [
'headers' => Models\Server::getGuzzleHeaders($uuid),
]);
$res = $server->guzzleClient()->request('GET', '/server');
if ($res->getStatusCode() === 200) {
return response()->json(json_decode($res->getBody()));
}
@ -98,10 +94,10 @@ class AjaxController extends Controller
*/
public function postDirectoryList(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$this->directory = '/' . trim(urldecode($request->input('directory', '/')), '/');
$server = Models\Server::byUuid($uuid);
$this->authorize('list-files', $server);
$this->directory = '/' . trim(urldecode($request->input('directory', '/')), '/');
$prevDir = [
'header' => ($this->directory !== '/') ? $this->directory : '',
];
@ -149,7 +145,7 @@ class AjaxController extends Controller
*/
public function postSaveFile(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('save-files', $server);
$controller = new Repositories\Daemon\FileRepository($uuid);
@ -175,7 +171,7 @@ class AjaxController extends Controller
*/
public function postSetPrimary(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid)->load('allocations');
$this->authorize('set-connection', $server);
if ((int) $request->input('allocation') === $server->allocation_id) {
@ -185,7 +181,7 @@ class AjaxController extends Controller
}
try {
$allocation = Models\Allocation::where('id', $request->input('allocation'))->where('assigned_to', $server->id)->first();
$allocation = $server->allocations->where('id', $request->input('allocation'))->where('assigned_to', $server->id)->first();
if (! $allocation) {
return response()->json([
'error' => 'No allocation matching your request was found in the system.',
@ -217,10 +213,10 @@ class AjaxController extends Controller
public function postResetDatabasePassword(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$database = Models\Database::where('id', $request->input('database'))->where('server_id', $server->id)->firstOrFail();
$server = Models\Server::byUuid($uuid);
$this->authorize('reset-db-password', $server);
$database = Models\Database::where('id', $request->input('database'))->where('server_id', $server->id)->firstOrFail();
try {
$repo = new Repositories\DatabaseRepository;
$password = str_random(16);

View file

@ -59,9 +59,7 @@ class ServerController extends Controller
{
$server = Models\Server::byUuid($uuid);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'daemonSecret', 'username']),
'node' => collect($server->node_id)->only('fqdn', 'scheme', 'daemonListen'),
$server->js([
'meta' => [
'saveFile' => route('server.files.save', $server->uuidShort),
'csrfToken' => csrf_token(),
@ -70,7 +68,7 @@ class ServerController extends Controller
return view('server.index', [
'server' => $server,
'node' => $server->node_id,
'node' => $server->node,
]);
}
@ -82,14 +80,10 @@ class ServerController extends Controller
*/
public function getFiles(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('list-files', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only('uuid', 'uuidShort', 'daemonSecret'),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
$server->js([
'meta' => [
'directoryList' => route('server.files.directory-list', $server->uuidShort),
'csrftoken' => csrf_token(),
@ -107,7 +101,7 @@ class ServerController extends Controller
return view('server.files.index', [
'server' => $server,
'node' => $node,
'node' => $server->node,
]);
}
@ -119,18 +113,14 @@ class ServerController extends Controller
*/
public function getAddFile(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('add-files', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.files.add', [
'server' => $server,
'node' => $node,
'node' => $server->node,
'directory' => (in_array($request->get('dir'), [null, '/', ''])) ? '' : trim($request->get('dir'), '/') . '/',
]);
}
@ -145,9 +135,8 @@ class ServerController extends Controller
*/
public function getEditFile(Request $request, $uuid, $file)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('edit-files', $server);
$node = Models\Node::find($server->node_id);
$fileInfo = (object) pathinfo($file);
$controller = new FileRepository($uuid);
@ -165,15 +154,13 @@ class ServerController extends Controller
return redirect()->route('server.files.index', $uuid);
}
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
$server->js([
'stat' => $fileContent['stat'],
]);
return view('server.files.edit', [
'server' => $server,
'node' => $node,
'node' => $server->node,
'file' => $file,
'stat' => $fileContent['stat'],
'contents' => $fileContent['file']->content,
@ -191,9 +178,7 @@ class ServerController extends Controller
*/
public function getDownloadFile(Request $request, $uuid, $file)
{
$server = Models\Server::getByUUID($uuid);
$node = Models\Node::find($server->node_id);
$server = Models\Server::byUuid($uuid);
$this->authorize('download-files', $server);
$download = new Models\Download;
@ -204,38 +189,31 @@ class ServerController extends Controller
$download->save();
return redirect($node->scheme . '://' . $node->fqdn . ':' . $node->daemonListen . '/server/file/download/' . $download->token);
return redirect($server->node->scheme . '://' . $server->node->fqdn . ':' . $server->node->daemonListen . '/server/file/download/' . $download->token);
}
public function getAllocation(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('view-allocation', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.settings.allocation', [
'server' => $server,
'allocations' => Models\Allocation::where('assigned_to', $server->id)->orderBy('ip', 'asc')->orderBy('port', 'asc')->get(),
'node' => $node,
'server' => $server->load(['allocations' => function ($query) {
$query->orderBy('ip', 'asc');
$query->orderBy('port', 'asc');
}]),
'node' => $server->node,
]);
}
public function getStartup(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$server->load(['allocations' => function ($query) use ($server) {
$query->where('id', $server->allocation_id);
}]);
$this->authorize('view-startup', $server);
$node = Models\Node::find($server->node_id);
$allocation = Models\Allocation::findOrFail($server->allocation_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$variables = Models\ServiceVariables::select(
'service_variables.*',
@ -252,6 +230,7 @@ class ServerController extends Controller
->where('services.id', $server->service_id)
->first();
$allocation = $server->allocations->pop();
$serverVariables = [
'{{SERVER_MEMORY}}' => $server->memory,
'{{SERVER_IP}}' => $allocation->ip,
@ -260,13 +239,15 @@ class ServerController extends Controller
$processed = str_replace(array_keys($serverVariables), array_values($serverVariables), $server->startup);
foreach ($variables as &$variable) {
$replace = ($variable->user_viewable === 1) ? $variable->a_serverValue : '**';
$replace = ($variable->user_viewable === 1) ? $variable->a_serverValue : '[hidden]';
$processed = str_replace('{{' . $variable->env_variable . '}}', $replace, $processed);
}
$server->js();
return view('server.settings.startup', [
'server' => $server,
'node' => Models\Node::find($server->node_id),
'node' => $server->node,
'variables' => $variables->where('user_viewable', 1),
'service' => $service,
'processedStartup' => $processed,
@ -275,18 +256,13 @@ class ServerController extends Controller
public function getDatabases(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('view-databases', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.settings.databases', [
'server' => $server,
'node' => $node,
'node' => $server->node,
'databases' => Models\Database::select('databases.*', 'database_servers.host as a_host', 'database_servers.port as a_port')
->where('server_id', $server->id)
->join('database_servers', 'database_servers.id', '=', 'databases.db_server')
@ -296,24 +272,19 @@ class ServerController extends Controller
public function getSFTP(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('view-sftp', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.settings.sftp', [
'server' => $server,
'node' => $node,
'node' => $server->node,
]);
}
public function postSettingsSFTP(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('reset-sftp', $server);
try {
@ -334,7 +305,7 @@ class ServerController extends Controller
public function postSettingsStartup(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('edit-startup', $server);
try {

View file

@ -50,18 +50,14 @@ class SubuserController extends Controller
public function getIndex(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('list-subusers', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.users.index', [
'server' => $server,
'node' => $node,
'node' => $server->node,
'subusers' => Models\Subuser::select('subusers.*', 'users.email', 'users.username', 'users.use_totp')
->join('users', 'users.id', '=', 'subusers.user_id')
->where('server_id', $server->id)
@ -71,14 +67,8 @@ class SubuserController extends Controller
public function getView(Request $request, $uuid, $id)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('view-subuser', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$subuser = Models\Subuser::select('subusers.*', 'users.email as a_userEmail')
->join('users', 'users.id', '=', 'subusers.user_id')
@ -98,9 +88,11 @@ class SubuserController extends Controller
$permissions[$perm->permission] = true;
}
$server->js();
return view('server.users.view', [
'server' => $server,
'node' => $node,
'node' => $server->node,
'subuser' => $subuser,
'permissions' => $permissions,
]);
@ -108,7 +100,7 @@ class SubuserController extends Controller
public function postView(Request $request, $uuid, $id)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('edit-subuser', $server);
$subuser = Models\Subuser::where(DB::raw('md5(id)'), $id)->where('server_id', $server->id)->first();
@ -148,24 +140,19 @@ class SubuserController extends Controller
public function getNew(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('create-subuser', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.users.new', [
'server' => $server,
'node' => $node,
'node' => $server->node,
]);
}
public function postNew(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('create-subuser', $server);
try {
@ -193,7 +180,7 @@ class SubuserController extends Controller
public function deleteSubuser(Request $request, $uuid, $id)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('delete-subuser', $server);
try {

View file

@ -43,19 +43,14 @@ class TaskController extends Controller
public function getIndex(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid)->load('tasks');
$this->authorize('list-tasks', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.tasks.index', [
'server' => $server,
'node' => $node,
'tasks' => Models\Task::where('server', $server->id)->get(),
'node' => $server->node,
'tasks' => $server->tasks,
'actions' => [
'command' => trans('server.tasks.actions.command'),
'power' => trans('server.tasks.actions.power'),
@ -65,24 +60,19 @@ class TaskController extends Controller
public function getNew(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('create-task', $server);
$node = Models\Node::find($server->node_id);
Javascript::put([
'server' => collect($server->makeVisible('daemonSecret'))->only(['uuid', 'uuidShort', 'daemonSecret', 'username']),
'node' => collect($node)->only('fqdn', 'scheme', 'daemonListen'),
]);
$server->js();
return view('server.tasks.new', [
'server' => $server,
'node' => $node,
'node' => $server->node,
]);
}
public function postNew(Request $request, $uuid)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid);
$this->authorize('create-task', $server);
try {
@ -106,12 +96,11 @@ class TaskController extends Controller
public function deleteTask(Request $request, $uuid, $id)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid)->load('tasks');
$this->authorize('delete-task', $server);
$task = Models\Task::findOrFail($id);
if (! $task || $server->id !== $task->server) {
$task = $server->tasks->where('id', $id)->first();
if (! $task) {
return response()->json([
'error' => 'No task by that ID was found associated with this server.',
], 404);
@ -133,12 +122,11 @@ class TaskController extends Controller
public function toggleTask(Request $request, $uuid, $id)
{
$server = Models\Server::getByUUID($uuid);
$server = Models\Server::byUuid($uuid)->load('tasks');
$this->authorize('toggle-task', $server);
$task = Models\Task::findOrFail($id);
if (! $task || $server->id !== $task->server) {
$task = $server->tasks->where('id', $id)->first();
if (! $task) {
return response()->json([
'error' => 'No task by that ID was found associated with this server.',
], 404);