Merge branch 'devel' of h1dev:/srv/APKPM/
[APKPM.git] / lib / APKPM / LDAP.pm
index 6a24312..6d73d2e 100644 (file)
@@ -3,10 +3,11 @@ package APKPM::LDAP;
 use base qw(Gearman::Driver::Worker);
 use Moose;
 use Time::HiRes;
-use JSON::XS;
 use Data::Dump qw(dump);
+use Regexp::Common qw(net);
 
 with 'APKPM::Config';
+with 'APKPM::Gearman';
 
 use Net::LDAP;
 
@@ -18,12 +19,13 @@ sub process_name {
        return "$orig ($job_name)";
 }
 
-sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode {
+sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode(e_json) {
        my ( $self, $job, $workload ) = @_;
 
-       my $filter = $workload =~ m/\d+\.\d+\.\d+\.\d+/ ?
-               "dhcpStatements=fixed-address $workload" :
-               "cn=$workload*"
+       my $filter =
+               $workload =~ m/$RE{net}{IPv4}/ ? "dhcpStatements=fixed-address $workload" :
+               $workload =~ m/\w+=/ ? $workload : # have filter specified
+               "cn=*$workload*" ; # defailt: search for user
        ;
        warn "# search ",dump($filter);
 
@@ -31,7 +33,7 @@ sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode {
        my $mesg = $ldap->bind($self->config('ldapusername'),Password => $self->config('ldappasswd'));
        $mesg = $ldap->search(base => $self->config('ldapbase'), filter => $filter);
        warn "# found ", $mesg->count, " entries";
-       my $entries;
+       my $entries = [];
        for ( my $i = 0; $i < $mesg->count; $i++ ) {
                my $entry = $mesg->entry($i);
                my $e = { dn => $entry->dn };
@@ -44,11 +46,4 @@ sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode {
        return $entries;
 }
 
-sub encode {
-       my ( $self, $result ) = @_;
-       my $json = JSON::XS::encode_json($result);
-       warn "## ", dump $json;
-       return $json;
-}
-
 1;