Rex-JobControl
view release on metacpan or search on metacpan
lib/Rex/JobControl/Mojolicious/Plugin/User.pm view on Meta::CPAN
#
# (c) Jan Gehring <jan.gehring@gmail.com>
#
# vim: set ts=3 sw=3 tw=0:
# vim: set expandtab:
package Rex::JobControl::Mojolicious::Plugin::User;
$Rex::JobControl::Mojolicious::Plugin::User::VERSION = '0.18.0';
use strict;
use warnings;
use Mojolicious::Plugin;
use Rex::JobControl::Helper::Project;
use Digest::Bcrypt;
use base 'Mojolicious::Plugin';
sub register {
my ( $plugin, $app ) = @_;
$app->helper(
get_user => sub {
my ( $self, $uid ) = @_;
my @lines =
eval { local (@ARGV) = ( $self->app->config->{auth}->{passwd} ); <>; };
chomp @lines;
for my $l (@lines) {
my ( $name, $pass ) = split( /:/, $l );
if ( $name eq $uid ) {
return { name => $name, password => $pass };
}
}
return undef;
},
);
$app->helper(
check_password => sub {
my ( $self, $uid, $pass ) = @_;
my $user = $app->get_user($uid);
my $salt = $app->config->{auth}->{salt};
my $cost = $app->config->{auth}->{cost};
my $bcrypt = Digest::Bcrypt->new;
$bcrypt->salt($salt);
$bcrypt->cost($cost);
$bcrypt->add($pass);
my $pw = $bcrypt->hexdigest;
if ( $user && $user->{password} eq $pw ) {
return $user->{name};
}
return undef;
},
);
}
1;
( run in 0.472 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )