Cleanup mount code; automatically include the mount in the configuration

This commit is contained in:
Dane Everitt 2020-09-13 09:59:54 -07:00
parent 8c6c271916
commit 9a21584c42
No known key found for this signature in database
GPG Key ID: EEA66103B3D71F53
8 changed files with 69 additions and 20 deletions

View File

@ -4,9 +4,8 @@ namespace Pterodactyl\Contracts\Repository;
use Pterodactyl\Models\Pack; use Pterodactyl\Models\Pack;
use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Pterodactyl\Contracts\Repository\Attributes\SearchableInterface;
interface PackRepositoryInterface extends RepositoryInterface, SearchableInterface interface PackRepositoryInterface extends RepositoryInterface
{ {
/** /**
* Return a pack with the associated server models attached to it. * Return a pack with the associated server models attached to it.

View File

@ -12,6 +12,7 @@ namespace Pterodactyl\Http\Controllers\Admin;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Pterodactyl\Models\Pack; use Pterodactyl\Models\Pack;
use Prologue\Alerts\AlertsMessageBag; use Prologue\Alerts\AlertsMessageBag;
use Spatie\QueryBuilder\QueryBuilder;
use Pterodactyl\Http\Controllers\Controller; use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Services\Packs\ExportPackService; use Pterodactyl\Services\Packs\ExportPackService;
use Pterodactyl\Services\Packs\PackUpdateService; use Pterodactyl\Services\Packs\PackUpdateService;
@ -114,7 +115,7 @@ class PackController extends Controller
public function index(Request $request) public function index(Request $request)
{ {
return view('admin.packs.index', [ return view('admin.packs.index', [
'packs' => $this->repository->setSearchTerm($request->input('query'))->paginateWithEggAndServerCount(), 'packs' => $this->repository->paginateWithEggAndServerCount(),
]); ]);
} }

23
app/Models/MountNode.php Normal file
View File

@ -0,0 +1,23 @@
<?php
namespace Pterodactyl\Models;
use Illuminate\Database\Eloquent\Model;
class MountNode extends Model
{
/**
* @var string
*/
protected $table = 'mount_node';
/**
* @var null
*/
protected $primaryKey = null;
/**
* @var bool
*/
public $incrementing = false;
}

View File

@ -0,0 +1,23 @@
<?php
namespace Pterodactyl\Models;
use Illuminate\Database\Eloquent\Model;
class MountServer extends Model
{
/**
* @var string
*/
protected $table = 'mount_server';
/**
* @var null
*/
protected $primaryKey = null;
/**
* @var bool
*/
public $incrementing = false;
}

View File

@ -33,6 +33,7 @@ use Illuminate\Contracts\Encryption\Encrypter;
* @property \Carbon\Carbon $updated_at * @property \Carbon\Carbon $updated_at
* *
* @property \Pterodactyl\Models\Location $location * @property \Pterodactyl\Models\Location $location
* @property \Pterodactyl\Models\Mount[]|\Illuminate\Database\Eloquent\Collection $mounts
* @property \Pterodactyl\Models\Server[]|\Illuminate\Database\Eloquent\Collection $servers * @property \Pterodactyl\Models\Server[]|\Illuminate\Database\Eloquent\Collection $servers
* @property \Pterodactyl\Models\Allocation[]|\Illuminate\Database\Eloquent\Collection $allocations * @property \Pterodactyl\Models\Allocation[]|\Illuminate\Database\Eloquent\Collection $allocations
*/ */
@ -182,6 +183,7 @@ class Node extends Model
'bind_port' => $this->daemonSFTP, 'bind_port' => $this->daemonSFTP,
], ],
], ],
'allowed_mounts' => $this->mounts->pluck('source')->toArray(),
'remote' => route('index'), 'remote' => route('index'),
]; ];
} }
@ -219,6 +221,14 @@ class Node extends Model
); );
} }
/**
* @return \Illuminate\Database\Eloquent\Relations\HasManyThrough
*/
public function mounts()
{
return $this->hasManyThrough(Mount::class, MountNode::class, 'node_id', 'id', 'id', 'mount_id');
}
/** /**
* Gets the location associated with a node. * Gets the location associated with a node.
* *

View File

@ -367,10 +367,10 @@ class Server extends Model
/** /**
* Returns all mounts that have this server has mounted. * Returns all mounts that have this server has mounted.
* *
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough
*/ */
public function mounts() public function mounts()
{ {
return $this->belongsToMany(Mount::class); return $this->hasManyThrough(Mount::class, MountServer::class, 'server_id', 'id', 'id', 'mount_id');
} }
} }

View File

@ -47,7 +47,6 @@ class PackRepository extends EloquentRepository implements PackRepositoryInterfa
public function paginateWithEggAndServerCount(): LengthAwarePaginator public function paginateWithEggAndServerCount(): LengthAwarePaginator
{ {
return $this->getBuilder()->with('egg')->withCount('servers') return $this->getBuilder()->with('egg')->withCount('servers')
->search($this->getSearchTerm())
->paginate(50, $this->getColumns()); ->paginate(50, $this->getColumns());
} }
} }

View File

@ -9,6 +9,7 @@
namespace Pterodactyl\Services\Servers; namespace Pterodactyl\Services\Servers;
use Pterodactyl\Models\Mount;
use Pterodactyl\Models\Server; use Pterodactyl\Models\Server;
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface; use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
@ -66,22 +67,9 @@ class ServerConfigurationStructureService
* *
* @param \Pterodactyl\Models\Server $server * @param \Pterodactyl\Models\Server $server
* @return array * @return array
*
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
*/ */
protected function returnCurrentFormat(Server $server) protected function returnCurrentFormat(Server $server)
{ {
$mounts = $server->mounts;
foreach ($mounts as $mount) {
unset($mount->id);
unset($mount->uuid);
unset($mount->name);
unset($mount->description);
$mount->read_only = $mount->read_only == 1;
unset($mount->user_mountable);
unset($mount->pivot);
}
return [ return [
'uuid' => $server->uuid, 'uuid' => $server->uuid,
'suspended' => (bool) $server->suspended, 'suspended' => (bool) $server->suspended,
@ -108,7 +96,13 @@ class ServerConfigurationStructureService
], ],
'mappings' => $server->getAllocationMappings(), 'mappings' => $server->getAllocationMappings(),
], ],
'mounts' => $mounts, 'mounts' => $server->mounts->map(function (Mount $mount) {
return [
'source' => $mount->source,
'target' => $mount->target,
'read_only' => $mount->read_only,
];
}),
]; ];
} }