Catalyst-Plugin-OAuth2-AuthorizationServer
view release on metacpan or search on metacpan
t/server-refresh-family.t view on Meta::CPAN
use v5.36;
use Test::More;
use Test::Fatal;
use Digest::SHA qw/sha256/;
use MIME::Base64 qw/encode_base64url/;
use lib 't/lib';
use StubStore;
use TestApp::Model::OAuthStore;
my $class = 'Catalyst::Plugin::OAuth2::AuthorizationServer::Server';
require_ok($class);
my $key = 'k' x 32;
my $VERIFIER = 'pkce-verifier-' . ( '0' x 29 );
sub fresh_engine { return $class->new(
store => StubStore->new, signing_key => $key,
issuer => 'https://as', resource => 'https://rs/mcp',
) }
sub mint_code ( $eng, $verifier, $subject = 'user-9' ) {
my $challenge = encode_base64url( sha256($verifier) );
$eng->store->create_client({
client_id => 'c1', redirect_uris => ['https://app/cb'] });
my $rid = $eng->validate_authorize({
client_id => 'c1', redirect_uri => 'https://app/cb',
response_type => 'code', code_challenge => $challenge,
code_challenge_method => 'S256', scope => 'example:read',
resource => 'https://rs/mcp',
})->{request_id};
return $eng->issue_code( $subject, $rid )->{code};
}
sub first_pair ( $eng, $verifier = $VERIFIER, $subject = 'user-9' ) {
my $code = mint_code( $eng, $verifier, $subject );
return $eng->exchange_authorization_code({
grant_type => 'authorization_code', code => $code,
redirect_uri => 'https://app/cb', code_verifier => $verifier,
});
}
# refresh, returning the new pair
sub do_refresh ( $eng, $rt ) {
return $eng->refresh(
{ grant_type => 'refresh_token', refresh_token => $rt } );
}
# refresh, returning the exception (undef when it succeeded)
sub try_refresh ( $eng, $rt ) {
return exception { do_refresh( $eng, $rt ) };
}
# every stored binding, in no particular order, for assertions about
# family identity
sub bindings ( $eng ) {
my $r = $eng->store->refresh;
return [ map { $r->{$_}{binding} } keys %$r ];
}
# A live token rotates once, then reports reuse on replay.
{
my $store = StubStore->new;
$store->create_refresh_token( 'h1',
( run in 1.024 second using v1.01-cache-2.11-cpan-54e63673c56 )