use strict;
use warnings;
package Jifty::Plugin::Authentication::Password::Dispatcher;
use Jifty::Dispatcher -base;
=head1 NAME
Jifty::Plugin::Authentication::Password::Dispatcher - password plugin dispatcher
=head1 DESCRIPTION
All the dispatcher rules jifty needs to support L<Jifty::Authentication::Password/>
=head1 RULES
=head2 C<before logout>
Logout and return home.
See L<Jifty::Plugin::Authentication::Password::Action::Logout>.
=cut
before 'logout' => run {
Jifty->web->new_action( class => 'Logout', moniker => 'logout')->run;
redirect '/';
};
# Make sure tangents work
# Before password reminders, login or signup, let's push the user off to the homepage if they're logged in
=head2 C<before *>
Setup the navigation menu for login or logout.
=cut
before '*' => run {
my ($ap) = Jifty->find_plugin('Jifty::Plugin::Authentication::Password')
or return;
return unless $ap->nav_menu;
if ( Jifty->web->current_user->id ) {
logged_in_nav();
} else {
not_logged_in_nav();
}
};
=head2 C<on qr/^(?:signup|lost_password)$/>
Redirect to home if logged.
Request a password reminder or signup for an account otherwise.
=cut
before qr'^/(?:signup|lost_password)$' => run {
redirect('/') if ( Jifty->web->current_user->id );
set 'next' => Jifty->web->request->continuation || Jifty::Continuation->new( request => Jifty::Request->new( path => "/login" ) );
};
=head2 C<on login>
Redirect to home if logged.
Show the login form otherwise.
=cut
before qr|^/(?:login)$| => run {
redirect('/') if ( Jifty->web->current_user->id );
set 'next' => Jifty->web->request->continuation || Jifty::Continuation->new( request => Jifty::Request->new( path => "/" ) );
};
=head2 C<before reset_lost_password>
Request a password reset.
=cut
before qr|(?:reset_lost_password)| => run {
set 'next' => Jifty->web->request->continuation || Jifty::Continuation->new( request => Jifty::Request->new( path => "/" ) );
};
# Send a password reminder for a lost password
=head2 C<before passwordreminder>
Request a new password reminder to be sent by email.
See L<Jifty::Plugin::Authentication::Password::Action::SendPasswordReminder>.
=cut
before 'passwordreminder' => run {
set 'action' => Jifty->web->new_action( class => 'SendPasswordReminder', moniker => 'password_reminder');
};
=head2 C<before signup>
Sign up for an account.
See L<Jifty::Plugin::Authentication::Password::Action::Signup>.
=cut
before 'signup' => run {
set 'action' => Jifty->web->new_action( class => 'Signup');
};
=head2 C<before login>
Login to your account.
See L<Jifty::Plugin::Authentication::Password::Action::Login>.
=cut
before 'login' => run {
set 'action' => Jifty->web->new_action( class => 'Login');
};
=head2 not_logged_in_nav
Adds the login and signup links to the navigation menu.
=cut
sub not_logged_in_nav {
Jifty->web->navigation->child(
'Login',
link => Jifty->web->tangent(
label => _('Login'),
url => '/login'
),
sort_order => '999'
);
Jifty->web->navigation->child(
'Signup',
link => Jifty->web->tangent(
label => _('Sign up'),
url => '/signup'
),
sort_order => '950'
);
}
=head2 logged_in_nav
Adds the logout link to the navigation menu.
=cut
sub logged_in_nav {
Jifty->web->navigation->child(
Logout => label => _('Logout') =>
url => '/logout',
sort_order => '999'
);
}
=head1 SEE ALSO
L<Jifty::Plugin::Authentication::Password>, L<Jifty::Plugin::Authentication::Password::View>
=head1 COPYRIGHT
Jifty is Copyright 2005-2010 Best Practical Solutions, LLC.
Jifty is distributed under the same terms as Perl itself.
=cut
1;