Apache-Session-Browseable
view release on metacpan or search on metacpan
lib/Apache/Session/Browseable/LDAP.pm view on Meta::CPAN
package Apache::Session::Browseable::LDAP;
use strict;
use Apache::Session;
use Apache::Session::Lock::Null;
use Apache::Session::Browseable::Store::LDAP;
use Apache::Session::Generate::SHA256;
use Apache::Session::Serialize::JSON;
use Apache::Session::Browseable::_common;
use Net::LDAP::Util qw(escape_filter_value);
our $VERSION = '1.3.6';
our @ISA = qw(Apache::Session Apache::Session::Browseable::_common);
sub populate {
my $self = shift;
$self->{object_store} = new Apache::Session::Browseable::Store::LDAP $self;
$self->{lock_manager} = new Apache::Session::Lock::Null $self;
$self->{generate} = \&Apache::Session::Generate::SHA256::generate;
$self->{validate} = \&Apache::Session::Generate::SHA256::validate;
$self->{serialize} = \&Apache::Session::Serialize::JSON::serialize;
$self->{unserialize} = \&Apache::Session::Serialize::JSON::unserialize;
return $self;
}
sub unserialize {
my $session = shift;
my $tmp = { serialized => $session };
Apache::Session::Serialize::JSON::unserialize($tmp);
return $tmp->{data};
}
sub searchOn {
my ( $class, $args, $selectField, $value, @fields ) = @_;
my $index =
ref( $args->{Index} ) ? $args->{Index} : [ split /\s+/, $args->{Index} ];
if ( grep { $_ eq $selectField } @$index ) {
( $selectField, $value ) = escape_filter_value( $selectField, $value );
return $class->_query( $args, $selectField, $value, @fields );
}
else {
return $class->SUPER::searchOn( $args, $selectField, $value, @fields );
}
}
sub searchOnExpr {
my ( $class, $args, $selectField, $value, @fields ) = @_;
my $index =
ref( $args->{Index} ) ? $args->{Index} : [ split /\s+/, $args->{Index} ];
if ( grep { $_ eq $selectField } @$index ) {
( $selectField, $value ) = escape_filter_value( $selectField, $value );
$value =~ s/\\2a/\*/gi;
return $class->_query( $args, $selectField, $value, @fields );
}
else {
return $class->SUPER::searchOn( $args, $selectField, $value, @fields );
}
}
sub _query {
my ( $class, $args, $selectField, $value, @fields ) = @_;
$args->{ldapObjectClass} ||= 'applicationProcess';
$args->{ldapAttributeId} ||= 'cn';
$args->{ldapAttributeContent} ||= 'description';
$args->{ldapAttributeIndex} ||= 'ou';
my %res = ();
my $ldap =
Apache::Session::Browseable::Store::LDAP::ldap( { args => $args } );
my $msg = $ldap->search(
base => $args->{ldapConfBase},
filter => "(&(objectClass="
. $args->{ldapObjectClass} . ")("
. $args->{ldapAttributeIndex}
. "=${selectField}_$value))",
#scope => 'base',
attrs => [ $args->{ldapAttributeContent}, $args->{ldapAttributeId} ],
);
$ldap->unbind();
$ldap->disconnect();
if ( $msg->code ) {
Apache::Session::Browseable::Store::LDAP->logError($msg);
}
else {
foreach my $entry ( $msg->entries ) {
my $id = $entry->get_value( $args->{ldapAttributeId} ) or die;
my $tmp = $entry->get_value( $args->{ldapAttributeContent} );
next unless ($tmp);
eval { $tmp = unserialize($tmp); };
next if ($@);
if (@fields) {
$res{$id}->{$_} = $tmp->{$_} foreach (@fields);
}
else {
$res{$id} = $tmp;
}
}
}
return \%res;
}
sub get_key_from_all_sessions {
my $class = shift;
my $args = shift;
my $data = shift;
$args->{ldapObjectClass} ||= 'applicationProcess';
$args->{ldapAttributeId} ||= 'cn';
$args->{ldapAttributeContent} ||= 'description';
( run in 3.079 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )