—#!perl
package
goauth;
$goauth::VERSION
=
'0.12'
;
# ABSTRACT: CLI tool for easily getting of Google API access tokens. Supports multiple users
use
Data::Dumper;
use
Config::JSON;
use
Tie::File;
my
$filename
;
if
(
$ARGV
[0]) {
$filename
=
$ARGV
[0];
}
else
{
$filename
=
'config.json'
;
}
if
(-e
$filename
) {
say
"File $filename exists"
;
input_if_not_exists([
'gapi/client_id'
,
'gapi/client_secret'
]);
runserver();
}
else
{
say
"JSON file $filename with API tokens not found. Creating new file..."
;
setup();
runserver();
}
sub
setup {
my
$oauth
= {};
"client_id: "
;
chomp
(
$oauth
->{client_id} = <STDIN>);
"client_secret: "
;
chomp
(
$oauth
->{client_secret} = <STDIN>);
my
$tokensfile
= Config::JSON->create(
$filename
);
$tokensfile
->set(
'gapi/client_id'
,
$oauth
->{client_id});
$tokensfile
->set(
'gapi/client_secret'
,
$oauth
->{client_secret});
say
'OAuth details was updated!'
;
# Remove comment for Mojolicious::Plugin::JSONConfig compatibility
tie
my
@array
,
'Tie::File'
,
$filename
or
die
$!;
shift
@array
;
untie
@array
;
};
sub
input_if_not_exists {
my
$fields
=
shift
;
my
$config
= Config::JSON->new(
$filename
);
for
my
$i
(
@$fields
) {
if
(!
defined
$config
->get(
$i
) ) {
"$i: "
;
chomp
(
my
$val
= <STDIN>);
$config
->set(
$i
,
$val
);
}
}
}
sub
runserver {
my
$port
= empty_port(3000);
say
"Starting web server. Before authorization don't forget to set redirect_uri to http://127.0.0.1:$port/"
;
$ENV
{
'GOAUTH_TOKENSFILE'
} =
$filename
;
}
__END__
=pod
=encoding UTF-8
=head1 NAME
goauth - CLI tool for easily getting of Google API access tokens. Supports multiple users
=head1 VERSION
version 0.12
=head1 SYNOPSIS
goauth [tokens.json]
By default if will create config.json in current directory
Structure of config will be like
{ "gapi":
{
"client_id": "001122334455-abcdefghijklmnopqrstuvwxyz012345.apps.googleusercontent.com",
"client_secret": "1ayL76NlEKjj85eZOipFZkyM",
"tokens": {
"email_1@gmail.com": {
"refresh_token": "1/cI5jWSVnsUyCbasCQpDmz8uhQyfnWWphxvb1ST3oTHE",
"access_token": "ya29.Ci-KA8aJYEAyZoxkMsYbbU9H_zj2t9-7u1aKUtrOtak3pDhJvCEPIdkW-xg2lRQdrA"
},
"email_2@gmail.com": {
"access_token": "ya29.Ci-KAzT9JpaPriZ-ugON4FnANBXZexTZOz-E6U4M-hjplbIcMYpTbo0AmGV__tV5FA",
"refresh_token": "1/_37lsRFSRaUJkAAAuJIRXRUueft5eLWaIsJ0lkJmEMU"
}
}
}
}
=head1 AUTHOR
Pavel Serikov <pavelsr@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2016 by Pavel Serikov.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut