You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
5.5 KiB
191 lines
5.5 KiB
use Test::More;
|
|
|
|
BEGIN {
|
|
require 't/test-psgi-lib.pm';
|
|
}
|
|
|
|
init(
|
|
'Lemonldap::NG::Handler::Server::Nginx',
|
|
{
|
|
logLevel => 'error',
|
|
handlerServiceTokenTTL => 120,
|
|
vhostOptions => {
|
|
'test1.example.com' => {
|
|
vhostHttps => 0,
|
|
vhostPort => 80,
|
|
vhostMaintenance => 0,
|
|
vhostServiceTokenTTL => 180,
|
|
},
|
|
'test2.example.com' => {
|
|
vhostHttps => 0,
|
|
vhostPort => 80,
|
|
vhostMaintenance => 0,
|
|
vhostServiceTokenTTL => 300,
|
|
}
|
|
},
|
|
exportedHeaders => {
|
|
'test2.example.com' => {
|
|
'Auth-User' => '$uid',
|
|
'empty' => undef,
|
|
'zero' => "'0'",
|
|
},
|
|
}
|
|
}
|
|
);
|
|
|
|
my $res;
|
|
my $crypt = Lemonldap::NG::Common::Crypto->new('qwertyui');
|
|
my $token = $crypt->encrypt(
|
|
join ':', time,
|
|
$sessionId, 'test1.example.com',
|
|
'XFromVH=app1-auth.example.com', "serviceHeader1=$sessionId",
|
|
"serviceHeader2=$sessionId", 'test2.example.com',
|
|
'*.example.com'
|
|
);
|
|
|
|
ok(
|
|
$res = $client->_get(
|
|
'/', undef, 'test1.example.com', "lemonldap=$sessionId",
|
|
VHOSTTYPE => 'ServiceToken',
|
|
'HTTP_X_LLNG_TOKEN' => $token,
|
|
),
|
|
'Query with token 1'
|
|
);
|
|
ok( $res->[0] == 200, 'Code is 200' ) or explain( $res->[0], 200 );
|
|
count(2);
|
|
my %headers = @{ $res->[1] };
|
|
ok( $header{cookie} eq '', 'NO cookie found' )
|
|
or print STDERR Data::Dumper::Dumper( \%headers );
|
|
my @headers = grep { /^serviceHeader\d$|^XFromVH$/ } @{ $res->[1] };
|
|
my @values = grep { /\.example\.com|^$sessionId$/ } @{ $res->[1] };
|
|
ok( @headers == 6, 'Found 6 service headers' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
ok( @values == 6, 'Found 6 service header values' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(3);
|
|
|
|
# Waiting
|
|
Time::Fake->offset("+90s");
|
|
|
|
ok(
|
|
$res = $client->_get(
|
|
'/', undef, 'test1.example.com', undef,
|
|
VHOSTTYPE => 'ServiceToken',
|
|
'HTTP_X_LLNG_TOKEN' => $token,
|
|
),
|
|
'Query with token 2'
|
|
);
|
|
ok( $res->[0] == 200, 'Code is 200' ) or explain( $res->[0], 200 );
|
|
count(2);
|
|
|
|
@headers = grep { /^serviceHeader\d$|^XFromVH$/ } @{ $res->[1] };
|
|
@values = grep { /\.example\.com|^$sessionId$/ } @{ $res->[1] };
|
|
ok( @headers == 6, 'Found 6 service headers' )
|
|
or print STDERR Data::Dumper::Dumper($res);
|
|
ok( @values == 6, 'Found 6 service header values' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(2);
|
|
|
|
# Waiting
|
|
Time::Fake->offset("+210s");
|
|
|
|
ok(
|
|
$res = $client->_get(
|
|
'/', undef, 'test1.example.com', undef,
|
|
VHOSTTYPE => 'ServiceToken',
|
|
'HTTP_X_LLNG_TOKEN' => $token,
|
|
),
|
|
'Query with token 3'
|
|
);
|
|
ok( $res->[0] == 401, 'Code is 401' ) or explain( $res->[0], 401 );
|
|
count(2);
|
|
|
|
@headers = grep { /^serviceHeader\d$|^XFromVH$/ } @{ $res->[1] };
|
|
ok( @headers == 0, 'NONE service header found' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(1);
|
|
|
|
# Waiting
|
|
Time::Fake->offset("+270s");
|
|
|
|
ok(
|
|
$res = $client->_get(
|
|
'/', undef, 'test2.example.com', undef,
|
|
VHOSTTYPE => 'ServiceToken',
|
|
'HTTP_X_LLNG_TOKEN' => $token,
|
|
),
|
|
'Query with token 4'
|
|
);
|
|
ok( $res->[0] == 200, 'Code is 200' ) or explain( $res->[0], 200 );
|
|
count(2);
|
|
|
|
%headers = @{ $res->[1] };
|
|
ok( $headers{'zero'} eq '0', 'Found "zero" header with "0"' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
ok( $headers{'empty'} eq '', 'Found "empty" header without value' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(2);
|
|
|
|
@headers = grep { /^serviceHeader\d$|^XFromVH$/ } @{ $res->[1] };
|
|
@values = grep { /\.example\.com|^$sessionId$/ } @{ $res->[1] };
|
|
ok( @headers == 6, 'Found 6 service headers' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
ok( @values == 6, 'Found 6 service header values' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(2);
|
|
|
|
# Waiting
|
|
Time::Fake->offset("+330s");
|
|
|
|
ok(
|
|
$res = $client->_get(
|
|
'/', undef, 'test2.example.com', undef,
|
|
VHOSTTYPE => 'ServiceToken',
|
|
'HTTP_X_LLNG_TOKEN' => $token,
|
|
),
|
|
'Query with token 5'
|
|
);
|
|
ok( $res->[0] == 401, 'Code is 401' ) or explain( $res->[0], 401 );
|
|
count(2);
|
|
|
|
@headers = grep { /^serviceHeader\d$|^XFromVH$/ } @{ $res->[1] };
|
|
ok( @headers == 0, 'NONE service header found' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(1);
|
|
|
|
ok(
|
|
$res = $client->_get(
|
|
'/', undef, 'test3.example.com', undef,
|
|
VHOSTTYPE => 'ServiceToken',
|
|
'HTTP_X_LLNG_TOKEN' => $token,
|
|
),
|
|
'Query with token 6'
|
|
);
|
|
ok( $res->[0] == 401, 'Code is 401' ) or explain( $res->[0], 401 );
|
|
count(2);
|
|
|
|
@headers = grep { /^serviceHeader\d$|^XFromVH$/ } @{ $res->[1] };
|
|
ok( @headers == 0, 'NONE service header found' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(1);
|
|
|
|
$token = $crypt->encrypt( join ':', time, $sessionId );
|
|
ok(
|
|
$res = $client->_get(
|
|
'/', undef, 'test2.example.com', undef,
|
|
VHOSTTYPE => 'ServiceToken',
|
|
'HTTP_X_LLNG_TOKEN' => $token,
|
|
),
|
|
'Query with token 7'
|
|
);
|
|
ok( $res->[0] == 401, 'Code is 401' ) or explain( $res->[0], 401 );
|
|
count(2);
|
|
|
|
@headers = grep { /^serviceHeader\d$|^XFromVH$/ } @{ $res->[1] };
|
|
ok( @headers == 0, 'NONE service header found' )
|
|
or print STDERR Data::Dumper::Dumper( $res->[1] );
|
|
count(1);
|
|
|
|
done_testing( count() );
|
|
|
|
clean();
|
|
|