Dancer-Plugin-Auth-Google
view release on metacpan or search on metacpan
lib/Dancer/Plugin/Auth/Google.pm view on Meta::CPAN
package Dancer::Plugin::Auth::Google;
use strict;
use warnings;
our $VERSION = 0.07;
use Dancer ':syntax';
use Dancer::Plugin;
use Carp ();
use Scalar::Util;
use Try::Tiny;
use Furl;
use IO::Socket::SSL;
use URI;
my $client_id;
my $client_secret;
my $scope;
my $access_type;
my $callback_url;
my $callback_success;
my $callback_fail;
my $legacy_gplus;
my $furl;
register 'auth_google_init' => sub {
my $config = plugin_setting;
$client_id = $config->{client_id};
$client_secret = $config->{client_secret};
$callback_url = $config->{callback_url};
$scope = $config->{scope} || 'profile';
$callback_success = $config->{callback_success} || '/';
$callback_fail = $config->{callback_fail} || '/fail';
$access_type = $config->{access_type} || 'online';
$legacy_gplus = $config->{legacy_gplus} || 0;
foreach my $param ( qw(client_id client_secret callback_url) ) {
Carp::croak "'$param' is expected but not found in configuration"
unless $config->{$param};
}
debug "new google with $client_id, $client_secret, $callback_url";
$furl = Furl->new(
agent => "Dancer-Plugin-Auth-Google/$VERSION",
timeout => 5,
ssl_opts => {
SSL_verify_mode => SSL_VERIFY_NONE(),
},
);
return 1;
};
register 'auth_google_authenticate_url' => sub {
Carp::croak 'auth_google_init() must be called first'
unless defined $callback_url;
my $uri = URI->new('https://accounts.google.com/o/oauth2/v2/auth');
$uri->query_form(
client_id => $client_id,
redirect_uri => $callback_url,
scope => $scope,
access_type => $access_type,
response_type => 'code',
);
debug "google auth uri: $uri";
return $uri;
};
get '/auth/google/callback' => sub {
debug 'in google auth callback';
( run in 2.106 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )