[dancer-users] Message corrupt error during post

Joel Roth joelz at pobox.com
Sat Apr 26 08:09:10 BST 2014


Hi Dancers,

During development, I've put a file with the
username/email/password on the site (generally bad practice,
I know), and have a button for sending a password reminder.

When the user posts a form with an "email" field to
the /reminder route (see below) it results in the following error,
which is issued *after* the mail is sent out:

The page 'http://localhost:3000/reminder' couldn't be
loaded.  Message Corrupt

I would expect a redirect to '/reminder-has-been-sent'

Do you have any suggestions?

Kind regards,

Joel

--

post '/reminder'    => sub {
    my $email = params->{email};
    my $result = find_passwd($email);
	session user => undef;
	session failed_login => undef;
    if ($result)
    {   
        send_out_mail($result->{email}, $result->{body}); # sent!
        redirect '/reminder-has-been-sent';               # no redirect
    }
    else
    {   
        redirect '/email-not-found';
    }
};

There is a "before" clause.


before sub {
    if (!session('user') and request->path_info !~
        m{(login|bye|reminder|reminder-has-been-sent|email-not-found)$}) {
        # Pass the original path requested along to the handler:
        session requested_path => request->path_info;
        redirect('/login');
    }
    elsif ( ! authorized( session('user'), request->path_info)
            and request->path_info ne '/forbidden'){
        # Pass the original path requested along to the handler:
        session requested_path => request->path_info;
        redirect('/forbidden');                                   
    }
};  

sub find_passwd {
	my $user_or_email = shift;
	# we expect to be in Dancer app directory
	my @entries = read_file('pass');
	my $body;
	my ($name, $email, $username, $password);
	map { chomp } @entries;
	foreach my $entry( @entries ){
		($name, $email, $username, $password) = split /\s*:\s*/, $entry;
		next if $user_or_email ne $username and $user_or_email ne $email;
		say "-->$name";
		$body = mail_body($name, $username, $password);
		last 
	}
	return({ email => $email, name => $name, password => $password, body => $body })
		if $body;
}
sub mail_body {
	my ($name, $username, $password) = @_;
	my ($first) = $name =~ /(.+?)\s*\S*$/;
	#say $first;
<<FORM;
Dear $first,

This automated mail contains your login credentials for

http://example.com

Your username is $username
Your password is $password

FORM
}
sub send_out_mail {
	my( $email, $body) = @_; 
	my $sender = 'joelz at pobox.com';
	Email::Stuffer->from($sender)
				   ->to($email)
				   ->subject("Reminder")
				   ->text_body($body)
				   ->send;
	
}

1
-- 
Joel Roth
  



More information about the dancer-users mailing list