From 17796fb1c40d60be3d759a85d13042862ec4f4eb Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Tue, 21 Aug 2018 21:47:01 -0700 Subject: [PATCH] Add basic database listing for server --- .../Api/Client/Servers/DatabaseController.php | 42 +++++++ .../Client/Servers/GetDatabasesRequest.php | 20 ++++ .../Eloquent/DatabaseRepository.php | 2 +- .../Api/Client/DatabaseTransformer.php | 69 +++++++++++ .../scripts/components/server/Server.vue | 4 +- .../components/server/ServerDatabases.vue | 13 -- .../assets/scripts/components/server/index.js | 2 +- .../components/server/subpages/Console.vue | 2 +- .../components/server/subpages/Databases.vue | 112 ++++++++++++++++++ .../server/subpages/FileManager.vue | 2 +- resources/assets/scripts/helpers/ziggy.js | 2 +- resources/assets/scripts/router.js | 4 +- routes/api-client.php | 4 + 13 files changed, 255 insertions(+), 23 deletions(-) create mode 100644 app/Http/Controllers/Api/Client/Servers/DatabaseController.php create mode 100644 app/Http/Requests/Api/Client/Servers/GetDatabasesRequest.php create mode 100644 app/Transformers/Api/Client/DatabaseTransformer.php delete mode 100644 resources/assets/scripts/components/server/ServerDatabases.vue create mode 100644 resources/assets/scripts/components/server/subpages/Databases.vue diff --git a/app/Http/Controllers/Api/Client/Servers/DatabaseController.php b/app/Http/Controllers/Api/Client/Servers/DatabaseController.php new file mode 100644 index 00000000..34f0c0e9 --- /dev/null +++ b/app/Http/Controllers/Api/Client/Servers/DatabaseController.php @@ -0,0 +1,42 @@ +repository = $repository; + } + + /** + * @param \Pterodactyl\Http\Requests\Api\Client\Servers\GetDatabasesRequest $request + * @return array + */ + public function index(GetDatabasesRequest $request): array + { + $databases = $this->repository->getDatabasesForServer($request->getModel(Server::class)->id); + + return $this->fractal->collection($databases) + ->transformWith($this->getTransformer(DatabaseTransformer::class)) + ->toArray(); + } +} diff --git a/app/Http/Requests/Api/Client/Servers/GetDatabasesRequest.php b/app/Http/Requests/Api/Client/Servers/GetDatabasesRequest.php new file mode 100644 index 00000000..1c8b201a --- /dev/null +++ b/app/Http/Requests/Api/Client/Servers/GetDatabasesRequest.php @@ -0,0 +1,20 @@ +user()->can('view-databases', $this->getModel(Server::class)); + } +} diff --git a/app/Repositories/Eloquent/DatabaseRepository.php b/app/Repositories/Eloquent/DatabaseRepository.php index d3b615b9..a159324b 100644 --- a/app/Repositories/Eloquent/DatabaseRepository.php +++ b/app/Repositories/Eloquent/DatabaseRepository.php @@ -76,7 +76,7 @@ class DatabaseRepository extends EloquentRepository implements DatabaseRepositor */ public function getDatabasesForServer(int $server): Collection { - return $this->getBuilder()->where('server_id', $server)->get($this->getColumns()); + return $this->getBuilder()->with('host')->where('server_id', $server)->get($this->getColumns()); } /** diff --git a/app/Transformers/Api/Client/DatabaseTransformer.php b/app/Transformers/Api/Client/DatabaseTransformer.php new file mode 100644 index 00000000..6bc7c146 --- /dev/null +++ b/app/Transformers/Api/Client/DatabaseTransformer.php @@ -0,0 +1,69 @@ +encrypter = $encrypter; + } + + /** + * @return string + */ + public function getResourceName(): string + { + return Database::RESOURCE_NAME; + } + + /** + * @param \Pterodactyl\Models\Database $model + * @return array + */ + public function transform(Database $model): array + { + $model->loadMissing('host'); + + return [ + 'host' => [ + 'address' => $model->getRelation('host')->host, + 'port' => $model->getRelation('host')->port, + ], + 'name' => $model->database, + 'username' => $model->username, + 'connections_from' => $model->remote, + ]; + } + + /** + * Include the database password in the request. + * + * @param \Pterodactyl\Models\Database $model + * @return \League\Fractal\Resource\Item + */ + public function includePassword(Database $model): Item + { + return $this->item($model, function (Database $model) { + return [ + 'password' => $this->encrypter->decrypt($model->password), + ]; + }, 'database_password'); + } +} diff --git a/resources/assets/scripts/components/server/Server.vue b/resources/assets/scripts/components/server/Server.vue index c830c453..50c265c6 100644 --- a/resources/assets/scripts/components/server/Server.vue +++ b/resources/assets/scripts/components/server/Server.vue @@ -51,9 +51,7 @@ --> -
- -
+ diff --git a/resources/assets/scripts/components/server/ServerDatabases.vue b/resources/assets/scripts/components/server/ServerDatabases.vue deleted file mode 100644 index 9ab21389..00000000 --- a/resources/assets/scripts/components/server/ServerDatabases.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/resources/assets/scripts/components/server/index.js b/resources/assets/scripts/components/server/index.js index b4c4378f..ac1f6705 100644 --- a/resources/assets/scripts/components/server/index.js +++ b/resources/assets/scripts/components/server/index.js @@ -1,7 +1,7 @@ export {default as Server} from './Server'; export {default as ServerAllocations} from './ServerAllocations'; export {default as ConsolePage} from './subpages/Console'; -export {default as ServerDatabases} from './ServerDatabases'; +export {default as DatabasesPage} from './subpages/Databases'; export {default as FileManagerPage} from './subpages/FileManager'; export {default as ServerSchedules} from './ServerSchedules'; export {default as ServerSettings} from './ServerSettings'; diff --git a/resources/assets/scripts/components/server/subpages/Console.vue b/resources/assets/scripts/components/server/subpages/Console.vue index 87fcd6ec..7048d95a 100644 --- a/resources/assets/scripts/components/server/subpages/Console.vue +++ b/resources/assets/scripts/components/server/subpages/Console.vue @@ -1,5 +1,5 @@