Plack-Middleware-RealIP

 view release on metacpan or  search on metacpan

t/realip.t  view on Meta::CPAN

#!/usr/bin/perl
use strict;
use Test::More;
use Plack::Test;
use Plack::Builder;
use Plack::Request;
use HTTP::Request::Common;

sub run {
    my (
        $proxy_addr, $proxy_header,
        $trusted_header, $trusted_proxy,
        $expected
    ) = @_;

    my $app = builder {
        enable sub {
            my $app = shift;
            sub { $_[0]->{REMOTE_ADDR} = $proxy_addr; $app->($_[0]) }; # mock remote address
        };
        enable 'Plack::Middleware::RealIP', header => $trusted_header, trusted_proxy => $trusted_proxy;
        sub { return [ 200, [ 'Content-Type' => 'text/plain' ], [ $_[0]->{REMOTE_ADDR} . '|' . (Plack::Request->new($_[0])->header($trusted_header) || '') ] ] };
    };

    test_psgi $app, sub {
        my $cb = shift;
        my $res = $cb->(GET '/', %{ $proxy_header });
        is $res->content, $expected;
    };
}

run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Client-IP',     '127.0.0.1', '1.2.3.4|9.8.7.6');
run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Client-IP',     '1.2.3.4', '9.8.7.6|');
run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Forwarded-For', '1.2.3.4', '1.2.3.4|');
run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Forwarded-For', '127.0.0.1', '1.2.3.4|');
run('127.0.0.1', {'X-Forwarded-For' => '9.8.7.6'},            'X-Forwarded-For', '127.0.0.1', '9.8.7.6|');
run('127.0.0.1', {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', '127.0.0.1', '9.8.7.6|10.55.1.2');
run('127.0.0.1', {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16'], '10.55.1.2|');
run('1.2.3.4',   {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16'], '1.2.3.4|10.55.1.2, 9.8.7.6');
run('1.2.3.4',   {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16', '10.55/16'], '1.2.3.4|10.55.1.2, 9.8.7.6');
run('1.2.3.4',   {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16', '10.55/16', '1.2.3.4'], '1.2.3.4|');

done_testing;



( run in 1.488 second using v1.01-cache-2.11-cpan-39bf76dae61 )