From c689f6860bb64a682b7f0365d93d59d8e0a5b14c Mon Sep 17 00:00:00 2001 From: Boy132 Date: Wed, 26 Mar 2025 09:03:13 +0100 Subject: [PATCH] Disallow `0.0.0.0`, `127.0.0.1` and `localhost` as node fqdn (#1158) * disallow `0.0.0.0`, `127.0.01` and `localhost` as node fqdn * use rules of model --- .../Admin/Resources/NodeResource/Pages/CreateNode.php | 4 +++- app/Filament/Admin/Resources/NodeResource/Pages/EditNode.php | 3 ++- app/Models/Node.php | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Filament/Admin/Resources/NodeResource/Pages/CreateNode.php b/app/Filament/Admin/Resources/NodeResource/Pages/CreateNode.php index a5b7fcc72..302ac18cb 100644 --- a/app/Filament/Admin/Resources/NodeResource/Pages/CreateNode.php +++ b/app/Filament/Admin/Resources/NodeResource/Pages/CreateNode.php @@ -3,6 +3,7 @@ namespace App\Filament\Admin\Resources\NodeResource\Pages; use App\Filament\Admin\Resources\NodeResource; +use App\Models\Node; use Filament\Forms; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Grid; @@ -44,7 +45,8 @@ class CreateNode extends CreateRecord ->required() ->autofocus() ->live(debounce: 1500) - ->rule('prohibited', fn ($state) => is_ip($state) && request()->isSecure()) + ->rules(Node::getRulesForField('fqdn')) + ->prohibited(fn ($state) => is_ip($state) && request()->isSecure()) ->label(fn ($state) => is_ip($state) ? trans('admin/node.ip_address') : trans('admin/node.domain')) ->placeholder(fn ($state) => is_ip($state) ? '192.168.1.1' : 'node.example.com') ->helperText(function ($state) { diff --git a/app/Filament/Admin/Resources/NodeResource/Pages/EditNode.php b/app/Filament/Admin/Resources/NodeResource/Pages/EditNode.php index 98d7099b1..e05d14514 100644 --- a/app/Filament/Admin/Resources/NodeResource/Pages/EditNode.php +++ b/app/Filament/Admin/Resources/NodeResource/Pages/EditNode.php @@ -108,7 +108,8 @@ class EditNode extends EditRecord ->required() ->autofocus() ->live(debounce: 1500) - ->rule('prohibited', fn ($state) => is_ip($state) && request()->isSecure()) + ->rules(Node::getRulesForField('fqdn')) + ->prohibited(fn ($state) => is_ip($state) && request()->isSecure()) ->label(fn ($state) => is_ip($state) ? trans('admin/node.ip_address') : trans('admin/node.domain')) ->placeholder(fn ($state) => is_ip($state) ? '192.168.1.1' : 'node.example.com') ->helperText(function ($state) { diff --git a/app/Models/Node.php b/app/Models/Node.php index 0dd86b672..1b1cf68a5 100644 --- a/app/Models/Node.php +++ b/app/Models/Node.php @@ -89,7 +89,7 @@ class Node extends Model implements Validatable 'name' => ['required', 'string', 'min:1', 'max:100'], 'description' => ['string', 'nullable'], 'public' => ['boolean'], - 'fqdn' => ['required', 'string'], + 'fqdn' => ['required', 'string', 'notIn:0.0.0.0,127.0.0.1,localhost'], 'scheme' => ['required', 'string', 'in:http,https'], 'behind_proxy' => ['boolean'], 'memory' => ['required', 'numeric', 'min:0'],