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 Doug MacEachern - O'REILLY =over 1 =item Eric German, Egermanlinux@yahoo.frE =item Xavier Guimard, Ex.guimard@free.frE =back =head1 COPYRIGHT AND LICENSE Copyright (C) 2004 by Eric German E 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