Apache-Session-Browseable
view release on metacpan or search on metacpan
lib/Apache/Session/Browseable/Store/LDAP.pm view on Meta::CPAN
package Apache::Session::Browseable::Store::LDAP;
use strict;
use Net::LDAP;
our $VERSION = '1.3.8';
sub new {
my $class = shift;
return bless {}, $class;
}
sub insert {
my $self = shift;
my $session = shift;
$self->{args} = $session->{args};
$self->{args}->{ldapObjectClass} ||= 'applicationProcess';
$self->{args}->{ldapAttributeId} ||= 'cn';
$self->{args}->{ldapAttributeContent} ||= 'description';
$self->{args}->{ldapAttributeIndex} ||= 'ou';
my $index =
ref( $session->{args}->{Index} )
? $session->{args}->{Index}
: [ split /\s+/, $session->{args}->{Index} ];
my $id = $session->{data}->{_session_id};
my $attrIndex;
foreach my $i (@$index) {
my $t;
next unless ( $t = $session->{data}->{$i} );
push @$attrIndex, "${i}_$t";
}
my $attrs = [
objectClass => $self->{args}->{ldapObjectClass},
$self->{args}->{ldapAttributeId} => $session->{data}->{_session_id},
$self->{args}->{ldapAttributeContent} => $session->{serialized},
];
push @$attrs, ( $self->{args}->{ldapAttributeIndex} => $attrIndex )
if ($attrIndex);
my $msg = $self->ldap->add(
$self->{args}->{ldapAttributeId} . "=$id,"
. $self->{args}->{ldapConfBase},
attrs => $attrs,
);
$self->ldap->unbind() && delete $self->{ldap};
$self->logError($msg) if ( $msg->code );
}
sub update {
my $self = shift;
my $session = shift;
$self->{args} = $session->{args};
$self->{args}->{ldapObjectClass} ||= 'applicationProcess';
$self->{args}->{ldapAttributeId} ||= 'cn';
$self->{args}->{ldapAttributeContent} ||= 'description';
$self->{args}->{ldapAttributeIndex} ||= 'ou';
my $index =
ref( $session->{args}->{Index} )
? $session->{args}->{Index}
: [ split /\s+/, $session->{args}->{Index} ];
my $id = $session->{data}->{_session_id};
my $attrIndex;
foreach my $i (@$index) {
my $t;
next unless ( $t = $session->{data}->{$i} );
push @$attrIndex, "${i}_$t";
}
my $attrs =
{ $self->{args}->{ldapAttributeContent} => $session->{serialized} };
$attrs->{ $self->{args}->{ldapAttributeIndex} } = $attrIndex
if ($attrIndex);
my $msg = $self->ldap->modify(
$self->{args}->{ldapAttributeId} . "="
. $session->{data}->{_session_id} . ","
. $self->{args}->{ldapConfBase},
replace => $attrs,
);
$self->ldap->unbind() && delete $self->{ldap};
$self->logError($msg) if ( $msg->code );
}
sub materialize {
my $self = shift;
my $session = shift;
$self->{args} = $session->{args};
$self->{args}->{ldapObjectClass} ||= 'applicationProcess';
$self->{args}->{ldapAttributeId} ||= 'cn';
$self->{args}->{ldapAttributeContent} ||= 'description';
$self->{args}->{ldapAttributeIndex} ||= 'ou';
my $msg = $self->ldap->search(
base => $self->{args}->{ldapAttributeId} . "="
. $session->{data}->{_session_id} . ","
. $self->{args}->{ldapConfBase},
filter => '(objectClass=' . $self->{args}->{ldapObjectClass} . ')',
scope => 'base',
attrs => [ $self->{args}->{ldapAttributeContent} ],
);
$self->ldap->unbind() && delete $self->{ldap};
$self->logError($msg) if ( $msg->code );
eval {
$session->{serialized} = $msg->shift_entry()
( run in 0.938 second using v1.01-cache-2.11-cpan-5837b0d9d2c )