Catalyst-Authentication-Credential-Authen-Simple
view release on metacpan or search on metacpan
lib/Catalyst/Authentication/Credential/Authen/Simple.pm view on Meta::CPAN
}
# Catalyst documentation only says that Logger objects SHOULD
# implement these methods. $log has to exist, and $log->debug too
# (they've been used a couple of lines earlier)
if ($log->can('warn') and
$log->can('error') and
$log->can('debug') and
$log->can('info')
){
foreach my $auth (@auth_arr){
$auth->log($log);
}
} else {
$log->debug('Authen::Simple classes cannot log with the configured Catalyst log object') if ($app->debug);
}
$self->{'_config'}->{'password_field'} ||= 'password';
$self->{'_auth'} = new Authen::Simple(@auth_arr);
return $self;
}
sub authenticate {
my ($self, $c, $realm, $authinfo) = @_;
my $user = $authinfo->{'username'};
my $password = $authinfo->{'password'};
## because passwords may be in a hashed format, we have to make sure that we remove the
## password_field before we pass it to the user routine, as some auth modules use
## all data passed to them to find a matching user...
my $userfindauthinfo = {%{$authinfo}};
delete($userfindauthinfo->{$self->{'_config'}->{'password_field'}});
my $user_obj = $realm->find_user($userfindauthinfo, $c);
if (not ref($user_obj)) {
$c->log->debug("Unable to locate user matching user info provided") if $c->debug;
return;
}
unless (defined $password) {
$c->log->debug("Can't login a user without a password") if $c->debug;
return 0;
}
if ($self->{'_auth'}->authenticate($user, $password)){
$c->log->debug("User $user Authenticated") if $c->debug;
return $user_obj;
} else {
$c->log->debug("None of the Authen::Simple classes authed $user") if $c->debug;;
return;
}
}
#################### main pod documentation begin ###################
=head1 NAME
Catalyst::Authentication::Credential::Authen::Simple - Verify credentials with the Authen::Simple framework
=head1 SYNOPSIS
use Catalyst qw(Authentication);
# later on ...
if ($c->authenticate({ username => 'myusername',
password => 'mypassword' })){
my $long_name = $c->user->get('LongName');
# Hello Mr $long_name
}
=head1 DESCRIPTION
This module helps your Cataylst Application authenticate against a lot of credential databases thanks to the Authen::Simple framework.
=head1 USAGE
Just configure your Catalyst App Authentication to use class 'Authen::Simple' as the credential verifier, and give it a set of Authen::Simple classes. You can pass arguments to the Authen::Simple:XXX class constructors with the 'args' key. Note that ...
'Plugin::Authentication' => {
'realms' => {
'default' => {
'store' => { ... }
'credential' => {
'class' => 'Authen::Simple',
'authen' => [
{
'class' => 'Passwd',
'args' => {
'path' => '/etc/shadow'
}
},
{
'class' => 'SSH',
'args' => {
'host' => 'host.company.com'
}
}
]
}
}
}
}
If the Catalyst log object is compatible with the Authen::Simple log object, Authen::Simple classes will log through Catalyst.
=head2 new
Called by Catalyst::Authentication. Instances the Authen::Simple classes read from the configuration.
=cut
=head2 authenticate
Usage : Call $c->authenticate({ username => ..., password => ...});
Returns : User object if the credentials are verified successfully. undef if user not authenticated.
=cut
=head1 AUTHOR
Jose Luis Martinez
CPAN ID: JLMARTIN
CAPSiDE
jlmartinez@capside.com
http://www.pplusdomain.net
=head1 THANKS
Tobjorn Lindahl, Dylan Martin, Tomas Doran and Inigo Tejedor Arrondo for patches and recommedations
=head1 COPYRIGHT
Copyright (c) 2008 by Jose Luis Martinez Torres
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the
LICENSE file included with this module.
=head1 SEE ALSO
Authen::Simple and all of the Authen::Simple::XXX classes
=cut
#################### main pod documentation end ###################
1;
( run in 0.801 second using v1.01-cache-2.11-cpan-39bf76dae61 )