/[A3C]/lib/A3C/LDAP.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/A3C/LDAP.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 41 by dpavlin, Sun Mar 30 15:23:35 2008 UTC revision 42 by dpavlin, Sun Mar 30 16:58:21 2008 UTC
# Line 6  use warnings; Line 6  use warnings;
6  use Net::LDAP;  use Net::LDAP;
7  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
8  use base qw(Jifty::Object Class::Accessor::Fast);  use base qw(Jifty::Object Class::Accessor::Fast);
9  __PACKAGE__->mk_accessors( qw(ldap server dn password current_search) );  our @config_fields = qw( server dn password base );
10    Jifty->log->debug("using fields from configuration: ",dump( @config_fields ));
11    __PACKAGE__->mk_accessors( qw(ldap current_search), @config_fields );
12    
13    
14  =head1 NAME  =head1 NAME
# Line 34  sub new { Line 36  sub new {
36          my $ldap_config = Jifty->config->app('LDAP');          my $ldap_config = Jifty->config->app('LDAP');
37          Jifty->log->debug( "config->app(LDAP) = ",dump( $ldap_config ) );          Jifty->log->debug( "config->app(LDAP) = ",dump( $ldap_config ) );
38    
39          $args->{server}         ||= $ldap_config->{Server};          foreach my $f ( @config_fields ) {
40          $args->{dn}                     ||= $ldap_config->{DN};                  if ( my $v = $ldap_config->{$f} ) {
41          $args->{password}       ||= $ldap_config->{Password};                          $args->{$f} = $v;
42                    }
43            }
44    
45          my $ldap = Net::LDAP->new( $args->{server} ) or die "$@";          my $ldap = Net::LDAP->new( $args->{server} ) or die "$@";
46    
# Line 54  sub new { Line 58  sub new {
58  =head2 search  =head2 search
59    
60    my $msg = A3C::LDAP->search(    my $msg = A3C::LDAP->search(
61                          base    => 'dc=skole,dc=hr',          base    => 'dc=skole,dc=hr',
62                          filter  => '(objectClass=hrEduOrg)',          filter  => '(objectClass=hrEduOrg)',
63                          sizelimit => 10,          sizelimit => 10,
64    );    );
65    
66  =cut  =cut
# Line 66  sub search { Line 70  sub search {
70    
71          my $search = $self->ldap->search( @_ );          my $search = $self->ldap->search( @_ );
72          if ( $search->code != 0 ) {          if ( $search->code != 0 ) {
73                  Jifty->log->error( $search->error );                  Jifty->log->error( $search->error, ' for ', dump( @_ ) );
74          }          }
75          return $self->current_search( $search );          return $self->current_search( $search );
76  }  }
# Line 98  sub count { Line 102  sub count {
102          $self->current_search->count;          $self->current_search->count;
103  }  }
104    
105    =head2 as_collection_of
106    
107      my $connection = $ldap->collection('Organization', $limit);
108    
109    =cut
110    
111    my $collection2filter = {
112            'User'                  => '(objectClass=hrEduPerson)',
113            'Organization'  => '(objectClass=hrEduOrg)',
114    };
115    
116    sub collection {
117            my ( $self, $model, $limit ) = @_;
118    
119            $limit ||= 100; # FIXME
120    
121            my $filter = $collection2filter->{$model};
122            die "unknown model $model" unless $filter;
123    
124            $self->search(
125                    base => $self->base,
126                    filter => $filter,
127                    sizelimit => $limit,
128            );
129    
130            Jifty->log->info("searching LDAP for $model with $filter limit $limit returned ", $self->count, " results");
131    
132            my $class = Jifty->app_class('Model', $model . 'Collection' ) or die "can't create ${model}Collection";
133            my $collection = $class->new() or die "can't $class->new";
134    
135            while ( my $entry = $self->next ) {
136                    my $model_obj = Jifty->app_class('Model',$model)->new;
137                    #warn dump( $model_obj );
138                    my $additional;
139    #               if ( $model eq 'User' ) {
140    #                       my $organization = A3C::Model::Organization->new;
141    #                       $self->ldap2model( $organization, $entry );
142    #                       $additional->{organization} = $organization;
143    #               }
144                    $self->ldap2model( $model_obj, $entry, %$additional );
145                    $collection->add_record( $model_obj );
146            }
147    
148            return $collection;
149    }
150    
151  =head1 INTERNAL METHODS  =head1 INTERNAL METHODS
152    
153  Following methods map directly into L<Net::LDAP>  Following methods map directly into L<Net::LDAP>
# Line 106  Following methods map directly into L<Ne Line 156  Following methods map directly into L<Ne
156    
157  Result of last C<< $ldap->search >> request  Result of last C<< $ldap->search >> request
158    
159    =head2 model_to_entry
160    
161      $ldap->model_to_entry( $model, $entry, $additional );
162    
163  =cut  =cut
164    
165    sub ldap2model {
166            my ( $self, $model, $entry, $additional ) = @_;
167            my $data;
168    
169            my @columns = map { $_->name } $model->columns;
170            #warn "# columns = ",dump( @columns );
171    
172            foreach my $attr ( $entry->attributes ) {
173                    if ( grep(/^\Q$attr\E$/, @columns ) ) {
174                            $data->{$attr} = $entry->get_value( $attr );
175                    } elsif ( $attr !~ m/^(objectClass)$/i ) {
176                            Jifty->log->error(ref($model)," doesn't have $attr");
177                    }
178            }
179    
180            Jifty->log->debug( ref($model), ' = ', dump( $data ) );
181    
182            my ( $id, $message ) = $model->load_or_create( %$data, %$additional );
183    
184            if ( $id ) {
185                    Jifty->log->info( $message || 'Added', ' ', ref($model), ' ', $model->id );
186            } else {
187                    Jifty->log->error( ref($model), " ", $message );
188            }
189    }
190    
191    
192    
193  1;  1;

Legend:
Removed from v.41  
changed lines
  Added in v.42

  ViewVC Help
Powered by ViewVC 1.1.26