Dancer2-Plugin-Auth-Extensible
view release on metacpan or search on metacpan
lib/Dancer2/Plugin/Auth/Extensible.pm view on Meta::CPAN
has welcome_send => (
is => 'ro',
isa => Str,
from_config => sub { '_default_welcome_send' },
);
has welcome_text => (
is => 'ro',
isa => Str,
from_config => sub { '' },
);
#
# other attributes
#
has realm_providers => (
is => 'ro',
isa => HashRef,
default => sub { {} },
init_arg => undef,
);
has _template_tiny => (
is => 'ro',
default => sub { Dancer2::Template::Tiny->new },
);
#
# hooks
#
plugin_hooks 'before_authenticate_user', 'after_authenticate_user',
'before_create_user', 'after_create_user', 'after_reset_code_success',
'login_required', 'permission_denied', 'after_login_success',
'before_logout';
#
# keywords
#
plugin_keywords 'authenticate_user', 'create_user', 'get_user_details',
'logged_in_user', 'logged_in_user_lastlogin',
'logged_in_user_password_expired', 'password_reset_send',
[ 'require_all_roles', 'requires_all_roles' ],
[ 'require_any_role', 'requires_any_role' ],
[ 'require_login', 'requires_login' ],
[ 'require_role', 'requires_role' ],
'update_current_user', 'update_user', 'user_has_role', 'user_password',
'user_roles';
#
# public methods
#
sub BUILD {
my $plugin = shift;
my $app = $plugin->app;
Scalar::Util::weaken( my $weak_plugin = $plugin );
warn "No Auth::Extensible realms configured with which to authenticate user"
unless $plugin->realm_count;
# Force all providers to load whilst we have access to the full dsl.
# If we try and load later, then if the provider is using other
# keywords (such as schema) they will not be available from the dsl.
for my $realm ( @{ $plugin->realm_names } ) {
$plugin->auth_provider( $realm );
}
if ( !$plugin->no_default_pages ) {
my $login_page = $plugin->login_page;
my $denied_page = $plugin->denied_page;
# Match optional reset code, but not "denied"
$app->add_route(
method => 'get',
regexp => qr!^$login_page/?([\w]{32})?$!,
code => sub {
my $app = shift;
if ( $weak_plugin->logged_in_user ) {
# User is already logged in so redirect elsewhere
# uncoverable condition false
$app->redirect(
_return_url($app) || $weak_plugin->user_home_page );
}
# Reset password code submitted?
my ($code) = $app->request->splat;
if ( $code
&& $weak_plugin->reset_password_handler
&& $weak_plugin->user_password( code => $code ) )
{
$app->request->parameters->set('password_code_valid' => 1),
}
no strict 'refs';
return &{ $weak_plugin->login_page_handler }($weak_plugin);
},
);
$app->add_route(
method => 'get',
regexp => qr!^$denied_page$!,
code => sub {
my $app = shift;
$app->response->status(403);
no strict 'refs';
return &{ $weak_plugin->permission_denied_page_handler }($weak_plugin);
},
);
}
if ( !$plugin->no_login_handler ) {
my $login_page = $plugin->login_page;
( run in 0.678 second using v1.01-cache-2.11-cpan-39bf76dae61 )