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, L and L =head2 SUBROUTINES =over =item * B (constructor): it takes different arguments depending on the choosen type. Examples: =over =item * B: $confAccess = new Lemonldap::NG::Manager::Conf( { type => 'File', dirName => '/var/lib/lemonldap-ng/', }); =item * B: $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: returns a hash reference to the configuration. it takes a hash reference as first argument containing 2 optional parameters: =over =item * C $number>: the number of the configuration wanted. If this argument is omitted, the last configuration is returned. =item * C [array of names]: the desired fields asked. By default, getConf returns all (C