Captcha-AreYouAHuman

 view release on metacpan or  search on metacpan

lib/Captcha/AreYouAHuman.pm  view on Meta::CPAN


        return $self;
}


# Get the HTML that gets embedded
# Returns the string to be echoed out to the browser.
sub getPublisherHTML {
        my $self = shift;

        # Get the variables out
        my $server = $self->{"server"};
        my $publisher_key = $self->{"publisher_key"};

	return "<div id='AYAH'></div><script  type='text/javascript' src='https://" .
		$server . "/ws/script/"  . uri_escape($publisher_key) . 
		"'></script>";
}

# Score the results
# parameters are passed with key => value
# with parameters client_ip and session_secret
# 
# If you are using CGI.pm, call as
# $cgi = new CGI();
# my $ayah = new Captcha::AreYouAHuman;
# my $result = $ayah->scoreResult(
#    'session_secret' => $cgi->param('session_secret'),
#    'client_ip' => $cgi->remote_host()
# );
#
# Returns 0/false if failed; true if passed.
# 
sub scoreResult {
        my $self = shift;

        my %params = @_;

        # get the variables out
        my $server = $self->{"server"};
        my $client_ip = "";
	my $session_secret = "";

        if ($params{"session_secret"} eq "") {
                $self->errorLog("Called Captcha::AreYouAHuman::scoreResult without a session_secret");
		return 0;
        } else {
	        $session_secret = $params{"session_secret"};
        }

	if ($params{"client_ip"} eq "") {
                $self->errorLog("Called Captcha::AreYouAHuman::scoreResult without a client_ip");
		return 0;
        } else {
	        $client_ip = $params{"client_ip"};
        }


        # Make the request
        my $ua = LWP::UserAgent->new;
        my $req = HTTP::Request->new(POST => 'https://' . $server .
                        '/ayahwebservices/index.php/ayahwebservice/scoreGame');
        $req->content_type('application/x-www-form-urlencoded');
        $req->content('session_secret=' . uri_escape($session_secret) . '&client_ip=' . 
			uri_escape($client_ip));
        my $res = $ua->request($req);

        if ($res->is_success) {
                # JSON decode and evaluate result
                my $results;
                eval {
                        $results = decode_json($res->content);
                };

                if ($@) {
                        $self->errorLog("Could not JSON decode: " . $res->content);
                        return 0;
                } else {
                        return ($results->{'status_code'} == 1);
                }
        } else {
                $self->errorLog("Error: Internal error: " . $res->status_line);
                return 0;
        }
}

# Record the conversion
# parameters are passed with key => value
# with parameters session_secret
# 
# If you are using CGI.pm, call as
# $cgi = new CGI();
# my $ayah = new Captcha::AreYouAHuman;
# my $result = $ayah->scoreResult(
#    'session_secret' => $cgi->param('session_secret')
# ); 
#
# Returns the HTML string to be inserted into the conversion page. (Hidden iframe)
# 
sub recordConversion {
        my $self = shift;

        my %params = @_;

        # get the variables out
        my $server = $self->{"server"};
	my $session_secret = "";

        if ($params{"session_secret"} eq "") {
                $self->errorLog("Called Captcha::AreYouAHuman::scoreResult without a session_secret");
		return "";
        } else {
	        $session_secret = $params{"session_secret"};
        }

        return '<iframe style="border: none;" height="0" width="0" src="https://' . 
		$server . '/ws/recordConversion/' . $session_secret . '"></iframe>';
}

# Error logging function; override if you don't want this making noise.
# Parameter: Error message



( run in 1.009 second using v1.01-cache-2.11-cpan-800906f7e73 )