package Lemonldap::Portal::Cda;
use strict;
use CGI;
use warnings;
use MIME::Base64;
our $VERSION = '0.01';


# 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;
if( defined( $operation ) and $operation eq 'cda' )
{
  
   $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



