Dancer2-Plugin-Auth-Extensible
view release on metacpan or search on metacpan
lib/Dancer2/Plugin/Auth/Extensible.pm view on Meta::CPAN
if ($user) {
$plugin->app->log(
debug => "got one");
# Okay, so email key is hard-coded, and therefore relies on the
# provider returning that key. The alternative is to have a
# separate provider function to get an email address, which seems
# an overkill. Providers can make the email key configurable if
# need be
my $email = blessed $user ? $user->email : $user->{email};
my %options = ( code => $code, email => $email );
no strict 'refs';
$result++
if &{ $plugin->password_reset_send_email }( $plugin, %options );
}
}
$result ? 1 : 0; # 1 if at least one send was successful
}
sub require_all_roles {
my $plugin = shift;
croak "Cannot use require_all_roles since roles are disabled by disable_roles setting"
if $plugin->disable_roles;
return $plugin->_build_wrapper( @_, 'all' );
}
sub require_any_role {
my $plugin = shift;
croak "Cannot use require_any_role since roles are disabled by disable_roles setting"
if $plugin->disable_roles;
return $plugin->_build_wrapper( @_, 'any' );
}
sub require_login {
my $plugin = shift;
my $coderef = shift;
return sub {
if ( !$coderef || ref $coderef ne 'CODE' ) {
$plugin->app->log(
warning => "Invalid require_login usage, please see docs" );
}
# User already logged in so give them the page.
return $coderef->($plugin)
if $plugin->logged_in_user;
return $plugin->_check_for_login( $coderef );
};
}
sub require_role {
my $plugin = shift;
croak "Cannot use require_role since roles are disabled by disable_roles setting"
if $plugin->disable_roles;
return $plugin->_build_wrapper( @_, 'single' );
}
sub update_current_user {
my ( $plugin, %update ) = @_;
my $session = $plugin->app->session;
if ( my $username = $session->read('logged_in_user') ) {
my $realm = $session->read('logged_in_user_realm');
$plugin->update_user( $username, realm => $realm, %update );
}
else {
$plugin->app->log( debug =>
"Could not update current user as no user currently logged in" );
}
}
sub update_user {
my ( $plugin, $username, %update ) = @_;
croak "Realm must be specified when more than one realm configured"
if !$update{realm} && $plugin->realm_count > 1;
# uncoverable condition false
my $realm = delete $update{realm} || $plugin->realm_names->[0];
my $provider = $plugin->auth_provider($realm);
my $updated = $provider->set_user_details( $username, %update );
my $cur_user = $plugin->app->session->read('logged_in_user');
$plugin->app->request->vars->{logged_in_user_hash} = $updated
if $cur_user && $cur_user eq $username;
$updated;
}
sub user_has_role {
my $plugin = shift;
croak "Cannot call user_has_role since roles are disabled by disable_roles setting"
if $plugin->disable_roles;
my ( $username, $want_role );
if ( @_ == 2 ) {
( $username, $want_role ) = @_;
}
else {
$username = $plugin->app->session->read('logged_in_user');
$want_role = shift;
}
return unless defined $username;
my $roles = $plugin->user_roles($username);
for my $has_role (@$roles) {
return 1 if $has_role eq $want_role;
}
return 0;
}
sub user_password {
my ( $plugin, %params ) = @_;
my ( $username, $realm );
my @realms_to_check =
$params{realm}
? ( $params{realm} )
: @{ $plugin->realm_names };
# Expect either a code, username or nothing (for logged-in user)
if ( exists $params{code} ) {
my $code = $params{code} or return;
foreach my $realm_check (@realms_to_check) {
my $provider = $plugin->auth_provider($realm_check);
# Realm may not support get_user_by_code
$username = try {
$provider->get_user_by_code($code);
}
( run in 1.070 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )