Начальный коммит
This commit is contained in:
76
lib/YadProxy/Lib.pm
Normal file
76
lib/YadProxy/Lib.pm
Normal file
@@ -0,0 +1,76 @@
|
||||
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:
|
||||
Reference in New Issue
Block a user