Dancer2-Plugin-Auth-OAuth/lib/Dancer2/Plugin/Auth/OAuth/Provider/Yandex.pm
package Dancer2::Plugin::Auth::OAuth::Provider::Yandex;
use strict;
use parent 'Dancer2::Plugin::Auth::OAuth::Provider';
use HTTP::Request;
use JSON::MaybeXS;
use LWP::UserAgent;
sub config { {
version => 2,
urls => {
authorize_url => 'https://oauth.yandex.ru/authorize',
access_token_url => 'https://oauth.yandex.ru/token',
user_info => 'https://login.yandex.ru/info',
},
query_params => {
authorize => {
response_type => 'code',
scope => 'login:birthday login:email login:info login:avatar',
display => 'popup',
}
}
} }
sub post_process {
my ($self, $session) = @_;
my $session_data = $session->read('oauth');
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $self->provider_settings->{urls}{user_info});
$req->content_type('application/x-www-form-urlencoded');
$req->header(Authorization => 'OAuth '.$session_data->{yandex}{access_token});
$req->content(
"format=".$self->provider_settings->{format}.
"&client_id=".$self->provider_settings->{tokens}{client_id}
);
my $resp = $ua->request($req);
if( $resp->is_success ) {
my $user = $self->_stringify_json_booleans(
JSON::MaybeXS::decode_json( $resp->content )
);
$session_data->{yandex}{user_info} = $user;
$session->write('oauth', $session_data);
}
}
1;