Enforce lowercase IPs, mac addresses, and gateways

This commit is contained in:
Eric Wang
2024-01-01 19:43:12 -06:00
parent bd72ea276e
commit 8d8d63c179
3 changed files with 52 additions and 11 deletions

View File

@@ -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')),
]);
}
}

View File

@@ -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));
}
}
}

View File

@@ -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)',
);
}
};