Catalyst-Authentication-Store-LDAP
view release on metacpan or search on metacpan
lib/Catalyst/Authentication/Store/LDAP/User.pm view on Meta::CPAN
my ( $self, $attribute ) = @_;
if ( !defined($attribute) ) {
Catalyst::Exception->throw(
"You must provide an attribute to has_attribute!");
}
if ( $attribute eq "dn" ) {
return $self->ldap_entry->dn;
}
elsif ( $attribute eq "username" ) {
return $self->user->{'attributes'}->{$self->store->user_field};
}
elsif ( exists( $self->user->{'attributes'}->{$attribute} ) ) {
return $self->user->{'attributes'}->{$attribute};
}
else {
return undef;
}
}
=head2 get
A simple wrapper around has_attribute() to satisfy the Catalyst::Authentication::User API.
=cut
sub get { return shift->has_attribute(@_) }
=head2 get_object
Satisfies the Catalyst::Authentication::User API and returns the contents of the user()
attribute.
=cut
sub get_object { return shift->user }
=head2 ldap_connection
Re-binds to the auth store with the credentials of the user you logged in
as, and returns a L<Net::LDAP> object which you can use to do further queries.
=cut
sub ldap_connection {
my $self = shift;
$self->store->ldap_bind( undef, $self->ldap_entry->dn,
$_ldap_connection_passwords{refaddr($self)} );
}
=head2 AUTOLOADed methods
We automatically map the attributes of the underlying L<Net::LDAP::Entry>
object to read-only accessor methods. So, if you have an entry that looks
like this one:
dn: cn=adam,ou=users,dc=yourcompany,dc=com
cn: adam
loginShell: /bin/zsh
homeDirectory: /home/adam
gecos: Adam Jacob
gidNumber: 100
uidNumber: 1053
mail: adam@yourcompany.com
uid: adam
givenName: Adam
sn: Jacob
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: Person
objectClass: Top
objectClass: posixAccount
You can call:
$c->user->homedirectory
And you'll get the value of the "homeDirectory" attribute. Note that
all the AUTOLOADed methods are automatically lower-cased.
=head2 Special Keywords
The highly useful and common method "username" will map to the configured
value of user_field (uid by default.)
$c->user->username == $c->user->uid
=cut
sub DESTROY {
my $self = shift;
# Don't leak passwords..
delete $_ldap_connection_passwords{refaddr($self)};
}
sub can {
my ($self, $method) = @_;
return $self->SUPER::can($method) || do {
return unless $self->has_attribute($method);
return sub { $_[0]->has_attribute($method) };
};
}
sub AUTOLOAD {
my $self = shift;
( my $method ) = ( our $AUTOLOAD =~ /([^:]+)$/ );
if ( $method eq "DESTROY" ) {
return;
}
if ( my $attribute = $self->has_attribute($method) ) {
return $attribute;
}
else {
Catalyst::Exception->throw(
"No attribute $method for User " . $self->stringify );
}
}
( run in 1.561 second using v1.01-cache-2.11-cpan-97f6503c9c8 )