package Lemonldap::NG::Manager::Conf; use strict; use Storable qw(thaw freeze); use MIME::Base64; our $VERSION = 0.4; our @ISA; sub new { my $class = shift; my $args; if ( ref( $_[0] ) ) { $args = $_[0]; } else { %$args = @_; } $args ||= {}; my $self = bless $args, $class; unless($self->{mdone}) { unless($self->{type}) { print STDERR "configStorage: type is not defined\n"; return 0; } $self->{type} = "Lemonldap::NG::Manager::Conf::$self->{type}" unless $self->{type} =~ /^Lemonldap/; eval "require $self->{type}"; die ($@) if($@); push @ISA, $self->{type}; return 0 unless $self->prereq; $self->{mdone}++; } return $self; } sub saveConf { my($self,$conf) = @_; my $fields; while(my($k,$v) = each(%$conf)) { if(ref($v)) { $fields->{$k} = "'" . encode_base64( freeze( $v ) ) . "'"; $fields->{$k} =~ s/[\r\n]//g; } elsif($v =~ /^\d+/) { $fields->{$k} = "$v"; } else { $fields->{$k} = "'$v'"; } } $fields->{cfgNum} = $self->lastCfg+1; return $self->store($fields); } sub getConf { my($self, $args) = @_; $args->{cfgNum} ||= $self->lastCfg; return undef unless $args->{cfgNum}; my $fields = $self->load($args->{cfgNum}, $args->{fields}); my $conf; while(my($k,$v) = each(%$fields)) { my $tmp; eval "\$tmp = thaw(decode_base64($v))"; if($@ or not($tmp)) { $v =~ s/^'(.*)'$/$1/; $conf->{$k} = $v; } else { $conf->{$k} = $tmp; } } return $conf; } 1; __END__ =head1 NAME Lemonldap::NG::Manager::Conf - Perl extension written to manage Lemonldap::NG Web-SSO configuration. =head1 SYNOPSIS use Lemonldap::NG::Manager::Conf; my $confAccess = new Lemonldap::NG::Manager::Conf( { type=>'File', dirName=>"/tmp/", }, ) or die "Unable to build Lemonldap::NG::Manager::Conf, see Apache logs"; my $config = $confAccess->getConf(); =head1 DESCRIPTION Lemonldap::NG::Manager provides a simple interface to access to Lemonldap::NG Web-SSO configuration. It is used by L<Lemonldap::NG::Handler>, L<Lemonldap::NG::Portal> and L<Lemonldap::NG::Manager> =head2 SUBROUTINES =over =item * B<new> (constructor): it takes different arguments depending on the choosen type. Examples: =over =item * B<File>: $confAccess = new Lemonldap::NG::Manager::Conf( { type => 'File', dirName => '/var/lib/lemonldap-ng/', }); =item * B<DBI>: $confAccess = new Lemonldap::NG::Manager::Conf( { type dbiChain => 'DBI:mysql:database=lemonldap-ng,host=1.2.3.4', dbiUser => 'lemonldap' dbiPassword => 'pass' dbiTable => 'lmConfig', }); =back =item * B<getConf>: returns a hash reference to the configuration. it takes a hash reference as first argument containing 2 optional parameters: =over =item * C<cfgNum => $number>: the number of the configuration wanted. If this argument is omitted, the last configuration is returned. =item * C<fields => [array of names]: the desired fields asked. By default, getConf returns all (C<select * from lmConfig>). =back =item B<saveConf>: stores the Lemonldap::NG configuration passed in argument (hash reference). it returns the number of the new configuration. =back =head1 SEE ALSO L<Lemonldap::NG::Handler>, L<Lemonldap::NG::Portal>, L<CGI> =head1 AUTHOR Xavier Guimard, E<lt>x.guimard@free.frE<gt> =head1 COPYRIGHT AND LICENSE Copyright (C) 2006 by Xavier Guimard This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available. =cut