package Lemonldap::Portal::Cda;
use strict;
use CGI;
use warnings;
use MIME::Base64;
our $VERSION = '0.02';
# Preloaded methods go here.
sub new {
my $class = shift;
my %args = @_;
my $self = bless {}, ref($class) || $class;
$self->{controlUrlOrigin} = \&__controlUrlOrigin;
my $mess = { 8 => 'CDA requested', };
$self->{msg} = $mess;
foreach ( keys %args ) {
$self->{$_} = $args{$_};
}
$self->{controlCDA} = \&__controlCDA_MASTER;
$self->{controlCDA} = \&__controlCDA_SLAVE if ( $self->{type} eq 'slave' );
return $self;
}
sub __none { #does ...nothing .. like me eg;
}
##------------------------------------------------------------------
## method controlUrlOrigin
## This method looks at param cgi 'urlc' in order to determine if
## the request comes with a vip url (redirection) or for the menu
##------------------------------------------------------------------
sub __controlCDA_MASTER {
my $self = shift;
my $operation = $self->{param}->{'op'};
$self->{operation} = $operation;
my $opx;
$opx = 1 if ( ( $operation eq 'c' ) or ( $operation eq 't' ) );
if ( defined($operation) and $opx == 1 ) {
$self->{'message'} = $self->{msg}{8};
$self->{'error'} = 1;
$self->{cda} = 1;
}
}
sub getAllRedirection {
my $self = shift;
return ( $self->{urlc}, $self->{urldc} );
}
sub message {
my $self = shift;
return ( $self->{message} );
}
sub error {
my $self = shift;
return ( $self->{error} );
}
sub __controlCDA_SLAVE {
my $self = shift;
my $operation = $self->{param}->{'op'};
$self->{operation} = $operation;
if ( defined($operation) ) {
$self->{session} = $operation;
$self->{'message'} = $self->{msg}{8};
$self->{'error'} = 1;
$self->{cda} = 1;
}
}
sub __controlUrlOrigin {
my $urldc;
my $self = shift;
my $urlc = $self->{param}->{'url'};
if ( defined($urlc) ) {
$urldc = decode_base64($urlc);
# $urldc =~ s#:\d+/#/#; # Suppress port number in URL
$urlc = encode_base64( $urldc, '' );
$self->{'urlc'} = $urlc;
$self->{'urldc'} = $urldc;
}
}
sub getSession {
my $self = shift;
return ( $self->{session} ) if $self->{session};
return (0);
}
sub process {
my $self = shift;
my %args = @_;
foreach ( keys %args ) {
$self->{$_} = $args{$_};
}
&{ $self->{controlUrlOrigin} }($self); # no error avaiable in this step
&{ $self->{controlCDA} }($self);
return ($self) if $self->{'error'}; ## it's not necessary to go next.
}
# Autoload methods go after =cut, and are processed by the autosplit program.
1;
__END__
=head1 NAME
Lemonldap::Portal::Cda - Cross Domain Authentification Perl extension for Lemonldap SSO
=head1 SYNOPSIS
use Lemonldap::Portal::Cda;
my $stack_user= Lemonldap::Portal::Cda->new(type=> 'master');
or
my $stack_user= Lemonldap::Portal::Cda->new(type=> 'slave');
=head1 DESCRIPTION
Lemonldap is a SSO system under GPL.
Sometimes you have two or more domains (.bar.foo and .bar.foo2)
The CDA :Cross Domain Authentification manages and centralize all credentials on all domains .
CDA works with redirection in order to catch the credential cookie.
You may use an objet "master" domain with a "slave" domain .
All authentification needed for the "slave" domain will be redirected on the "master" domain
=head1 METHODS
=head2 new (type => 'master'|'slave');
=head2 process (param => \%params,
bar => foo );
The process method alway return an error '8' (message = 'CDA requested') .
The master CDA just do a redirection with the id_session in the params of url GET .
The slave CDA uses the id_session send by master for put on fly a cookie on slave domain.
see directory examples.
=head2 (url_encoded,url_decoded) : getAllRedirection
return the initial request encoded in Base64 and plaintext url
=head2 string : getSession
return the id_session or false .
=head2 string : message() ;
return the text of error
=head2 int : error() ;
return the number of error
=head1 SEE ALSO
Lemonldap(3), Lemonldap::Portal::Standard
http://lemonldap.sourceforge.net/
"Writing Apache Modules with Perl and C" by Lincoln Stein E<amp> Doug
MacEachern - O'REILLY
=over 1
=item Eric German, E<lt>germanlinux@yahoo.frE<gt>
=item Xavier Guimard, E<lt>x.guimard@free.frE<gt>
=back
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2004 by Eric German E<amp> Xavier Guimard
Lemonldap originaly written by Eric german who decided to publish him in 2003
under the terms of the GNU General Public License version 2.
=over 1
=item This package is under the GNU General Public License, Version 2.
=item The primary copyright holder is Eric German.
=item Portions are copyrighted under the same license as Perl itself.
=item Portions are copyrighted by Doug MacEachern and Lincoln Stein.
This library is under the GNU General Public License, Version 2.
=back
This program 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; version 2 dated June, 1991.
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.
A copy of the GNU General Public License is available in the source tree;
if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
=cut