52 lines
1.0 KiB
Perl
52 lines
1.0 KiB
Perl
package YTMusicAPI::Auth::OAuth::OAuthToken;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use JSON qw(decode_json);
|
|
use Path::Tiny qw(path);
|
|
|
|
use parent 'YTMusicAPI::Auth::OAuth::Token';
|
|
|
|
sub new {
|
|
my ( $class, $args ) = @_;
|
|
my $self = $class->SUPER::new($args);
|
|
bless $self, $class;
|
|
return $self;
|
|
}
|
|
|
|
sub is_oauth {
|
|
my ($headers) = @_;
|
|
my @required_keys = YTMusicAPI::Auth::OAuth::Token::members();
|
|
|
|
foreach my $key (@required_keys) {
|
|
return 0 unless exists $headers->{$key};
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
sub update {
|
|
my ( $self, $fresh_access ) = @_;
|
|
$self->{access_token} = $fresh_access->{access_token};
|
|
$self->{expires_at} = int( time() ) + $fresh_access->{expires_in};
|
|
}
|
|
|
|
sub is_expiring {
|
|
my ($self) = @_;
|
|
return $self->{expires_at} - int( time() ) < 60 ? 1 : 0;
|
|
}
|
|
|
|
sub from_json {
|
|
my ( $class, $file_path ) = @_;
|
|
my $file_pack;
|
|
|
|
if ( path($file_path)->is_file ) {
|
|
$file_pack = decode_json( path($file_path)->slurp_utf8 );
|
|
}
|
|
|
|
return $class->new(%$file_pack);
|
|
}
|
|
|
|
1;
|