0
Files
yadproxy/lib/YadProxy/Lib.pm
2021-05-30 14:30:00 +03:00

77 lines
1.8 KiB
Perl

package YadProxy::Lib;
# Утилитарные функции для работы с ya.disk
use 5.018;
use strict;
use warnings;
use utf8;
use open qw (:std :utf8);
use English qw ( -no_match_vars );
use CHI;
use CHI::Driver::BerkeleyDB;
use Log::Any qw ($log);
use YadProxy::Conf qw (LoadConf);
use version; our $VERSION = qw (1.0);
use Exporter qw (import);
our @EXPORT_OK = qw (GetAccessToken RefreshAccessToken);
my $c = LoadConf ();
sub GetAccessToken {
my $cache = CHI->new (
driver => 'BerkeleyDB',
root_dir => $c->{oauth_dir},
namespace => 'yad_auth'
);
my $access_token = $cache->get ('access_token');
unless (defined $access_token) {
my $refresh_token = $cache->get ('refresh_token');
unless (defined $refresh_token) {
$log->fatal ('No refresh_token found in base, please, register yaproxy application');
exit 1;
}
my $token = RefreshAccessToken ($refresh_token);
# yad обычно выдаёт токен на год, скинем с этого 1 минуту :) чтобы уж точно
$cache->set ('refresh_token', $token->{refresh_token}, 'never');
$cache->set ('access_token', $token->{access_token}, $token->{expires_in} - 60);
$access_token = $token->{access_token};
}
return $access_token;
}
sub RefreshAccessToken {
my $refresh_token = shift;
my $oauth = Yandex::OAuth->new (
client_id => $c->{ID},
client_secret => $c->{'Пароль'},
);
my $token;
my $counter = 0;
while ((! defined $token->{access_token}) || ($counter < 3)) {
$token = $oauth->refresh_token ( refresh_token => $refresh_token );
$counter++;
}
if (defined $token->{access_token}) {
return $token;
} else {
$log->fatal ('[FATAL] Unable to refresh access_token');
exit 1;
}
}
1;
# vim: set ft=perl noet ai ts=4 sw=4 sts=4: