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 )