Auth-Kokolores
view release on metacpan or search on metacpan
lib/Auth/Kokolores/Plugin/FileRetrieve.pm view on Meta::CPAN
package Auth::Kokolores::Plugin::FileRetrieve;
use Moose;
use DBI;
# ABSTRACT: kokolores plugin for retrieving users from a file
our $VERSION = '1.01'; # VERSION
extends 'Auth::Kokolores::Plugin';
has 'seperator' => ( is => 'ro', isa => 'Str', default => '\s+' );
has sep_regex => (
is => 'ro', isa => 'RegexpRef', lazy => 1,
default => sub {
my $self = shift;
my $str = $self->seperator;
my $regex = eval { qr/$str/ };
if( $@ ) { die("invalid regex in seperator: $@") }
return $regex;
},
);
has 'fields' => ( is => 'ro', isa => 'Str', default => 'username,password');
has '_fields' => (
is => 'ro', isa => 'ArrayRef[Str]', lazy => 1,
default => sub { [ split(/\s*,\s*/, shift->fields ) ] },
traits => [ 'Array' ],
handles => {
'num_fields' => 'count',
}
);
has 'file' => ( is => 'ro', isa => 'Str', required => 1 );
has 'fh' => (
is => 'ro', isa => 'IO::File', lazy => 1,
default => sub {
my $self = shift;
my $fh = IO::File->new( $self->file, 'r',);
if( ! defined $fh ) {
die("could not open user file: $!");
}
return $fh;
},
);
has 'comments' => ( is => 'ro', isa => 'Bool', default => 0 );
sub parse_line {
my ( $self, $line, $ln ) = @_;
my $data = {};
if( $self->comments && $line =~ /^\s*#/ ) {
return;
}
$line =~ s/[\r\n]*$//;
my $sep = $self->sep_regex;
my @values = split( $sep, $line );
if( scalar @values < $self->num_fields ) {
$self->server->log(2, "insufficient fields on line $ln");
return;
}
foreach my $fieldname ( @{$self->_fields} ) {
$data->{$fieldname} = shift( @values );
}
return $data;
}
has 'username_field' => ( is => 'rw', isa => 'Str', default => 'username' );
sub lookup_user {
my ( $self, $key ) = @_;
my $username_field = $self->username_field;
my $ln = 0;
$self->fh->setpos(0);
while( my $line = $self->fh->getline ) {
$ln++;
my $user = $self->parse_line( $line, $ln );
if( defined $user->{$username_field}
&& $user->{$username_field} eq $key) {
$self->log(4, "found user on line $ln" );
return $user;
}
}
return;
}
( run in 0.538 second using v1.01-cache-2.11-cpan-5511b514fd6 )