lemonldap-ng/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/IssuerDBGet.pm

268 lines
6.4 KiB
Perl

## @file
# Get Issuer file
# Enable get parameters for specific applications
## @class
# Get Issuer class
package Lemonldap::NG::Portal::IssuerDBGet;
use strict;
use Lemonldap::NG::Portal::Simple;
use MIME::Base64;
use URI::Escape;
use base qw(Lemonldap::NG::Portal::_LibAccess);
our $VERSION = '2.0.0';
## @method void issuerDBInit()
# Nothing to do
# @return Lemonldap::NG::Portal error code
sub issuerDBInit {
my $self = shift;
return PE_OK;
}
## @apmethod int issuerForUnAuthUser()
# Manage Get request for unauthenticated user
# @return Lemonldap::NG::Portal error code
sub issuerForUnAuthUser {
my $self = shift;
# Get URLs
my $issuerDBGetPath = $self->{issuerDBGetPath};
my $get_login = 'login';
my $get_logout = 'logout';
# Called URL
my $url = $self->url();
my $url_path = $self->url( -absolute => 1 );
$url_path =~ s#^//#/#;
# 1. LOGIN
if ( $url_path =~ m#${issuerDBGetPath}${get_login}#o ) {
$self->lmLog( "URL $url detected as a Get LOGIN URL", 'debug' );
# Keep values in hidden fields
}
# 2. LOGOUT
if ( $url_path =~ m#${issuerDBGetPath}${get_logout}#o ) {
$self->lmLog( "URL $url detected as an Get LOGOUT URL", 'debug' );
# GET parameters
my $logout_url = $self->param('url');
if ($logout_url) {
# Display a link to the provided URL
$self->lmLog( "Logout URL $logout_url will be displayed", 'debug' );
$self->info("<h3>Back to logout url</h3>");
$self->info("<p><a href=\"$logout_url\">$logout_url</a></p>");
$self->{activeTimer} = 0;
return PE_CONFIRM;
}
return PE_LOGOUT_OK;
}
return PE_OK;
}
## @apmethod int issuerForAuthUser()
# Manage Get request for authenticated user
# @return Lemonldap::NG::Portal error code
sub issuerForAuthUser {
my $self = shift;
# Get URLs
my $issuerDBGetPath = $self->{issuerDBGetPath};
my $get_login = 'login';
my $get_logout = 'logout';
# Called URL
my $url = $self->url();
my $url_path = $self->url( -absolute => 1 );
$url_path =~ s#^//#/#;
# Session ID
my $session_id = $self->{sessionInfo}->{_session_id} || $self->{id};
# Session creation timestamp
my $time = $self->{sessionInfo}->{_utime} || time();
# 1. LOGIN
if ( $url_path =~ m#${issuerDBGetPath}${get_login}#o ) {
$self->lmLog( "URL $url detected as an Get LOGIN URL", 'debug' );
# Compute GET parameters to send and build urldc accordingly
&computeGetParams($self);
$self->lmLog( "Redirect user to " . $self->{urldc}, 'debug' );
return $self->_subProcess(qw(autoRedirect));
}
# 2. LOGOUT
if ( $url_path =~ m#${issuerDBGetPath}${get_logout}#o ) {
$self->lmLog( "URL $url detected as an Get LOGOUT URL", 'debug' );
# GET parameters
my $logout_url = $self->param('url');
# Delete local session
unless (
$self->_deleteSession( $self->getApacheSession( $session_id, 1 ) ) )
{
$self->lmLog( "Fail to delete session $session_id ", 'error' );
}
if ($logout_url) {
# Display a link to the provided URL
$self->lmLog( "Logout URL $logout_url will be displayed", 'debug' );
$self->info("<h3>back to logout url</h3>");
$self->info("<p><a href=\"$logout_url\">$logout_url</a></p>");
$self->{activeTimer} = 0;
return PE_CONFIRM;
}
return PE_LOGOUT_OK;
}
return PE_OK;
}
## @apmethod int issuerLogout()
# Does nothing
# @return Lemonldap::NG::Portal error code
sub issuerLogout {
my $self = shift;
# Session ID
my $session_id = $self->{sessionInfo}->{_session_id} || $self->{id};
# Delete linked Get sessions
return PE_OK;
}
## @apmethod string computeGetParams()
# compute GET parameters to send to application
# build urldc accordingly
# @return nothing
sub computeGetParams {
my $self = shift;
# Additional GET variables
my $getVars = "";
if ( exists $self->{issuerDBGetParameters} ) {
my $issuerDBGetParameters = $self->{issuerDBGetParameters};
foreach my $vhost ( keys %$issuerDBGetParameters ) {
# if vhost is matching
if ( index( $self->{urldc}, $vhost ) != -1 ) {
my $params = $issuerDBGetParameters->{$vhost};
foreach my $param ( keys %$params ) {
my $value = $self->{sessionInfo}->{ $params->{$param} };
# Chain GET parameters unless there are evaluation errors
$getVars .= "&" . $param . "=" . uri_escape($value)
unless $@;
}
}
}
}
$getVars =~ s/^\&//; # remove first &
$getVars =~ s/[\r\n\t]//; # remove invalid characters
# If there are some GET variables to send
# Add them to URL string
if ( $getVars ne "" ) {
my $urldc = $self->{urldc};
$urldc .= ( $urldc =~ /\?\w/ )
?
# there are already get variables
"&" . $getVars
:
# there are no get variables
"?" . $getVars;
$self->{urldc} = $urldc;
}
}
1;
__END__
=head1 NAME
=encoding utf8
Lemonldap::NG::Portal::IssuerDBGet - Get IssuerDB for LemonLDAP::NG
=head1 DESCRIPTION
Get Issuer implementation in LemonLDAP::NG
=head1 SEE ALSO
L<Lemonldap::NG::Portal>,
=head1 AUTHOR
=over
=item David Coutadeur, E<lt>dcoutadeur@linagora.comE<gt>
=back
=head1 BUG REPORT
Use OW2 system to report bug or ask for features:
L<http://jira.ow2.org>
=head1 DOWNLOAD
Lemonldap::NG is available at
L<http://forge.objectweb.org/project/showfiles.php?group_id=274>
=head1 COPYRIGHT AND LICENSE
=over
=item Copyright (C) 2016 by David Coutadeur, E<lt>dcoutadeur@linagora.comE<gt>
=back
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see L<http://www.gnu.org/licenses/>.
=cut