fix: ip
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\Support\VisitorIp;
|
||||
use Illuminate\Http\Request;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use Tests\TestCase;
|
||||
|
||||
class VisitorIpTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function prefers_cf_connecting_ip_over_xff_and_true_client_ip(): void
|
||||
{
|
||||
$request = Request::create('/', 'GET', [], [], [], [
|
||||
'REMOTE_ADDR' => '104.16.1.1',
|
||||
'HTTP_X_FORWARDED_FOR' => '1.2.3.4, 203.0.113.50',
|
||||
'HTTP_TRUE_CLIENT_IP' => '198.51.100.9',
|
||||
'HTTP_CF_CONNECTING_IP' => '203.0.113.77',
|
||||
]);
|
||||
|
||||
$this->assertSame('203.0.113.77', VisitorIp::fromRequest($request));
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function falls_back_to_true_client_ip_then_remote_addr(): void
|
||||
{
|
||||
$trueClient = Request::create('/', 'GET', [], [], [], [
|
||||
'REMOTE_ADDR' => '104.16.1.1',
|
||||
'HTTP_X_FORWARDED_FOR' => '1.2.3.4',
|
||||
'HTTP_TRUE_CLIENT_IP' => '198.51.100.9',
|
||||
]);
|
||||
$this->assertSame('198.51.100.9', VisitorIp::fromRequest($trueClient));
|
||||
|
||||
$direct = Request::create('/', 'GET', [], [], [], [
|
||||
'REMOTE_ADDR' => '127.0.0.1',
|
||||
]);
|
||||
$this->assertSame('127.0.0.1', VisitorIp::fromRequest($direct));
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function ignores_invalid_cf_header_and_unwraps_mapped_ipv6(): void
|
||||
{
|
||||
$invalid = Request::create('/', 'GET', [], [], [], [
|
||||
'REMOTE_ADDR' => '127.0.0.1',
|
||||
'HTTP_CF_CONNECTING_IP' => 'not-an-ip',
|
||||
]);
|
||||
$this->assertSame('127.0.0.1', VisitorIp::fromRequest($invalid));
|
||||
|
||||
$this->assertSame('203.0.113.9', VisitorIp::normalize('::ffff:203.0.113.9'));
|
||||
$this->assertSame('203.0.113.9', VisitorIp::normalize('203.0.113.9, 10.0.0.1'));
|
||||
$this->assertSame('', VisitorIp::normalize('unknown'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user