BEGIN {
require
't/test-lib.pm'
;
}
my
$debug
=
'error'
;
my
(
$issuer
,
$res
);
plan
skip_all
=>
"Missing dependencies: $@"
if
($@);
ok(
$issuer
= issuer(),
'Issuer portal'
);
count(1);
my
$s
=
"user=french&password=french"
;
ok(
$res
=
$issuer
->_post(
'/'
,
IO::String->new(
$s
),
accept
=>
'text/html'
,
length
=>
length
(
$s
),
),
'Post authentication'
);
count(1);
my
$idpId
= expectCookie(
$res
);
ok(
$res
=
$issuer
->_get(
'/cas/login'
,
cookie
=>
"lemonldap=$idpId"
,
accept
=>
'text/html'
),
'Query CAS server'
);
count(1);
expectPortalError(
$res
, 107,
"Unknown CAS service"
);
my
$ticket
;
"INVALID_SERVICE"
);
"INVALID_SERVICE"
);
Time::Fake->offset(
"+10m"
);
clean_sessions();
done_testing( count() );
sub
issuer {
return
LLNG::Manager::Test->new(
{
ini
=> {
logLevel
=>
$debug
,
domain
=>
'idp.com'
,
authentication
=>
'Demo'
,
userDB
=>
'Same'
,
issuerDBCASActivation
=> 1,
casAttr
=>
'uid'
,
casTicketExpiration
=>
'300'
,
casAppMetaDataOptions
=> {
sp
=> {
},
sp2
=> {
},
},
casAppMetaDataExportedVars
=> {
sp
=> {
cn
=>
'cn'
,
mail
=>
'mail'
,
uid
=>
'uid'
,
},
sp2
=> {
cn
=>
'cn'
,
mail
=>
'mail'
,
uid
=>
'uid'
,
},
},
casAccessControlPolicy
=>
'error'
,
multiValuesSeparator
=>
';'
,
}
}
);
}
sub
casGetTicket {
my
(
$issuer
,
$id
,
$service
) =
@_
;
ok(
my
$res
=
$issuer
->_get(
'/cas/login'
,
cookie
=>
"lemonldap=$id"
,
query
=>
'service='
.
$service
,
accept
=>
'text/html'
),
'Query CAS server'
);
count(1);
my
(
$ticket
) =
return
$ticket
;
}
sub
casGetResponse {
my
(
$issuer
,
$ticket
,
$service
) =
@_
;
ok(
my
$res
=
$issuer
->_get(
'/cas/p3/serviceValidate'
,
query
=>
'service='
.
$service
.
'&'
.
$ticket
,
accept
=>
'text/html'
),
'Query CAS server'
);
expectOK(
$res
);
count(1);
return
$res
;
}
sub
expectCasFail {
my
(
$res
,
$code
) =
@_
;
$code
||=
"INVALID_TICKET"
;
my
$content
=
$res
->[2]->[0];
like(
$content
,
qr,authenticationFailure code="([^"]+)",
,
"CAS response indicates success"
);
my
(
$response_code
) =
$content
=~
qr,authenticationFailure code="([^"]+)",
;
is(
$response_code
,
$code
,
"Incorrect CAS error code"
);
count(2);
}
sub
expectCasSuccess {
my
(
$res
) =
@_
;
my
$content
=
$res
->[2]->[0];
like(
$content
,
qr,cas:authenticationSuccess,
,
"CAS response indicates success"
);
count(1);
}