diff options
Diffstat (limited to 'lib/WWW/StrawViewer/Authentication.pm')
-rw-r--r-- | lib/WWW/StrawViewer/Authentication.pm | 216 |
1 files changed, 0 insertions, 216 deletions
diff --git a/lib/WWW/StrawViewer/Authentication.pm b/lib/WWW/StrawViewer/Authentication.pm deleted file mode 100644 index 1fa2368..0000000 --- a/lib/WWW/StrawViewer/Authentication.pm +++ /dev/null @@ -1,216 +0,0 @@ -package WWW::StrawViewer::Authentication; - -use utf8; -use 5.014; -use warnings; - -=head1 NAME - -WWW::StrawViewer::Authentication - OAuth login support. - -=head1 SYNOPSIS - - use WWW::StrawViewer; - my $hash_ref = WWW::StrawViewer->oauth_login($code); - -=head1 SUBROUTINES/METHODS - -=cut - -sub _get_token_oauth_url { - my ($self) = @_; - return $self->get_oauth_url() . 'token'; -} - -=head2 oauth_refresh_token() - -Refresh the access_token using the refresh_token. Returns a HASH ref with the `access_token` or undef. - -=cut - -sub oauth_refresh_token { - my ($self) = @_; - - my $json_data = $self->lwp_post( - $self->_get_token_oauth_url(), - [Content => $self->get_www_content_type, - client_id => $self->get_client_id() // return, - client_secret => $self->get_client_secret() // return, - refresh_token => $self->get_refresh_token() // return, - grant_type => 'refresh_token', - ] - ); - - return $self->parse_json_string($json_data); -} - -=head2 get_accounts_oauth_url() - -Creates an OAuth URL with the 'code' response type. (Google's authorization server) - -=cut - -sub get_accounts_oauth_url { - my ($self) = @_; - - my $url = $self->_append_url_args( - ($self->get_oauth_url() . 'auth'), - response_type => 'code', - client_id => $self->get_client_id() // return, - redirect_uri => $self->get_redirect_uri() // return, - scope => 'https://www.googleapis.com/auth/youtube.force-ssl', - access_type => 'offline', - ); - return $url; -} - -=head2 oauth_login($code) - -Returns a HASH ref with the access_token, refresh_token and some other info. - -The $code can be obtained by going to the URL returned by the C<get_accounts_oauth_url()> method. - -=cut - -sub oauth_login { - my ($self, $code) = @_; - - length($code) < 20 and return; - - my $json_data = $self->lwp_post( - $self->_get_token_oauth_url(), - [Content => $self->get_www_content_type, - client_id => $self->get_client_id() // return, - client_secret => $self->get_client_secret() // return, - redirect_uri => $self->get_redirect_uri() // return, - grant_type => 'authorization_code', - code => $code, - ] - ); - - return $self->parse_json_string($json_data); -} - -sub __AUTH_EOL__() { "\0\0\0" } - -=head2 load_authentication_tokens() - -Will try to load the access and refresh tokens from I<authentication_file>. - -=cut - -sub load_authentication_tokens { - my ($self) = @_; - - if (defined $self->get_access_token and defined $self->get_refresh_token) { - return 1; - } - - my $file = $self->get_authentication_file() // return; - my $key = $self->get_key() // return; - - if (-f $file) { - local $/ = __AUTH_EOL__; - open my $fh, '<:raw', $file or return; - - my @tokens; - foreach my $i (0 .. 1) { - chomp(my $token = <$fh>); - $token =~ /\S/ || last; - push @tokens, $self->decode_token($token); - } - - $self->set_access_token($tokens[0]) // return; - $self->set_refresh_token($tokens[1]) // return; - - close $fh; - return 1; - } - - return; -} - -=head2 encode_token($token) - -Encode the token with the I<key> and return it. - -=cut - -sub encode_token { - my ($self, $token) = @_; - - if (defined(my $key = $self->get_key)) { - require MIME::Base64; - return MIME::Base64::encode_base64($token ^ substr($key, -length($token))); - } - - return; -} - -=head2 decode_token($token) - -Decode the token with the I<key> and return it. - -=cut - -sub decode_token { - my ($self, $token) = @_; - - if (defined(my $key = $self->get_key)) { - require MIME::Base64; - my $bin = MIME::Base64::decode_base64($token); - return $bin ^ substr($key, -length($bin)); - } - - return; -} - -=head2 save_authentication_tokens() - -Encode and save the access and refresh into the I<authentication_file>. - -=cut - -sub save_authentication_tokens { - my ($self) = @_; - - my $file = $self->get_authentication_file() // return; - my $access_token = $self->get_access_token() // return; - my $refresh_token = $self->get_refresh_token() // return; - - if (open my $fh, '>:raw', $file) { - foreach my $token ($access_token, $refresh_token) { - print {$fh} $self->encode_token($token) . __AUTH_EOL__; - } - close $fh; - return 1; - } - - return; -} - -=head1 AUTHOR - -Trizen, C<< <echo dHJpemVuQHByb3Rvbm1haWwuY29tCg== | base64 -d> >> - - -=head1 SUPPORT - -You can find documentation for this module with the perldoc command. - - perldoc WWW::StrawViewer::Authentication - - -=head1 LICENSE AND COPYRIGHT - -Copyright 2013-2015 Trizen. - -This program is free software; you can redistribute it and/or modify it -under the terms of either: the GNU General Public License as published -by the Free Software Foundation; or the Artistic License. - -See L<http://dev.perl.org/licenses/> for more information. - -=cut - -1; # End of WWW::StrawViewer::Authentication |