From 54eaf8ab0faa679627cfe11a0c2a6d3759b204b3 Mon Sep 17 00:00:00 2001 From: notCharles Date: Sat, 13 Apr 2024 21:51:22 -0400 Subject: [PATCH 1/6] Change colums Closes https://github.com/pelican-dev/panel/issues/3 --- app/Console/Commands/Node/MakeNodeCommand.php | 6 +-- .../Admin/Nodes/NodeViewController.php | 2 +- .../Servers/ServerTransferController.php | 2 +- .../Application/Servers/ServerController.php | 2 +- .../Remote/SftpAuthenticationController.php | 2 +- .../Application/Nodes/StoreNodeRequest.php | 14 +++--- app/Models/Filters/AdminServerFilter.php | 2 +- app/Models/Filters/MultiFieldServerFilter.php | 2 +- app/Models/Node.php | 34 +++++++------- app/Models/Server.php | 6 +-- app/Notifications/AddedToServer.php | 2 +- app/Observers/SubuserObserver.php | 2 +- .../Servers/ServerCreationService.php | 4 +- .../Api/Application/NodeTransformer.php | 2 +- .../Api/Application/ServerTransformer.php | 2 +- .../Api/Client/ServerTransformer.php | 4 +- database/Factories/NodeFactory.php | 6 +-- database/Factories/ServerFactory.php | 2 +- ...dd_expires_at_column_to_api_keys_table.php | 28 ------------ .../2024_04_14_002250_update_column_names.php | 40 +++++++++++++++++ package.json | 4 +- resources/views/admin/nodes/index.blade.php | 2 +- resources/views/admin/nodes/new.blade.php | 12 ++--- .../views/admin/nodes/view/servers.blade.php | 2 +- .../views/admin/nodes/view/settings.blade.php | 8 ++-- resources/views/admin/servers/index.blade.php | 4 +- .../servers/partials/navigation.blade.php | 2 +- .../admin/servers/view/database.blade.php | 2 +- .../Api/Client/ClientControllerTest.php | 44 +++++++++---------- .../SftpAuthenticationControllerTest.php | 8 ++-- .../Servers/ServerCreationServiceTest.php | 2 +- 31 files changed, 133 insertions(+), 121 deletions(-) delete mode 100644 database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php create mode 100644 database/migrations/2024_04_14_002250_update_column_names.php diff --git a/app/Console/Commands/Node/MakeNodeCommand.php b/app/Console/Commands/Node/MakeNodeCommand.php index 6c370fa28..e92e11e7e 100644 --- a/app/Console/Commands/Node/MakeNodeCommand.php +++ b/app/Console/Commands/Node/MakeNodeCommand.php @@ -58,9 +58,9 @@ class MakeNodeCommand extends Command $data['disk'] = $this->option('maxDisk') ?? $this->ask('Enter the maximum amount of disk space'); $data['disk_overallocate'] = $this->option('overallocateDisk') ?? $this->ask('Enter the amount of memory to over allocate by, -1 will disable checking and 0 will prevent creating new server'); $data['upload_size'] = $this->option('uploadSize') ?? $this->ask('Enter the maximum filesize upload', '100'); - $data['daemonListen'] = $this->option('daemonListeningPort') ?? $this->ask('Enter the daemon listening port', '8080'); - $data['daemonSFTP'] = $this->option('daemonSFTPPort') ?? $this->ask('Enter the daemon SFTP listening port', '2022'); - $data['daemonBase'] = $this->option('daemonBase') ?? $this->ask('Enter the base folder', '/var/lib/panel/volumes'); + $data['daemon_listen'] = $this->option('daemonListeningPort') ?? $this->ask('Enter the daemon listening port', '8080'); + $data['daemon_sftp'] = $this->option('daemonSFTPPort') ?? $this->ask('Enter the daemon SFTP listening port', '2022'); + $data['daemon_base'] = $this->option('daemonBase') ?? $this->ask('Enter the base folder', '/var/lib/panel/volumes'); $node = $this->creationService->handle($data); $this->line('Successfully created a new node with the name ' . $data['name'] . ' and has an id of ' . $node->id . '.'); diff --git a/app/Http/Controllers/Admin/Nodes/NodeViewController.php b/app/Http/Controllers/Admin/Nodes/NodeViewController.php index 608d74fdd..3ab35c4e4 100644 --- a/app/Http/Controllers/Admin/Nodes/NodeViewController.php +++ b/app/Http/Controllers/Admin/Nodes/NodeViewController.php @@ -117,7 +117,7 @@ class NodeViewController extends Controller { $this->plainInject([ 'node' => Collection::wrap($node->makeVisible(['daemon_token_id', 'daemon_token'])) - ->only(['scheme', 'fqdn', 'daemonListen', 'daemon_token_id', 'daemon_token']), + ->only(['scheme', 'fqdn', 'daemon_listen', 'daemon_token_id', 'daemon_token']), ]); return view('admin.nodes.view.servers', [ diff --git a/app/Http/Controllers/Admin/Servers/ServerTransferController.php b/app/Http/Controllers/Admin/Servers/ServerTransferController.php index 9518092f1..fbfc7530e 100644 --- a/app/Http/Controllers/Admin/Servers/ServerTransferController.php +++ b/app/Http/Controllers/Admin/Servers/ServerTransferController.php @@ -68,7 +68,7 @@ class ServerTransferController extends Controller // Check if the node is viable for the transfer. $node = Node::query() - ->select(['nodes.id', 'nodes.fqdn', 'nodes.scheme', 'nodes.daemon_token', 'nodes.daemonListen', 'nodes.memory', 'nodes.disk', 'nodes.memory_overallocate', 'nodes.disk_overallocate']) + ->select(['nodes.id', 'nodes.fqdn', 'nodes.scheme', 'nodes.daemon_token', 'nodes.daemon_listen', 'nodes.memory', 'nodes.disk', 'nodes.memory_overallocate', 'nodes.disk_overallocate']) ->selectRaw('IFNULL(SUM(servers.memory), 0) as sum_memory, IFNULL(SUM(servers.disk), 0) as sum_disk') ->leftJoin('servers', 'servers.node_id', '=', 'nodes.id') ->where('nodes.id', $node_id) diff --git a/app/Http/Controllers/Api/Application/Servers/ServerController.php b/app/Http/Controllers/Api/Application/Servers/ServerController.php index e91e437e3..2d675516b 100644 --- a/app/Http/Controllers/Api/Application/Servers/ServerController.php +++ b/app/Http/Controllers/Api/Application/Servers/ServerController.php @@ -33,7 +33,7 @@ class ServerController extends ApplicationApiController public function index(GetServersRequest $request): array { $servers = QueryBuilder::for(Server::query()) - ->allowedFilters(['uuid', 'uuidShort', 'name', 'description', 'image', 'external_id']) + ->allowedFilters(['uuid', 'uuid_short', 'name', 'description', 'image', 'external_id']) ->allowedSorts(['id', 'uuid']) ->paginate($request->query('per_page') ?? 50); diff --git a/app/Http/Controllers/Api/Remote/SftpAuthenticationController.php b/app/Http/Controllers/Api/Remote/SftpAuthenticationController.php index 17fd0f6ca..af9cf97b1 100644 --- a/app/Http/Controllers/Api/Remote/SftpAuthenticationController.php +++ b/app/Http/Controllers/Api/Remote/SftpAuthenticationController.php @@ -89,7 +89,7 @@ class SftpAuthenticationController extends Controller protected function getServer(Request $request, string $uuid): Server { return Server::query() - ->where(fn ($builder) => $builder->where('uuid', $uuid)->orWhere('uuidShort', $uuid)) + ->where(fn ($builder) => $builder->where('uuid', $uuid)->orWhere('uuid_short', $uuid)) ->where('node_id', $request->attributes->get('node')->id) ->firstOr(function () use ($request) { $this->reject($request); diff --git a/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php b/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php index 99b98c375..fb426e3d9 100644 --- a/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php +++ b/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php @@ -29,11 +29,11 @@ class StoreNodeRequest extends ApplicationApiRequest 'disk', 'disk_overallocate', 'upload_size', - 'daemonListen', - 'daemonSFTP', - 'daemonBase', + 'daemon_listen', + 'daemon_sftp', + 'daemon_base', ])->mapWithKeys(function ($value, $key) { - $key = ($key === 'daemonSFTP') ? 'daemonSftp' : $key; + $key = ($key === 'daemon_sftp') ? 'daemon_sftp' : $key; return [snake_case($key) => $value]; })->toArray(); @@ -58,9 +58,9 @@ class StoreNodeRequest extends ApplicationApiRequest public function validated($key = null, $default = null): array { $response = parent::validated(); - $response['daemonListen'] = $response['daemon_listen']; - $response['daemonSFTP'] = $response['daemon_sftp']; - $response['daemonBase'] = $response['daemon_base'] ?? (new Node())->getAttribute('daemonBase'); + $response['daemon_listen'] = $response['daemon_listen']; + $response['daemon_sftp'] = $response['daemon_sftp']; + $response['daemon_base'] = $response['daemon_base'] ?? (new Node())->getAttribute('daemon_base'); unset($response['daemon_base'], $response['daemon_listen'], $response['daemon_sftp']); diff --git a/app/Models/Filters/AdminServerFilter.php b/app/Models/Filters/AdminServerFilter.php index 6e24a5b50..d3c1eea60 100644 --- a/app/Models/Filters/AdminServerFilter.php +++ b/app/Models/Filters/AdminServerFilter.php @@ -24,7 +24,7 @@ class AdminServerFilter implements Filter ->where(function (Builder $builder) use ($value) { $builder->where('servers.uuid', $value) ->orWhere('servers.uuid', 'LIKE', "$value%") - ->orWhere('servers.uuidShort', $value) + ->orWhere('servers.uuid_short', $value) ->orWhere('servers.external_id', $value) ->orWhereRaw('LOWER(users.username) LIKE ?', ["%$value%"]) ->orWhereRaw('LOWER(users.email) LIKE ?', ["$value%"]) diff --git a/app/Models/Filters/MultiFieldServerFilter.php b/app/Models/Filters/MultiFieldServerFilter.php index 39b1c2235..da3f91f6d 100644 --- a/app/Models/Filters/MultiFieldServerFilter.php +++ b/app/Models/Filters/MultiFieldServerFilter.php @@ -61,7 +61,7 @@ class MultiFieldServerFilter implements Filter ->where(function (Builder $builder) use ($value) { $builder->where('servers.uuid', $value) ->orWhere('servers.uuid', 'LIKE', "$value%") - ->orWhere('servers.uuidShort', $value) + ->orWhere('servers.uuid_short', $value) ->orWhere('servers.external_id', $value) ->orWhereRaw('LOWER(servers.name) LIKE ?', ["%$value%"]); }); diff --git a/app/Models/Node.php b/app/Models/Node.php index d1e383be1..5de40c253 100644 --- a/app/Models/Node.php +++ b/app/Models/Node.php @@ -25,9 +25,9 @@ use Illuminate\Database\Eloquent\Relations\HasManyThrough; * @property int $upload_size * @property string $daemon_token_id * @property string $daemon_token - * @property int $daemonListen - * @property int $daemonSFTP - * @property string $daemonBase + * @property int $daemon_listen + * @property int $daemon_sftp + * @property string $daemon_base * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at * @property \App\Models\Mount[]|\Illuminate\Database\Eloquent\Collection $mounts @@ -67,8 +67,8 @@ class Node extends Model 'public', 'name', 'fqdn', 'scheme', 'behind_proxy', 'memory', 'memory_overallocate', 'disk', - 'disk_overallocate', 'upload_size', 'daemonBase', - 'daemonSFTP', 'daemonListen', + 'disk_overallocate', 'upload_size', 'daemon_base', + 'daemon_sftp', 'daemon_listen', 'description', 'maintenance_mode', ]; @@ -83,9 +83,9 @@ class Node extends Model 'memory_overallocate' => 'required|numeric|min:-1', 'disk' => 'required|numeric|min:1', 'disk_overallocate' => 'required|numeric|min:-1', - 'daemonBase' => 'sometimes|required|regex:/^([\/][\d\w.\-\/]+)$/', - 'daemonSFTP' => 'required|numeric|between:1,65535', - 'daemonListen' => 'required|numeric|between:1,65535', + 'daemon_base' => 'sometimes|required|regex:/^([\/][\d\w.\-\/]+)$/', + 'daemon_sftp' => 'required|numeric|between:1,65535', + 'daemon_listen' => 'required|numeric|between:1,65535', 'maintenance_mode' => 'boolean', 'upload_size' => 'int|between:1,1024', ]; @@ -98,9 +98,9 @@ class Node extends Model 'behind_proxy' => false, 'memory_overallocate' => 0, 'disk_overallocate' => 0, - 'daemonBase' => '/var/lib/panel/volumes', - 'daemonSFTP' => 2022, - 'daemonListen' => 8080, + 'daemon_base' => '/var/lib/panel/volumes', + 'daemon_sftp' => 2022, + 'daemon_listen' => 8080, 'maintenance_mode' => false, ]; @@ -109,8 +109,8 @@ class Node extends Model return [ 'memory' => 'integer', 'disk' => 'integer', - 'daemonListen' => 'integer', - 'daemonSFTP' => 'integer', + 'daemon_listen' => 'integer', + 'daemon_sftp' => 'integer', 'behind_proxy' => 'boolean', 'public' => 'boolean', 'maintenance_mode' => 'boolean', @@ -122,7 +122,7 @@ class Node extends Model */ public function getConnectionAddress(): string { - return "$this->scheme://$this->fqdn:$this->daemonListen"; + return "$this->scheme://$this->fqdn:$this->daemon_listen"; } /** @@ -137,7 +137,7 @@ class Node extends Model 'token' => decrypt($this->daemon_token), 'api' => [ 'host' => '0.0.0.0', - 'port' => $this->daemonListen, + 'port' => $this->daemon_listen, 'ssl' => [ 'enabled' => (!$this->behind_proxy && $this->scheme === 'https'), 'cert' => '/etc/letsencrypt/live/' . Str::lower($this->fqdn) . '/fullchain.pem', @@ -146,9 +146,9 @@ class Node extends Model 'upload_limit' => $this->upload_size, ], 'system' => [ - 'data' => $this->daemonBase, + 'data' => $this->daemon_base, 'sftp' => [ - 'bind_port' => $this->daemonSFTP, + 'bind_port' => $this->daemon_sftp, ], ], 'allowed_mounts' => $this->mounts->pluck('source')->toArray(), diff --git a/app/Models/Server.php b/app/Models/Server.php index 0c43ea25b..e6322a8e1 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -21,7 +21,7 @@ use App\Exceptions\Http\Server\ServerStateConflictException; * @property int $id * @property string|null $external_id * @property string $uuid - * @property string $uuidShort + * @property string $uuid_short * @property int $node_id * @property string $name * @property string $description @@ -98,7 +98,7 @@ use App\Exceptions\Http\Server\ServerStateConflictException; * @method static \Illuminate\Database\Eloquent\Builder|Server whereThreads($value) * @method static \Illuminate\Database\Eloquent\Builder|Server whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Server whereUuid($value) - * @method static \Illuminate\Database\Eloquent\Builder|Server whereUuidShort($value) + * @method static \Illuminate\Database\Eloquent\Builder|Server whereuuid_short($value) * * @mixin \Eloquent */ @@ -323,7 +323,7 @@ class Server extends Model public function resolveRouteBinding($value, $field = null): ?self { return match ($field) { - 'uuid' => $this->where('uuidShort', $value)->orWhere('uuid', $value)->firstOrFail(), + 'uuid' => $this->where('uuid_short', $value)->orWhere('uuid', $value)->firstOrFail(), default => $this->where('id', $value)->firstOrFail(), }; } diff --git a/app/Notifications/AddedToServer.php b/app/Notifications/AddedToServer.php index 34d46f0b2..647c33822 100644 --- a/app/Notifications/AddedToServer.php +++ b/app/Notifications/AddedToServer.php @@ -38,6 +38,6 @@ class AddedToServer extends Notification implements ShouldQueue ->greeting('Hello ' . $this->server->user . '!') ->line('You have been added as a subuser for the following server, allowing you certain control over the server.') ->line('Server Name: ' . $this->server->name) - ->action('Visit Server', url('/server/' . $this->server->uuidShort)); + ->action('Visit Server', url('/server/' . $this->server->uuid_short)); } } diff --git a/app/Observers/SubuserObserver.php b/app/Observers/SubuserObserver.php index 0acb86777..25842045c 100644 --- a/app/Observers/SubuserObserver.php +++ b/app/Observers/SubuserObserver.php @@ -27,7 +27,7 @@ class SubuserObserver $subuser->user->notify(new AddedToServer([ 'user' => $subuser->user->name_first, 'name' => $subuser->server->name, - 'uuidShort' => $subuser->server->uuidShort, + 'uuid_short' => $subuser->server->uuid_short, ])); } diff --git a/app/Services/Servers/ServerCreationService.php b/app/Services/Servers/ServerCreationService.php index d544d7d9d..cff2cb8c8 100644 --- a/app/Services/Servers/ServerCreationService.php +++ b/app/Services/Servers/ServerCreationService.php @@ -128,7 +128,7 @@ class ServerCreationService return Server::create([ 'external_id' => Arr::get($data, 'external_id'), 'uuid' => $uuid, - 'uuidShort' => substr($uuid, 0, 8), + 'uuid_short' => substr($uuid, 0, 8), 'node_id' => Arr::get($data, 'node_id'), 'name' => Arr::get($data, 'name'), 'description' => Arr::get($data, 'description') ?? '', @@ -193,7 +193,7 @@ class ServerCreationService $uuid = Uuid::uuid4()->toString(); $shortUuid = str($uuid)->substr(0, 8); - if (Server::query()->where('uuid', $uuid)->orWhere('uuidShort', $shortUuid)->exists()) { + if (Server::query()->where('uuid', $uuid)->orWhere('uuid_short', $shortUuid)->exists()) { return $this->generateUniqueUuidCombo(); } diff --git a/app/Transformers/Api/Application/NodeTransformer.php b/app/Transformers/Api/Application/NodeTransformer.php index 39bd452a3..439d5c873 100644 --- a/app/Transformers/Api/Application/NodeTransformer.php +++ b/app/Transformers/Api/Application/NodeTransformer.php @@ -31,7 +31,7 @@ class NodeTransformer extends BaseTransformer $response = collect($node->toArray())->mapWithKeys(function ($value, $key) { // I messed up early in 2016 when I named this column as poorly // as I did. This is the tragic result of my mistakes. - $key = ($key === 'daemonSFTP') ? 'daemonSftp' : $key; + $key = ($key === 'daemon_sftp') ? 'daemon_sftp' : $key; return [snake_case($key) => $value]; })->toArray(); diff --git a/app/Transformers/Api/Application/ServerTransformer.php b/app/Transformers/Api/Application/ServerTransformer.php index 4f789f99d..b315422c5 100644 --- a/app/Transformers/Api/Application/ServerTransformer.php +++ b/app/Transformers/Api/Application/ServerTransformer.php @@ -52,7 +52,7 @@ class ServerTransformer extends BaseTransformer 'id' => $server->getKey(), 'external_id' => $server->external_id, 'uuid' => $server->uuid, - 'identifier' => $server->uuidShort, + 'identifier' => $server->uuid_short, 'name' => $server->name, 'description' => $server->description, 'status' => $server->status, diff --git a/app/Transformers/Api/Client/ServerTransformer.php b/app/Transformers/Api/Client/ServerTransformer.php index 2c8ee8fe5..aece52bd5 100644 --- a/app/Transformers/Api/Client/ServerTransformer.php +++ b/app/Transformers/Api/Client/ServerTransformer.php @@ -38,7 +38,7 @@ class ServerTransformer extends BaseClientTransformer return [ 'server_owner' => $user->id === $server->owner_id, - 'identifier' => $server->uuidShort, + 'identifier' => $server->uuid_short, 'internal_id' => $server->id, 'uuid' => $server->uuid, 'name' => $server->name, @@ -46,7 +46,7 @@ class ServerTransformer extends BaseClientTransformer 'is_node_under_maintenance' => $server->node->isUnderMaintenance(), 'sftp_details' => [ 'ip' => $server->node->fqdn, - 'port' => $server->node->daemonSFTP, + 'port' => $server->node->daemon_sftp, ], 'description' => $server->description, 'limits' => [ diff --git a/database/Factories/NodeFactory.php b/database/Factories/NodeFactory.php index d8a7fff22..ccee27214 100644 --- a/database/Factories/NodeFactory.php +++ b/database/Factories/NodeFactory.php @@ -36,9 +36,9 @@ class NodeFactory extends Factory 'upload_size' => 100, 'daemon_token_id' => Str::random(Node::DAEMON_TOKEN_ID_LENGTH), 'daemon_token' => Crypt::encrypt(Str::random(Node::DAEMON_TOKEN_LENGTH)), - 'daemonListen' => 8080, - 'daemonSFTP' => 2022, - 'daemonBase' => '/var/lib/panel/volumes', + 'daemon_listen' => 8080, + 'daemon_sftp' => 2022, + 'daemon_base' => '/var/lib/panel/volumes', ]; } } diff --git a/database/Factories/ServerFactory.php b/database/Factories/ServerFactory.php index c454ca26e..3bd7931b3 100644 --- a/database/Factories/ServerFactory.php +++ b/database/Factories/ServerFactory.php @@ -24,7 +24,7 @@ class ServerFactory extends Factory { return [ 'uuid' => Uuid::uuid4()->toString(), - 'uuidShort' => Str::lower(Str::random(8)), + 'uuid_short' => Str::lower(Str::random(8)), 'name' => $this->faker->firstName(), 'description' => implode(' ', $this->faker->sentences()), 'skip_scripts' => 0, diff --git a/database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php b/database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php deleted file mode 100644 index b471550dd..000000000 --- a/database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php +++ /dev/null @@ -1,28 +0,0 @@ -timestamp('expires_at')->nullable()->after('last_used_at'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('api_keys', function (Blueprint $table) { - $table->dropColumn('expires_at'); - }); - } -}; diff --git a/database/migrations/2024_04_14_002250_update_column_names.php b/database/migrations/2024_04_14_002250_update_column_names.php new file mode 100644 index 000000000..37e7e4857 --- /dev/null +++ b/database/migrations/2024_04_14_002250_update_column_names.php @@ -0,0 +1,40 @@ +renameColumn('daemonListen', 'daemon_listen'); + $table->renameColumn('daemonBase', 'daemon_base'); + $table->renameColumn('daemonSFTP', 'daemon_sftp'); + }); + + Schema::table('servers', function (Blueprint $table) { + $table->renameColumn('uuidShort', 'uuid_short'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('nodes', function (Blueprint $table) { + $table->renameColumn('daemon_listen', 'daemonListen'); + $table->renameColumn('daemon_sftp', 'daemonSFTP'); + $table->renameColumn('daemon_base', 'daemonBase'); + }); + + Schema::table('servers', function (Blueprint $table) { + $table->renameColumn('uuid_short', 'uuidShort'); + }); + } +}; diff --git a/package.json b/package.json index 82fc4d539..11f9b9020 100644 --- a/package.json +++ b/package.json @@ -133,10 +133,10 @@ "clean": "cd public/assets && find . \\( -name \"*.js\" -o -name \"*.map\" \\) -type f -delete", "test": "jest", "lint": "eslint ./resources/scripts/**/*.{ts,tsx} --ext .ts,.tsx", - "watch": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --watch --progress", + "watch": "cross-env NODE_OPTIONS='--openssl-legacy-provider' NODE_ENV=development ./node_modules/.bin/webpack --watch --progress", "build": "cross-env NODE_OPTIONS='--openssl-legacy-provider' NODE_ENV=development ./node_modules/.bin/webpack --progress", "build:production": "yarn run clean && cross-env NODE_OPTIONS='--openssl-legacy-provider' NODE_ENV=production ./node_modules/.bin/webpack --mode production", - "serve": "yarn run clean && cross-env WEBPACK_PUBLIC_PATH=/webpack@hmr/ NODE_ENV=development webpack-dev-server --host 0.0.0.0 --port 8080 --public https://panel.test --hot" + "serve": "yarn run clean && cross-env WEBPACK_PUBLIC_PATH=/webpack@hmr/ NODE_OPTIONS='--openssl-legacy-provider' NODE_ENV=development webpack-dev-server --host 0.0.0.0 --port 8080 --public https://panel.test --hot" }, "browserslist": [ "> 0.5%", diff --git a/resources/views/admin/nodes/index.blade.php b/resources/views/admin/nodes/index.blade.php index f2ff1617a..8f003d953 100644 --- a/resources/views/admin/nodes/index.blade.php +++ b/resources/views/admin/nodes/index.blade.php @@ -49,7 +49,7 @@ @foreach ($nodes as $node) - + {!! $node->maintenance_mode ? ' ' : '' !!}{{ $node->name }} {{ $node->memory }} MiB {{ $node->disk }} MiB diff --git a/resources/views/admin/nodes/new.blade.php b/resources/views/admin/nodes/new.blade.php index a51bdc189..7e2c73eff 100644 --- a/resources/views/admin/nodes/new.blade.php +++ b/resources/views/admin/nodes/new.blade.php @@ -94,8 +94,8 @@
- - + +

Enter the directory where server files should be stored. If you use OVH you should check your partition scheme. You may need to use /home/daemon-data to have enough space.

@@ -137,12 +137,12 @@
- - + +
- - + +

The daemon runs its own SFTP management container and does not use the SSHd process on the main physical server. Do not use the same port that you have assigned for your physical server's SSH process. If you will be running the daemon behind CloudFlare® you should set the daemon port to 8443 to allow websocket proxying over SSL.

diff --git a/resources/views/admin/nodes/view/servers.blade.php b/resources/views/admin/nodes/view/servers.blade.php index e443dc749..4b190cf2e 100644 --- a/resources/views/admin/nodes/view/servers.blade.php +++ b/resources/views/admin/nodes/view/servers.blade.php @@ -44,7 +44,7 @@ @foreach($servers as $server) - {{ $server->uuidShort }} + {{ $server->uuid_short }} {{ $server->name }} {{ $server->user->username }} {{ $server->egg->name }} diff --git a/resources/views/admin/nodes/view/settings.blade.php b/resources/views/admin/nodes/view/settings.blade.php index 56c06873c..72dc9de5d 100644 --- a/resources/views/admin/nodes/view/settings.blade.php +++ b/resources/views/admin/nodes/view/settings.blade.php @@ -174,15 +174,15 @@
- +
- +
- +
- +
diff --git a/resources/views/admin/servers/index.blade.php b/resources/views/admin/servers/index.blade.php index 0cc89e597..65f40c85b 100644 --- a/resources/views/admin/servers/index.blade.php +++ b/resources/views/admin/servers/index.blade.php @@ -43,7 +43,7 @@ @foreach ($servers as $server) - + {{ $server->name }} {{ $server->uuid }} {{ $server->user->username }} @@ -61,7 +61,7 @@ @endif - + @endforeach diff --git a/resources/views/admin/servers/partials/navigation.blade.php b/resources/views/admin/servers/partials/navigation.blade.php index 2f74d514e..c1285249e 100644 --- a/resources/views/admin/servers/partials/navigation.blade.php +++ b/resources/views/admin/servers/partials/navigation.blade.php @@ -32,7 +32,7 @@ Delete
  • - +
  • diff --git a/resources/views/admin/servers/view/database.blade.php b/resources/views/admin/servers/view/database.blade.php index 385ce0f3f..05aed3d94 100644 --- a/resources/views/admin/servers/view/database.blade.php +++ b/resources/views/admin/servers/view/database.blade.php @@ -19,7 +19,7 @@
    - Database passwords can be viewed when visiting this server on the front-end. + Database passwords can be viewed when visiting this server on the front-end.
    diff --git a/tests/Integration/Api/Client/ClientControllerTest.php b/tests/Integration/Api/Client/ClientControllerTest.php index 50a150a9d..29805711f 100644 --- a/tests/Integration/Api/Client/ClientControllerTest.php +++ b/tests/Integration/Api/Client/ClientControllerTest.php @@ -33,7 +33,7 @@ class ClientControllerTest extends ClientApiIntegrationTestCase $response->assertOk(); $response->assertJsonPath('object', 'list'); $response->assertJsonPath('data.0.object', Server::RESOURCE_NAME); - $response->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuidShort); + $response->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuid_short); $response->assertJsonPath('data.0.attributes.server_owner', true); $response->assertJsonPath('meta.pagination.total', 1); $response->assertJsonPath('meta.pagination.per_page', 50); @@ -52,7 +52,7 @@ class ClientControllerTest extends ClientApiIntegrationTestCase /** @var \App\Models\Server[] $servers */ $servers = [ $this->createServerModel(['user_id' => $users[0]->id, 'name' => 'Julia']), - $this->createServerModel(['user_id' => $users[1]->id, 'uuidShort' => '12121212', 'name' => 'Janice']), + $this->createServerModel(['user_id' => $users[1]->id, 'uuid_short' => '12121212', 'name' => 'Janice']), $this->createServerModel(['user_id' => $users[1]->id, 'uuid' => '88788878-12356789', 'external_id' => 'ext123', 'name' => 'Julia']), $this->createServerModel(['user_id' => $users[1]->id, 'uuid' => '88788878-abcdefgh', 'name' => 'Jennifer']), ]; @@ -60,39 +60,39 @@ class ClientControllerTest extends ClientApiIntegrationTestCase $this->actingAs($users[1])->getJson('/api/client?filter[*]=Julia') ->assertOk() ->assertJsonCount(1, 'data') - ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuid_short); $this->actingAs($users[1])->getJson('/api/client?filter[*]=ext123') ->assertOk() ->assertJsonCount(1, 'data') - ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuid_short); $this->actingAs($users[1])->getJson('/api/client?filter[*]=ext123') ->assertOk() ->assertJsonCount(1, 'data') - ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuid_short); $this->actingAs($users[1])->getJson('/api/client?filter[*]=12121212') ->assertOk() ->assertJsonCount(1, 'data') - ->assertJsonPath('data.0.attributes.identifier', $servers[1]->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $servers[1]->uuid_short); $this->actingAs($users[1])->getJson('/api/client?filter[*]=88788878') ->assertOk() ->assertJsonCount(2, 'data') - ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuidShort) - ->assertJsonPath('data.1.attributes.identifier', $servers[3]->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuid_short) + ->assertJsonPath('data.1.attributes.identifier', $servers[3]->uuid_short); $this->actingAs($users[1])->getJson('/api/client?filter[*]=88788878-abcd') ->assertOk() ->assertJsonCount(1, 'data') - ->assertJsonPath('data.0.attributes.identifier', $servers[3]->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $servers[3]->uuid_short); $this->actingAs($users[0])->getJson('/api/client?filter[*]=Julia&type=admin-all') ->assertOk() ->assertJsonCount(2, 'data') - ->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuidShort) - ->assertJsonPath('data.1.attributes.identifier', $servers[2]->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuid_short) + ->assertJsonPath('data.1.attributes.identifier', $servers[2]->uuid_short); } /** @@ -118,24 +118,24 @@ class ClientControllerTest extends ClientApiIntegrationTestCase $this->actingAs($user)->getJson('/api/client?filter[*]=192.168.1.1') ->assertOk() ->assertJsonCount(2, 'data') - ->assertJsonPath('data.0.attributes.identifier', $server->uuidShort) - ->assertJsonPath('data.1.attributes.identifier', $server2->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $server->uuid_short) + ->assertJsonPath('data.1.attributes.identifier', $server2->uuid_short); $this->actingAs($user)->getJson('/api/client?filter[*]=192.168.1.1:25565') ->assertOk() ->assertJsonCount(1, 'data') - ->assertJsonPath('data.0.attributes.identifier', $server->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $server->uuid_short); $this->actingAs($user)->getJson('/api/client?filter[*]=:25570') ->assertOk() ->assertJsonCount(1, 'data') - ->assertJsonPath('data.0.attributes.identifier', $server2->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $server2->uuid_short); $this->actingAs($user)->getJson('/api/client?filter[*]=:255') ->assertOk() ->assertJsonCount(2, 'data') - ->assertJsonPath('data.0.attributes.identifier', $server->uuidShort) - ->assertJsonPath('data.1.attributes.identifier', $server2->uuidShort); + ->assertJsonPath('data.0.attributes.identifier', $server->uuid_short) + ->assertJsonPath('data.1.attributes.identifier', $server2->uuid_short); } /** @@ -164,9 +164,9 @@ class ClientControllerTest extends ClientApiIntegrationTestCase $response->assertOk(); $response->assertJsonCount(2, 'data'); $response->assertJsonPath('data.0.attributes.server_owner', true); - $response->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuidShort); + $response->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuid_short); $response->assertJsonPath('data.1.attributes.server_owner', false); - $response->assertJsonPath('data.1.attributes.identifier', $servers[1]->uuidShort); + $response->assertJsonPath('data.1.attributes.identifier', $servers[1]->uuid_short); } /** @@ -195,7 +195,7 @@ class ClientControllerTest extends ClientApiIntegrationTestCase $response->assertOk(); $response->assertJsonCount(1, 'data'); $response->assertJsonPath('data.0.attributes.server_owner', true); - $response->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuidShort); + $response->assertJsonPath('data.0.attributes.identifier', $servers[0]->uuid_short); } /** @@ -248,9 +248,9 @@ class ClientControllerTest extends ClientApiIntegrationTestCase $response->assertJsonCount(2, 'data'); $response->assertJsonPath('data.0.attributes.server_owner', false); - $response->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuidShort); + $response->assertJsonPath('data.0.attributes.identifier', $servers[2]->uuid_short); $response->assertJsonPath('data.1.attributes.server_owner', false); - $response->assertJsonPath('data.1.attributes.identifier', $servers[3]->uuidShort); + $response->assertJsonPath('data.1.attributes.identifier', $servers[3]->uuid_short); } /** diff --git a/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php b/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php index f460ecc50..7b572b435 100644 --- a/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php +++ b/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php @@ -141,7 +141,7 @@ class SftpAuthenticationControllerTest extends IntegrationTestCase $this->setAuthorization($server->node); $this->postJson('/api/remote/sftp/auth', [ - 'username' => $user->username . '.' . $server->uuidShort, + 'username' => $user->username . '.' . $server->uuid_short, 'password' => 'foobar', ]) ->assertForbidden() @@ -171,7 +171,7 @@ class SftpAuthenticationControllerTest extends IntegrationTestCase $this->setAuthorization($server->node); $data = [ - 'username' => $user->username . '.' . $server->uuidShort, + 'username' => $user->username . '.' . $server->uuid_short, 'password' => 'foobar', ]; @@ -186,7 +186,7 @@ class SftpAuthenticationControllerTest extends IntegrationTestCase ->assertJsonPath('permissions.0', '*'); $this->setAuthorization(); - $data['username'] = $user->username . '.' . $this->server->uuidShort; + $data['username'] = $user->username . '.' . $this->server->uuid_short; $this->post('/api/remote/sftp/auth', $data) ->assertOk() @@ -218,7 +218,7 @@ class SftpAuthenticationControllerTest extends IntegrationTestCase */ protected function getUsername(bool $long = false): string { - return $this->user->username . '.' . ($long ? $this->server->uuid : $this->server->uuidShort); + return $this->user->username . '.' . ($long ? $this->server->uuid : $this->server->uuid_short); } /** diff --git a/tests/Integration/Services/Servers/ServerCreationServiceTest.php b/tests/Integration/Services/Servers/ServerCreationServiceTest.php index 2f974aa5e..8d3df350a 100644 --- a/tests/Integration/Services/Servers/ServerCreationServiceTest.php +++ b/tests/Integration/Services/Servers/ServerCreationServiceTest.php @@ -118,7 +118,7 @@ class ServerCreationServiceTest extends IntegrationTestCase $this->assertInstanceOf(Server::class, $response); $this->assertNotNull($response->uuid); - $this->assertSame($response->uuidShort, substr($response->uuid, 0, 8)); + $this->assertSame($response->uuid_short, substr($response->uuid, 0, 8)); $this->assertSame($egg->id, $response->egg_id); $this->assertCount(2, $response->variables); $this->assertSame('123', $response->variables[0]->server_value); From 0814b82b7ec35f447e588f8115ca3cc8e9db93af Mon Sep 17 00:00:00 2001 From: notCharles Date: Sun, 14 Apr 2024 15:23:03 -0400 Subject: [PATCH 2/6] pint --- database/migrations/2024_04_14_002250_update_column_names.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2024_04_14_002250_update_column_names.php b/database/migrations/2024_04_14_002250_update_column_names.php index 37e7e4857..42871776c 100644 --- a/database/migrations/2024_04_14_002250_update_column_names.php +++ b/database/migrations/2024_04_14_002250_update_column_names.php @@ -18,7 +18,7 @@ return new class extends Migration }); Schema::table('servers', function (Blueprint $table) { - $table->renameColumn('uuidShort', 'uuid_short'); + $table->renameColumn('uuidShort', 'uuid_short'); }); } From 6118ed91fa38ee2db4244f8835f25b0aa13510fb Mon Sep 17 00:00:00 2001 From: notCharles Date: Sun, 14 Apr 2024 15:23:15 -0400 Subject: [PATCH 3/6] oops, readd this --- ...dd_expires_at_column_to_api_keys_table.php | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php diff --git a/database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php b/database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php new file mode 100644 index 000000000..b471550dd --- /dev/null +++ b/database/migrations/2023_02_23_191004_add_expires_at_column_to_api_keys_table.php @@ -0,0 +1,28 @@ +timestamp('expires_at')->nullable()->after('last_used_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('api_keys', function (Blueprint $table) { + $table->dropColumn('expires_at'); + }); + } +}; From dc8d7aa3da2a0f2513097db1c0b42ed479a58222 Mon Sep 17 00:00:00 2001 From: notCharles Date: Sun, 14 Apr 2024 20:53:50 -0400 Subject: [PATCH 4/6] Fix mariadb? --- database/migrations/2024_04_14_002250_update_column_names.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/database/migrations/2024_04_14_002250_update_column_names.php b/database/migrations/2024_04_14_002250_update_column_names.php index 42871776c..21303f36b 100644 --- a/database/migrations/2024_04_14_002250_update_column_names.php +++ b/database/migrations/2024_04_14_002250_update_column_names.php @@ -11,6 +11,10 @@ return new class extends Migration */ public function up(): void { + Schema::table('nodes', function (Blueprint $table) { + $table->string('daemonBase', 191)->default(null)->change(); + }); + Schema::table('nodes', function (Blueprint $table) { $table->renameColumn('daemonListen', 'daemon_listen'); $table->renameColumn('daemonBase', 'daemon_base'); From 85f7bf30b90036eb706c07b59a9e845e0d18b9dc Mon Sep 17 00:00:00 2001 From: notCharles Date: Sun, 21 Apr 2024 14:08:40 -0400 Subject: [PATCH 5/6] fix daemon_base --- app/Models/Node.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/Node.php b/app/Models/Node.php index 5de40c253..2d242e966 100644 --- a/app/Models/Node.php +++ b/app/Models/Node.php @@ -98,7 +98,7 @@ class Node extends Model 'behind_proxy' => false, 'memory_overallocate' => 0, 'disk_overallocate' => 0, - 'daemon_base' => '/var/lib/panel/volumes', + 'daemon_base' => '/var/lib/pelican/volumes', 'daemon_sftp' => 2022, 'daemon_listen' => 8080, 'maintenance_mode' => false, From ba7a5d5126ea5e85dcf4b3b0dfaaab1252a9ff98 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sun, 21 Apr 2024 14:17:32 -0400 Subject: [PATCH 6/6] Be explicit about this being a string --- app/Models/User.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/User.php b/app/Models/User.php index 33905ae55..b50dba9f0 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -177,7 +177,7 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac protected static function booted(): void { static::creating(function (self $user) { - $user->uuid = Str::uuid(); + $user->uuid = Str::uuid()->toString(); return true; });