Amon2-Auth-Site-Google
view release on metacpan or search on metacpan
lib/Amon2/Auth/Site/Google.pm view on Meta::CPAN
my ($self, $c, $callback) = @_;
my $res = $self->ua->post($self->token_url, +{
client_id => $self->client_id,
client_secret => $self->client_secret,
code => $c->req->param('code'),
redirect_uri => $self->redirect_url,
grant_type => 'authorization_code',
});
$res->is_success or do {
warn $res->decoded_content;
return $callback->{on_error}->($res->decoded_content);
};
my $token = decode_json $res->content;
my $uri = URI->new($self->token_info_url);
$uri->query_form(+{ access_token => $token->{access_token} });
$res = $self->ua->get($uri->as_string);
my $token_info = decode_json $res->content;
$res->is_success or do {
warn $res->decoded_content;
return $callback->{on_error}->($res->decoded_content);
};
$token_info->{audience} eq $self->client_id or do {
warn 'invalid token';
return $callback->{on_error}->('invalid token');
};
my @args = ($token->{access_token}, $token->{refresh_token});
if ($self->user_info) {
my $uri = URI->new($self->user_info_url);
$uri->query_form(+{ access_token => $token->{access_token} });
my $res = $self->ua->get($uri->as_string);
$res->is_success or do {
warn $res->decoded_content;
return $callback->{on_error}->($res->decoded_content);
};
my $user = decode_json $res->content;
push @args, $user;
}
$callback->{on_finished}->(@args);
}
1;
__END__
( run in 0.217 second using v1.01-cache-2.11-cpan-26ccb49234f )