use warnings; use strict; =head1 NAME Jifty::Plugin::Authentication::Password::Action::SendPasswordReminder - send a link to reset a password =cut package Jifty::Plugin::Authentication::Password::Action::SendPasswordReminder; use base qw/Jifty::Action/; __PACKAGE__->mk_accessors(qw(user_object)); =head2 arguments The field for C is: =over 4 =item address: the email address =back =cut sub arguments { return ( { address => { label => _('Email'), mandatory => 1, }, } ); } =head2 setup Create an empty user object to work with =cut sub setup { my $self = shift; my $LoginUser = Jifty->app_class('Model','User'); my $CurrentUser = Jifty->app_class('CurrentUser'); # Make a blank user object $self->user_object( $LoginUser->new( current_user => $CurrentUser->superuser ) ); } =head2 validate_address Make sure there's actually an account by that name. =cut sub validate_address { my $self = shift; my $email = shift; my $LoginUser = Jifty->app_class('Model','User'); my $CurrentUser = Jifty->app_class('CurrentUser'); return $self->validation_error( address => _("That doesn't look like an email address.") ) unless ( $email =~ /\S\@\S/ ); $self->user_object( $LoginUser->new( current_user => $CurrentUser->superuser ) ); $self->user_object->load_by_cols( email => $email ); return $self->validation_error( address => _("It doesn't look like there's an account by that name.") ) unless ( $self->user_object->id ); return $self->validation_ok('address'); } =head2 take_action Send out a Reminder email giving a link to a password-reset form. =cut sub take_action { my $self = shift; Jifty->app_class('Notification','ConfirmLostPassword')->new( to => $self->user_object )->send; return $self->result->message( _("A link to reset your password has been sent to your email account.")); } 1;