Compare commits
1 commit
develop
...
replace-da
Author | SHA1 | Date | |
---|---|---|---|
|
9001755e10 |
10 changed files with 29 additions and 74 deletions
|
@ -1,14 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Pterodactyl\Contracts\Repository;
|
||||
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
interface DatabaseHostRepositoryInterface extends RepositoryInterface
|
||||
{
|
||||
/**
|
||||
* Return database hosts with a count of databases and the node
|
||||
* information for which it is attached.
|
||||
*/
|
||||
public function getWithViewDetails(): Collection;
|
||||
}
|
|
@ -5,7 +5,6 @@ namespace Pterodactyl\Extensions;
|
|||
use Pterodactyl\Models\DatabaseHost;
|
||||
use Illuminate\Contracts\Encryption\Encrypter;
|
||||
use Illuminate\Config\Repository as ConfigRepository;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
|
||||
|
||||
class DynamicDatabaseConnection
|
||||
{
|
||||
|
@ -18,20 +17,18 @@ class DynamicDatabaseConnection
|
|||
*/
|
||||
public function __construct(
|
||||
protected ConfigRepository $config,
|
||||
protected Encrypter $encrypter,
|
||||
protected DatabaseHostRepositoryInterface $repository
|
||||
protected Encrypter $encrypter
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a dynamic database connection entry to the runtime config.
|
||||
*
|
||||
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||
*/
|
||||
public function set(string $connection, DatabaseHost|int $host, string $database = 'mysql'): void
|
||||
{
|
||||
if (!$host instanceof DatabaseHost) {
|
||||
$host = $this->repository->find($host);
|
||||
$host = DatabaseHost::query()->findOrFail($host);
|
||||
}
|
||||
|
||||
$this->config->set('database.connections.' . $connection, [
|
||||
|
|
|
@ -12,11 +12,11 @@ use Illuminate\View\Factory as ViewFactory;
|
|||
use Pterodactyl\Http\Controllers\Controller;
|
||||
use Pterodactyl\Services\Databases\Hosts\HostUpdateService;
|
||||
use Pterodactyl\Http\Requests\Admin\DatabaseHostFormRequest;
|
||||
use Pterodactyl\Exceptions\Service\HasActiveServersException;
|
||||
use Pterodactyl\Services\Databases\Hosts\HostCreationService;
|
||||
use Pterodactyl\Services\Databases\Hosts\HostDeletionService;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
|
||||
|
||||
class DatabaseController extends Controller
|
||||
{
|
||||
|
@ -25,7 +25,6 @@ class DatabaseController extends Controller
|
|||
*/
|
||||
public function __construct(
|
||||
private AlertsMessageBag $alert,
|
||||
private DatabaseHostRepositoryInterface $repository,
|
||||
private DatabaseRepositoryInterface $databaseRepository,
|
||||
private HostCreationService $creationService,
|
||||
private HostDeletionService $deletionService,
|
||||
|
@ -40,22 +39,25 @@ class DatabaseController extends Controller
|
|||
*/
|
||||
public function index(): View
|
||||
{
|
||||
$hosts = DatabaseHost::query()
|
||||
->withCount('databases')
|
||||
->with('node')
|
||||
->get();
|
||||
|
||||
return $this->view->make('admin.databases.index', [
|
||||
'locations' => $this->locationRepository->getAllWithNodes(),
|
||||
'hosts' => $this->repository->getWithViewDetails(),
|
||||
'hosts' => $hosts,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display database host to user.
|
||||
*
|
||||
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||
*/
|
||||
public function view(int $host): View
|
||||
{
|
||||
return $this->view->make('admin.databases.view', [
|
||||
'locations' => $this->locationRepository->getAllWithNodes(),
|
||||
'host' => $this->repository->find($host),
|
||||
'host' => DatabaseHost::query()->findOrFail($host),
|
||||
'databases' => $this->databaseRepository->getDatabasesForHost($host),
|
||||
]);
|
||||
}
|
||||
|
@ -118,7 +120,7 @@ class DatabaseController extends Controller
|
|||
/**
|
||||
* Handle request to delete a database host.
|
||||
*
|
||||
* @throws \Pterodactyl\Exceptions\Service\HasActiveServersException
|
||||
* @throws HasActiveServersException
|
||||
*/
|
||||
public function delete(int $host): RedirectResponse
|
||||
{
|
||||
|
|
|
@ -7,6 +7,7 @@ use Illuminate\View\View;
|
|||
use Illuminate\Http\Request;
|
||||
use Pterodactyl\Models\Nest;
|
||||
use Pterodactyl\Models\Server;
|
||||
use Pterodactyl\Models\DatabaseHost;
|
||||
use Pterodactyl\Exceptions\DisplayException;
|
||||
use Pterodactyl\Http\Controllers\Controller;
|
||||
use Pterodactyl\Services\Servers\EnvironmentService;
|
||||
|
@ -17,7 +18,6 @@ use Pterodactyl\Repositories\Eloquent\MountRepository;
|
|||
use Pterodactyl\Repositories\Eloquent\ServerRepository;
|
||||
use Pterodactyl\Traits\Controllers\JavascriptInjection;
|
||||
use Pterodactyl\Repositories\Eloquent\LocationRepository;
|
||||
use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository;
|
||||
|
||||
class ServerViewController extends Controller
|
||||
{
|
||||
|
@ -27,7 +27,6 @@ class ServerViewController extends Controller
|
|||
* ServerViewController constructor.
|
||||
*/
|
||||
public function __construct(
|
||||
private DatabaseHostRepository $databaseHostRepository,
|
||||
private LocationRepository $locationRepository,
|
||||
private MountRepository $mountRepository,
|
||||
private NestRepository $nestRepository,
|
||||
|
@ -97,7 +96,7 @@ class ServerViewController extends Controller
|
|||
public function database(Request $request, Server $server): View
|
||||
{
|
||||
return $this->view->make('admin.servers.view.database', [
|
||||
'hosts' => $this->databaseHostRepository->all(),
|
||||
'hosts' => DatabaseHost::all(),
|
||||
'server' => $server,
|
||||
]);
|
||||
}
|
||||
|
|
|
@ -25,7 +25,6 @@ use Pterodactyl\Services\Databases\DatabasePasswordService;
|
|||
use Pterodactyl\Services\Servers\DetailsModificationService;
|
||||
use Pterodactyl\Services\Servers\StartupModificationService;
|
||||
use Pterodactyl\Contracts\Repository\NestRepositoryInterface;
|
||||
use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository;
|
||||
use Pterodactyl\Services\Databases\DatabaseManagementService;
|
||||
use Illuminate\Contracts\Config\Repository as ConfigRepository;
|
||||
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
|
||||
|
@ -48,7 +47,6 @@ class ServersController extends Controller
|
|||
protected DatabaseManagementService $databaseManagementService,
|
||||
protected DatabasePasswordService $databasePasswordService,
|
||||
protected DatabaseRepositoryInterface $databaseRepository,
|
||||
protected DatabaseHostRepository $databaseHostRepository,
|
||||
protected ServerDeletionService $deletionService,
|
||||
protected DetailsModificationService $detailsModificationService,
|
||||
protected ReinstallServerService $reinstallService,
|
||||
|
|
|
@ -23,7 +23,6 @@ use Pterodactyl\Contracts\Repository\NestRepositoryInterface;
|
|||
use Pterodactyl\Contracts\Repository\NodeRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\TaskRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\UserRepositoryInterface;
|
||||
use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository;
|
||||
use Pterodactyl\Contracts\Repository\ApiKeyRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
|
||||
use Pterodactyl\Repositories\Eloquent\ServerVariableRepository;
|
||||
|
@ -35,7 +34,6 @@ use Pterodactyl\Contracts\Repository\ScheduleRepositoryInterface;
|
|||
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\AllocationRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\ServerVariableRepositoryInterface;
|
||||
|
||||
class RepositoryServiceProvider extends ServiceProvider
|
||||
|
@ -49,7 +47,6 @@ class RepositoryServiceProvider extends ServiceProvider
|
|||
$this->app->bind(AllocationRepositoryInterface::class, AllocationRepository::class);
|
||||
$this->app->bind(ApiKeyRepositoryInterface::class, ApiKeyRepository::class);
|
||||
$this->app->bind(DatabaseRepositoryInterface::class, DatabaseRepository::class);
|
||||
$this->app->bind(DatabaseHostRepositoryInterface::class, DatabaseHostRepository::class);
|
||||
$this->app->bind(EggRepositoryInterface::class, EggRepository::class);
|
||||
$this->app->bind(EggVariableRepositoryInterface::class, EggVariableRepository::class);
|
||||
$this->app->bind(LocationRepositoryInterface::class, LocationRepository::class);
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Pterodactyl\Repositories\Eloquent;
|
||||
|
||||
use Illuminate\Support\Collection;
|
||||
use Pterodactyl\Models\DatabaseHost;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
|
||||
|
||||
class DatabaseHostRepository extends EloquentRepository implements DatabaseHostRepositoryInterface
|
||||
{
|
||||
/**
|
||||
* Return the model backing this repository.
|
||||
*/
|
||||
public function model(): string
|
||||
{
|
||||
return DatabaseHost::class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return database hosts with a count of databases and the node
|
||||
* information for which it is attached.
|
||||
*/
|
||||
public function getWithViewDetails(): Collection
|
||||
{
|
||||
return $this->getBuilder()->withCount('databases')->with('node')->get();
|
||||
}
|
||||
}
|
|
@ -7,7 +7,6 @@ use Illuminate\Database\DatabaseManager;
|
|||
use Illuminate\Database\ConnectionInterface;
|
||||
use Illuminate\Contracts\Encryption\Encrypter;
|
||||
use Pterodactyl\Extensions\DynamicDatabaseConnection;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
|
||||
|
||||
class HostCreationService
|
||||
{
|
||||
|
@ -18,8 +17,7 @@ class HostCreationService
|
|||
private ConnectionInterface $connection,
|
||||
private DatabaseManager $databaseManager,
|
||||
private DynamicDatabaseConnection $dynamic,
|
||||
private Encrypter $encrypter,
|
||||
private DatabaseHostRepositoryInterface $repository
|
||||
private Encrypter $encrypter
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -31,7 +29,8 @@ class HostCreationService
|
|||
public function handle(array $data): DatabaseHost
|
||||
{
|
||||
return $this->connection->transaction(function () use ($data) {
|
||||
$host = $this->repository->create([
|
||||
/** @var DatabaseHost $host */
|
||||
$host = DatabaseHost::query()->create([
|
||||
'password' => $this->encrypter->encrypt(array_get($data, 'password')),
|
||||
'name' => array_get($data, 'name'),
|
||||
'host' => array_get($data, 'host'),
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
namespace Pterodactyl\Services\Databases\Hosts;
|
||||
|
||||
use Pterodactyl\Models\DatabaseHost;
|
||||
use Pterodactyl\Exceptions\Service\HasActiveServersException;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
|
||||
|
||||
class HostDeletionService
|
||||
{
|
||||
|
@ -12,8 +12,7 @@ class HostDeletionService
|
|||
* HostDeletionService constructor.
|
||||
*/
|
||||
public function __construct(
|
||||
private DatabaseRepositoryInterface $databaseRepository,
|
||||
private DatabaseHostRepositoryInterface $repository
|
||||
private DatabaseRepositoryInterface $databaseRepository
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -21,7 +20,7 @@ class HostDeletionService
|
|||
* Delete a specified host from the Panel if no databases are
|
||||
* attached to it.
|
||||
*
|
||||
* @throws \Pterodactyl\Exceptions\Service\HasActiveServersException
|
||||
* @throws HasActiveServersException
|
||||
*/
|
||||
public function handle(int $host): int
|
||||
{
|
||||
|
@ -30,6 +29,11 @@ class HostDeletionService
|
|||
throw new HasActiveServersException(trans('exceptions.databases.delete_has_databases'));
|
||||
}
|
||||
|
||||
return $this->repository->delete($host);
|
||||
$host = DatabaseHost::query()->find($host);
|
||||
if ($host) {
|
||||
return $host->delete();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ use Illuminate\Database\DatabaseManager;
|
|||
use Illuminate\Database\ConnectionInterface;
|
||||
use Illuminate\Contracts\Encryption\Encrypter;
|
||||
use Pterodactyl\Extensions\DynamicDatabaseConnection;
|
||||
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
|
||||
|
||||
class HostUpdateService
|
||||
{
|
||||
|
@ -18,8 +17,7 @@ class HostUpdateService
|
|||
private ConnectionInterface $connection,
|
||||
private DatabaseManager $databaseManager,
|
||||
private DynamicDatabaseConnection $dynamic,
|
||||
private Encrypter $encrypter,
|
||||
private DatabaseHostRepositoryInterface $repository
|
||||
private Encrypter $encrypter
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -37,7 +35,9 @@ class HostUpdateService
|
|||
}
|
||||
|
||||
return $this->connection->transaction(function () use ($data, $hostId) {
|
||||
$host = $this->repository->update($hostId, $data);
|
||||
/** @var DatabaseHost $host */
|
||||
$host = DatabaseHost::query()->findOrFail($hostId);
|
||||
$host->update($data);
|
||||
$this->dynamic->set('dynamic', $host);
|
||||
$this->databaseManager->connection('dynamic')->select('SELECT 1 FROM dual');
|
||||
|
||||
|
|
Loading…
Reference in a new issue