From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
our $VERSION = '0.66'; # TRIAL VERSION
use Moose;
use MooseX::Types::URI qw/ Uri /;
use Net::SAML2::XML::Util qw/ no_comments /;
# ABSTRACT: SAML2 LogoutResponse Protocol object
has 'status' => (isa => 'Str', is => 'ro', required => 1);
has 'substatus' => (isa => 'Str', is => 'ro', required => 0);
has 'response_to' => (isa => 'Str', is => 'ro', required => 1);
sub new_from_xml {
my ($class, %args) = @_;
my $dom = no_comments($args{xml});
my $xpath = XML::LibXML::XPathContext->new($dom);
$xpath->registerNs('saml', 'urn:oasis:names:tc:SAML:2.0:assertion');
$xpath->registerNs('samlp', 'urn:oasis:names:tc:SAML:2.0:protocol');
my $self = $class->new(
id => $xpath->findvalue('/samlp:LogoutResponse/@ID'),
response_to => $xpath->findvalue('/samlp:LogoutResponse/@InResponseTo'),
destination => $xpath->findvalue('/samlp:LogoutResponse/@Destination'),
session => $xpath->findvalue('/samlp:LogoutResponse/samlp:SessionIndex'),
issuer => $xpath->findvalue('/samlp:LogoutResponse/saml:Issuer'),
status => $xpath->findvalue('/samlp:LogoutResponse/samlp:Status/samlp:StatusCode/@Value'),
substatus => $xpath->findvalue('/samlp:LogoutResponse/samlp:Status/samlp:StatusCode/samlp:StatusCode/@Value'),
);
return $self;
}
sub as_xml {
my ($self) = @_;
my $x = XML::Generator->new(':pretty');
my $saml = ['saml' => 'urn:oasis:names:tc:SAML:2.0:assertion'];
my $samlp = ['samlp' => 'urn:oasis:names:tc:SAML:2.0:protocol'];
$x->xml(
$x->LogoutResponse(
$samlp,
{ ID => $self->id,
Version => '2.0',
IssueInstant => $self->issue_instant,
Destination => $self->destination,
InResponseTo => $self->response_to },
$x->Issuer(
$saml,
$self->issuer,
),
$x->Status(
$samlp,
$x->StatusCode(
$samlp,
{ Value => $self->status },
)
)
)
);
}
sub success {
my ($self) = @_;
return 1 if $self->status eq $self->status_uri('success');
return 0;
}
__PACKAGE__->meta->make_immutable;
__END__
=pod
=encoding UTF-8
=head1 NAME
Net::SAML2::Protocol::LogoutResponse - SAML2 LogoutResponse Protocol object
=head1 VERSION
version 0.66
=head1 SYNOPSIS
my $logout_req = Net::SAML2::Protocol::LogoutResponse->new(
issuer => $issuer,
destination => $destination,
status => $status,
response_to => $response_to,
);
=head1 NAME
Net::SAML2::Protocol::LogoutResponse - the SAML2 LogoutResponse object
=head1 METHODS
=head2 new( ... )
Constructor. Returns an instance of the LogoutResponse object.
Arguments:
=over
=item B<issuer>
SP's identity URI
=item B<destination>
IdP's identity URI
=item B<status>
response status
=item B<response_to>
request ID we're responding to
=back
=head2 new_from_xml( ... )
Create a LogoutResponse object from the given XML.
Arguments:
=over
=item B<xml>
XML data
=back
=head2 as_xml( )
Returns the LogoutResponse as XML.
=head2 success( )
Returns true if the Response's status is Success.
=head1 AUTHORS
=over 4
=item *
Chris Andrews <chrisa@cpan.org>
=item *
Timothy Legge <timlegge@gmail.com>
=back
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2023 by Venda Ltd, see the CONTRIBUTORS file for others.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut