mirror of
https://github.com/ConvoyPanel/panel.git
synced 2026-11-15 21:14:25 +08:00
Enforce lowercase IPs, mac addresses, and gateways
This commit is contained in:
@@ -2,14 +2,13 @@
|
||||
|
||||
namespace Convoy\Http\Requests\Admin\AddressPools\Addresses;
|
||||
|
||||
use Convoy\Models\Address;
|
||||
use Illuminate\Support\Arr;
|
||||
use Convoy\Models\AddressPool;
|
||||
use Illuminate\Validation\Validator;
|
||||
use Convoy\Http\Requests\BaseApiRequest;
|
||||
use Convoy\Enums\Network\AddressType;
|
||||
use Convoy\Http\Requests\BaseApiRequest;
|
||||
use Convoy\Models\Address;
|
||||
use Convoy\Models\AddressPool;
|
||||
use Convoy\Validation\ValidateAddressType;
|
||||
use Convoy\Validation\ValidateAddressUniqueness;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class StoreAddressRequest extends BaseApiRequest
|
||||
{
|
||||
@@ -26,7 +25,8 @@ class StoreAddressRequest extends BaseApiRequest
|
||||
];
|
||||
}
|
||||
|
||||
public function after(): array {
|
||||
public function after(): array
|
||||
{
|
||||
$rules = [];
|
||||
|
||||
if ($this->boolean('is_bulk_action')) {
|
||||
@@ -38,10 +38,38 @@ class StoreAddressRequest extends BaseApiRequest
|
||||
|
||||
if (!$this->boolean('is_bulk_action')) {
|
||||
$pool = $this->parameter('address_pool', AddressPool::class);
|
||||
$rules[] = new ValidateAddressType($this->enum('type', AddressType::class), ['address', 'gateway']);
|
||||
$rules[] = new ValidateAddressType(
|
||||
$this->enum('type', AddressType::class), ['address', 'gateway'],
|
||||
);
|
||||
$rules[] = new ValidateAddressUniqueness($pool->id);
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform IPv6 addresses to lowercase to avoid saving duplicate variants that are upper
|
||||
* and lowercase.
|
||||
*
|
||||
* If you don't prefer this lowercase behavior, you can thank Fro! I surveyed him for IPv6
|
||||
* capitalization preference.
|
||||
*/
|
||||
protected function passedValidation(): void
|
||||
{
|
||||
if ($this->boolean('is_bulk_action')) {
|
||||
$this->replace([
|
||||
'address' => strtolower($this->string('address')),
|
||||
]);
|
||||
}
|
||||
|
||||
if (!is_null($this->mac_address)) {
|
||||
$this->replace([
|
||||
'mac_address' => strtolower($this->string('mac_address')),
|
||||
]);
|
||||
}
|
||||
|
||||
$this->replace([
|
||||
'gateway' => strtolower($this->string('gateway')),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Convoy\Models\Filters;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Arr;
|
||||
use Spatie\QueryBuilder\Filters\Filter;
|
||||
|
||||
class FiltersAddressWildcard implements Filter
|
||||
@@ -11,12 +12,12 @@ class FiltersAddressWildcard implements Filter
|
||||
{
|
||||
if (is_array($value)) {
|
||||
$query->whereIn('id', $value)
|
||||
->orWhereIn('address', $value)
|
||||
->orWhereIn('mac_address', $value);
|
||||
->orWhereIn('address', Arr::map($value, fn ($v) => strtolower($v)))
|
||||
->orWhereIn('mac_address', Arr::map($value, fn ($v) => strtolower($v)));
|
||||
} else {
|
||||
$query->where('id', $value)
|
||||
->orWhere('address', $value)
|
||||
->orWhere('mac_address', $value);
|
||||
->orWhere('address', strtolower($value))
|
||||
->orWhere('mac_address', strtolower($value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
return new class extends Migration {
|
||||
public function up(): void
|
||||
{
|
||||
DB::statement(
|
||||
'UPDATE ip_addresses SET address = LOWER(address), gateway = LOWER(gateway), mac_address = LOWER(mac_address)',
|
||||
);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user