-
-
Notifications
You must be signed in to change notification settings - Fork 103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Port check when creating allocations #661
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,7 +8,9 @@ | |
use Filament\Forms\Components\TagsInput; | ||
use Filament\Forms\Components\TextInput; | ||
use Filament\Forms\Form; | ||
use Filament\Forms\Get; | ||
use Filament\Forms\Set; | ||
use Filament\Notifications\Notification; | ||
use Filament\Resources\RelationManagers\RelationManager; | ||
use Filament\Tables; | ||
use Filament\Tables\Actions\BulkActionGroup; | ||
|
@@ -97,18 +99,26 @@ public function table(Table $table): Table | |
->label('Ports') | ||
->inlineLabel() | ||
->live() | ||
->afterStateUpdated(function ($state, Set $set) { | ||
->afterStateUpdated(function ($state, Set $set, Get $get) { | ||
$ports = collect(); | ||
$update = false; | ||
foreach ($state as $portEntry) { | ||
if (!str_contains($portEntry, '-')) { | ||
if (is_numeric($portEntry)) { | ||
$ports->push((int) $portEntry); | ||
|
||
continue; | ||
if (Allocation::query()->where('ip', $get('allocation_ip'))->where('port', $portEntry)->exists()) { | ||
Notification::make() | ||
->title('Port Already Exists') | ||
->danger() | ||
->body('Port ' . $portEntry . ' already exists.') | ||
->send(); | ||
} else { | ||
$ports->push((int) $portEntry); | ||
|
||
continue; | ||
} | ||
} | ||
|
||
// Do not add non numerical ports | ||
// Do not add non-numerical ports | ||
$update = true; | ||
|
||
continue; | ||
|
@@ -122,8 +132,19 @@ public function table(Table $table): Table | |
|
||
$start = max((int) $start, 0); | ||
$end = min((int) $end, 2 ** 16 - 1); | ||
foreach (range($start, $end) as $i) { | ||
$ports->push($i); | ||
$range = $start <= $end ? range($start, $end) : range($end, $start); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If the first port number is greater than the second port number, then no numbers should be added. |
||
foreach ($range as $i) { | ||
if ($i > 1024 && $i <= 65535) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Invert the if statement and continue early! |
||
if (Allocation::query()->where('ip', $get('allocation_ip'))->where('port', $portEntry)->exists()) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This needs to happen after the foreach loop because of the N+1 problem! |
||
Notification::make() | ||
->title('Port Already Exists') | ||
->danger() | ||
->body("Port $portEntry already exists.") | ||
->send(); | ||
} else { | ||
$ports->push($i); | ||
} | ||
} | ||
} | ||
} | ||
|
||
|
@@ -139,8 +160,6 @@ public function table(Table $table): Table | |
$ports = $sortedPorts; | ||
} | ||
|
||
$ports = $ports->filter(fn ($port) => $port > 1024 && $port < 65535)->values(); | ||
|
||
if ($update) { | ||
$set('allocation_ports', $ports->all()); | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,6 +34,7 @@ | |
use Filament\Forms\Form; | ||
use Filament\Forms\Get; | ||
use Filament\Forms\Set; | ||
use Filament\Notifications\Notification; | ||
use Filament\Resources\Pages\CreateRecord; | ||
use Illuminate\Database\Eloquent\Builder; | ||
use Illuminate\Database\Eloquent\Model; | ||
|
@@ -219,15 +220,23 @@ public function form(Form $form): Form | |
->label('Ports') | ||
->inlineLabel() | ||
->live() | ||
->afterStateUpdated(function ($state, Set $set) { | ||
->afterStateUpdated(function ($state, Set $set, Get $get) { | ||
$ports = collect(); | ||
$update = false; | ||
foreach ($state as $portEntry) { | ||
if (!str_contains($portEntry, '-')) { | ||
if (is_numeric($portEntry)) { | ||
$ports->push((int) $portEntry); | ||
|
||
continue; | ||
if (Allocation::query()->where('ip', $get('allocation_ip'))->where('port', $portEntry)->exists()) { | ||
Notification::make() | ||
->title('Port Already Exists') | ||
->danger() | ||
->body('Port ' . $portEntry . ' already exists.') | ||
->send(); | ||
} else { | ||
$ports->push((int) $portEntry); | ||
|
||
continue; | ||
} | ||
} | ||
|
||
// Do not add non-numerical ports | ||
|
@@ -247,7 +256,15 @@ public function form(Form $form): Form | |
$range = $start <= $end ? range($start, $end) : range($end, $start); | ||
foreach ($range as $i) { | ||
if ($i > 1024 && $i <= 65535) { | ||
$ports->push($i); | ||
if (Allocation::query()->where('ip', $get('allocation_ip'))->where('port', $portEntry)->exists()) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This needs to happen after the foreach loop because of the N+1 problem! |
||
Notification::make() | ||
->title('Port Already Exists') | ||
->danger() | ||
->body('Port ' . $portEntry . ' already exists.') | ||
->send(); | ||
} else { | ||
$ports->push($i); | ||
} | ||
} | ||
} | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,7 +8,9 @@ | |
use Filament\Forms\Components\TagsInput; | ||
use Filament\Forms\Components\TextInput; | ||
use Filament\Forms\Form; | ||
use Filament\Forms\Get; | ||
use Filament\Forms\Set; | ||
use Filament\Notifications\Notification; | ||
use Filament\Resources\RelationManagers\RelationManager; | ||
use Filament\Tables; | ||
use Filament\Tables\Actions\Action; | ||
|
@@ -93,18 +95,26 @@ public function table(Table $table): Table | |
->label('Ports') | ||
->inlineLabel() | ||
->live() | ||
->afterStateUpdated(function ($state, Set $set) { | ||
->afterStateUpdated(function ($state, Set $set, Get $get) { | ||
$ports = collect(); | ||
$update = false; | ||
foreach ($state as $portEntry) { | ||
if (!str_contains($portEntry, '-')) { | ||
if (is_numeric($portEntry)) { | ||
$ports->push((int) $portEntry); | ||
if (Allocation::query()->where('ip', $get('allocation_ip'))->where('port', $portEntry)->exists()) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This needs to happen after the foreach loop because of the N+1 problem! |
||
Notification::make() | ||
->title('Port Already Exists') | ||
->danger() | ||
->body('Port ' . $portEntry . ' already exists.') | ||
->send(); | ||
} else { | ||
$ports->push((int) $portEntry); | ||
|
||
continue; | ||
continue; | ||
} | ||
} | ||
|
||
// Do not add non numerical ports | ||
// Do not add non-numerical ports | ||
$update = true; | ||
|
||
continue; | ||
|
@@ -118,8 +128,19 @@ public function table(Table $table): Table | |
|
||
$start = max((int) $start, 0); | ||
$end = min((int) $end, 2 ** 16 - 1); | ||
foreach (range($start, $end) as $i) { | ||
$ports->push($i); | ||
$range = $start <= $end ? range($start, $end) : range($end, $start); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same thing as before. |
||
foreach ($range as $i) { | ||
if ($i > 1024 && $i <= 65535) { | ||
if (Allocation::query()->where('ip', $get('allocation_ip'))->where('port', $portEntry)->exists()) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This needs to happen after the foreach loop because of the N+1 problem! |
||
Notification::make() | ||
->title('Port Already Exists') | ||
->danger() | ||
->body('Port ' . $portEntry . ' already exists.') | ||
->send(); | ||
} else { | ||
$ports->push($i); | ||
} | ||
} | ||
} | ||
} | ||
|
||
|
@@ -135,8 +156,6 @@ public function table(Table $table): Table | |
$ports = $sortedPorts; | ||
} | ||
|
||
$ports = $ports->filter(fn ($port) => $port > 1024 && $port < 65535)->values(); | ||
|
||
if ($update) { | ||
$set('allocation_ports', $ports->all()); | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This needs to happen after the foreach loop because of the N+1 problem!