Captcha-reCAPTCHA-V3
view release on metacpan or search on metacpan
lib/Captcha/reCAPTCHA/V3.pm view on Meta::CPAN
package Captcha::reCAPTCHA::V3;
require 5.10.1;
use strict;
use warnings;
our $VERSION = "0.14";
use Carp qw(carp croak);
use JSON::MaybeXS;
use Try::Tiny;
use overload(
'""' => sub { $_[0]->name() },
'cmp' => sub { $_[0]->name() cmp $_[1] },
);
sub new {
my $class = shift;
my $self = bless {}, ref $class || $class;
my %attr = @_;
# Initialize the values for API
$self->{sitekey} = $attr{sitekey} || ''; # No need to set sitekey in server-side
$self->{secret} = $attr{secret} || croak "missing param 'secret'";
$self->{query_name} = $attr{query_name} || 'g-recaptcha-response';
$self->{widget_api} = 'https://www.google.com/recaptcha/api.js';
$self->{verify_api} = 'https://www.google.com/recaptcha/api/siteverify';
return $self;
}
sub name {
my $self = shift;
return $self->{query_name} unless my $value = shift;
$self->{query_name} = $value;
}
sub sitekey {
my $self = shift;
return $self->{sitekey} unless my $value = shift;
$self->{sitekey} = $value;
}
# verifiers =======================================================================
sub get_json_with_curl {
my $self = shift;
my $response = shift;
croak "Extra arguments have been set." if @_;
my $cmd = sprintf(
q{curl -sS -X POST %s -d secret=%s -d response=%s},
$self->{verify_api},
_shell_escape($self->{secret}),
_shell_escape($response),
);
my $json = try { qx{$cmd} } catch { carp "Failed to execute curl" and return {} };
return decode_json($json) || {};
}
sub get_json_with_http_tiny {
my $self = shift;
my $response = shift;
croak "Extra arguments have been set." if @_;
return {} unless eval { require HTTP::Tiny };
my $ua = HTTP::Tiny->new;
return {} unless $ua->can_ssl();
my $res = try { $ua->post_form(
( run in 1.043 second using v1.01-cache-2.11-cpan-5fbc6bb55f2 )