Catalyst::Controller::reCAPTCHA - authenticate people and read books!


Catalyst-Controller-reCAPTCHA documentation Contained in the Catalyst-Controller-reCAPTCHA distribution.

Index


Code Index:

NAME

Top

Catalyst::Controller::reCAPTCHA - authenticate people and read books!

SUMMARY

Top

Catalyst::Controller wrapper around Capatcha::reCAPTCHA. Provides a number of Private methods that deal with the recaptcha.

CONFIGURATION

In MyApp.pm (or equivalent in config file):

 __PACKAGE__->config->{recaptcha}->{pub_key} =
                          '6LcsbAAAAAAAAPDSlBaVGXjMo1kJHwUiHzO2TDze';
 __PACKAGE__->config->{recaptcha}->{priv_key} =
                          '6LcsbAAAAAAAANQQGqwsnkrTd7QTGRBKQQZwBH-L';

(the two keys above work for http://localhost unless someone hammers the reCAPTCHA server with failures, in which case the API keys get a temporary ban).

METHOD

captcha_get : Private

Sets $c->stash->{recaptcha} to be the html form for the http://recaptcha.net/ reCAPTCHA service which can be included in your HTML form.

METHOD

captcha_check : Private

Validates the reCaptcha using Captcha::reCAPTCHA. sets $c->stash->{recaptcha_ok} which will be 1 on success. The action also returns true if there is success. This means you can do:

 if ( $c->forward(captcha_check) ) {
   # do something based on the reCAPTCHA passing
 }

or alternatively:

 if ( $c->stash->{recaptcha_ok} ) {
   # do something based on the reCAPTCHA passing
 }




If there's an error, $c->stash->{recaptcha_error} is set with the error string provided by Captcha::reCAPTCHA.

EXAMPLES

See the t/lib/TestApp example in the Catalyst::Controller::reCAPTCHA distribution.

SEE ALSO

Top

Captcha::reCAPTCHA, Catalyst::Controller, Catalyst.

AUTHOR and Copyright

Top

LICENCE

Top

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.


Catalyst-Controller-reCAPTCHA documentation Contained in the Catalyst-Controller-reCAPTCHA distribution.

package Catalyst::Controller::reCAPTCHA;
use strict;
use warnings;
use base 'Catalyst::Controller';
use Captcha::reCAPTCHA;
use Carp 'croak';
our $VERSION = '0.7';


sub captcha_get : Private {
    my ($self, $c) = @_;
    my $cap = Captcha::reCAPTCHA->new;
    $c->stash->{recaptcha} =
        $cap->get_html($c->config->{recaptcha}->{pub_key});
    return;
}

sub captcha_check : Private {
    my ($self, $c) = @_;
    my $cap = Captcha::reCAPTCHA->new;
    my $challenge = $c->req->param('recaptcha_challenge_field');
    my $response  = $c->req->param('recaptcha_response_field');

    unless ( $response && $challenge ) {
        $c->stash->{recaptcha_error} =
            'User appears not to have submitted a recaptcha';
        return;
    }

    my $key = $c->config->{recaptcha}->{priv_key} ||
        croak 'must set recaptcha priv_key in config';

    my $result = $cap->check_answer(
        $key,
        $c->req->address,
        $challenge,
        $response,
    );

    croak 'Failed to get valid result from reCaptcha'
        unless ref $result eq 'HASH' && exists $result->{is_valid};


    $c->stash->{recaptcha_error} = $result->{error} ||
        'Unknown error'
            unless $result->{is_valid};

    $c->stash->{recaptcha_ok} = 1 if $result->{is_valid};
    return 1;
}




1;