our
$VERSION
=
'1.06'
;
has
'api_key'
=> (
is
=>
'ro'
,
predicate
=>
'has_api_key'
,
isa
=> Str,
);
has
'email'
=> (
is
=>
'ro'
,
predicate
=>
'has_email'
,
isa
=>
sub
{
die
"$_[0] is not email"
unless
$_
[0] =~ /.+@.+/ },
);
has
'password'
=> (
is
=>
'ro'
,
predicate
=>
'has_password'
,
isa
=> Str,
);
has
'access_token'
=> (
is
=>
'rw'
,
writer
=>
'_set_access_token'
,
predicate
=>
'has_access_token'
,
isa
=> Str,
);
has
'access_token_expiration'
=> (
is
=>
'rw'
,
writer
=>
'_set_access_token_expiration'
,
isa
=> Int,
);
has
'refresh_token'
=> (
is
=>
'rw'
,
writer
=>
'_set_refresh_token'
,
predicate
=>
'has_refresh_token'
,
isa
=> Str,
);
has
'request'
=> (
is
=>
'rw'
,
isa
=>
sub
{
die
"$_[0] is not Net::API::Gett::Request"
unless
ref
(
$_
[0]) =~ /Request/ },
default
=>
sub
{ Net::API::Gett::Request->new() },
lazy
=> 1,
);
has
'userid'
=> (
is
=>
'rw'
,
writer
=>
'_set_userid'
,
isa
=> Str
);
has
'fullname'
=> (
is
=>
'rw'
,
writer
=>
'_set_fullname'
,
isa
=> Str,
);
has
'storage_used'
=> (
is
=>
'rw'
,
isa
=> Int,
writer
=>
'_set_storage_used'
,
);
has
'storage_limit'
=> (
is
=>
'rw'
,
isa
=> Int,
writer
=>
'_set_storage_limit'
,
);
around
BUILDARGS
=>
sub
{
my
$orig
=
shift
;
my
$class
=
shift
;
my
%params
=
@_
;
unless
(
$params
{refresh_token}
||
$params
{access_token}
|| (
$params
{api_key} &&
$params
{email} &&
$params
{password} ) )
{
die
(
"api_key, email and password are needed to create "
,
"Net::API::Gett::User object. Or you can use refresh_token "
,
"or access_token rather than api_key, email and password.\n"
,
);
}
return
$class
->
$orig
(
@_
);
};
sub
login {
my
$self
=
shift
;
my
%hr
;
if
(
$self
->has_refresh_token ) {
$hr
{
'refreshtoken'
} =
$self
->refresh_token;
}
elsif
(
$self
->has_api_key &&
$self
->has_email &&
$self
->has_password ) {
@hr
{
'apikey'
,
'email'
,
'password'
} = (
$self
->api_key,
$self
->email,
$self
->password);
}
else
{
croak
"I need either an api_key, email, and password or a refresh token to login"
;
}
my
$response
=
$self
->request->post(
'/users/login'
, \
%hr
);
if
(
$response
) {
$self
->_set_access_token(
$response
->{
'accesstoken'
} );
$self
->_set_access_token_expiration(
time
+
$response
->{
'expires'
} );
$self
->_set_refresh_token(
$response
->{
'refreshtoken'
} );
$self
->_set_attrs(
$response
->{
'user'
} );
return
$self
;
}
else
{
croak(
"No response from user->login"
);
}
}
sub
refresh {
my
$self
=
shift
;
$self
->login
unless
$self
->has_access_token;
my
$endpoint
=
"/users/me?accesstoken="
.
$self
->access_token;
my
$response
=
$self
->request->get(
$endpoint
);
if
(
$response
) {
$self
->_set_attrs(
$response
);
return
$self
;
}
else
{
croak(
"No response from user->refresh"
);
}
}
sub
_set_attrs {
my
$self
=
shift
;
my
$uref
=
shift
;
return
undef
unless
ref
(
$uref
) eq
"HASH"
;
$self
->_set_userid(
$uref
->{
'userid'
});
$self
->_set_fullname(
$uref
->{
'fullname'
});
$self
->_set_storage_used(
$uref
->{
'storage'
}->{
'used'
});
$self
->_set_storage_limit(
$uref
->{
'storage'
}->{
'limit'
}),
}
1;