Catmandu-Store-Datahub
view release on metacpan or search on metacpan
lib/Catmandu/Store/Datahub/API.pm view on Meta::CPAN
Catmandu::BadArg->throw(
'message' => "Record could not be retrieved. Missing 'id'."
);
}
my $url = sprintf('%s/api/v1/data/%s', $self->url, $id);
my $response = $self->client->get($url, Authorization => sprintf('Bearer %s', $self->access_token));
if ($response->is_success) {
return decode_json($response->decoded_content);
} elsif ($response->code == 401) {
my $error = decode_json($response->decoded_content);
if ($error->{'error_description'} eq 'The access token provided has expired.') {
$self->set_access_token();
return $self->get($id);
}
} elsif ($response->code == 404) {
return {};
} else {
my $message = decode_json($response->decoded_content);
Catmandu::HTTPError->throw({
code => $response->code,
message => $message->{error}->{msg},
url => $response->request->uri->as_string,
method => $response->request->method,
request_headers => [],
request_body => $response->request->decoded_content,
response_headers => [],
response_body => $response->decoded_content,
});
return undef;
}
}
sub add {
my ($self, $data) = @_;
my $url = sprintf('%s/api/v1/data.lidoxml', $self->url);
my $token = $self->access_token;
my $response;
$response = $self->client->post($url, Content_Type => 'application/lido+xml', Authorization => sprintf('Bearer %s', $token), Content => $data);
if ($response->is_success) {
return $response->decoded_content;
} elsif ($response->code == 401) {
my $error = decode_json($response->decoded_content);
if ($error->{'error_description'} eq 'The access token provided has expired.') {
$self->set_access_token();
return $self->add($data);
}
} else {
my $message = decode_json($response->decoded_content);
Catmandu::HTTPError->throw({
code => $response->code,
message => $message->{error}->{msg},
url => $response->request->uri->as_string,
method => $response->request->method,
request_headers => [],
request_body => $response->request->decoded_content,
response_headers => [],
response_body => $response->decoded_content,
});
return undef;
}
}
sub update {
my ($self, $id, $data) = @_;
if (not defined $id) {
Catmandu::BadArg->throw(
lib/Catmandu/Store/Datahub/API.pm view on Meta::CPAN
}
my $url = sprintf('%s/api/v1/data/%s', $self->url, $id);
my $token = $self->access_token;
my $response;
$response = $self->client->put($url, Content_Type => 'application/lido+xml', Authorization => sprintf('Bearer %s', $token), Content => $data);
if ($response->is_success) {
return $response->decoded_content;
} elsif ($response->code == 401) {
my $error = decode_json($response->decoded_content);
if ($error->{'error_description'} eq 'The access token provided has expired.') {
$self->set_access_token();
return $self->update($id, $data);
}
} else {
my $message = decode_json($response->decoded_content);
Catmandu::HTTPError->throw({
code => $response->code,
message => $message->{error}->{msg},
url => $response->request->uri->as_string,
method => $response->request->method,
request_headers => [],
request_body => $response->request->decoded_content,
response_headers => [],
response_body => $response->decoded_content,
});
return undef;
}
}
sub delete {
my ($self, $id) = @_;
if (not defined $id) {
Catmandu::BadArg->throw(
lib/Catmandu/Store/Datahub/API.pm view on Meta::CPAN
}
my $url = sprintf('%s/api/v1/data/%s', $self->url, $id);
my $token = $self->access_token;
my $response;
$response = $self->client->delete($url, Authorization => sprintf('Bearer %s', $token));
if ($response->is_success) {
return $response->decoded_content;
} elsif ($response->code == 401) {
my $error = decode_json($response->decoded_content);
if ($error->{'error_description'} eq 'The access token provided has expired.') {
$self->set_access_token();
return $self->delete($id);
}
} else {
my $message = decode_json($response->decoded_content);
Catmandu::HTTPError->throw({
code => $response->code,
message => $message->{error}->{msg},
url => $response->request->uri->as_string,
method => $response->request->method,
request_headers => [],
request_body => $response->request->decoded_content,
response_headers => [],
response_body => $response->decoded_content,
});
return undef;
}
}
sub list {
my ($self) = @_;
my $url = sprintf('%s/api/v1/data', $self->url);
my $token = $self->access_token;
my $response = $self->client->get($url, Authorization => sprintf('Bearer %s', $token));
if ($response->is_success) {
return decode_json($response->decoded_content);
} else {
my $message = decode_json($response->decoded_content);
Catmandu::HTTPError->throw({
code => $response->code,
message => $message->{error}->{msg},
url => $response->request->uri->as_string,
method => $response->request->method,
request_headers => [],
request_body => $response->request->decoded_content,
response_headers => [],
response_body => $response->decoded_content,
});
return undef;
}
}
1;
__END__
lib/Catmandu/Store/Datahub/OAuth.pm view on Meta::CPAN
# Replace this with something better as soon as we figure out how we can get rid of the password
return $self->get_token_u_p();
}
sub get_token_u_p {
my ($self) = @_;
my $auth_url = '%s/oauth/v2/token?grant_type=password&username=%s&password=%s&client_id=%s&client_secret=%s';
my $req_url = sprintf($auth_url, $self->url, $self->username, $self->password, $self->client_id, $self->client_secret);
my $response = $self->ua->get($req_url);
if ($response->is_success) {
my $token_raw = $response->decoded_content;
my $token_parsed = decode_json($token_raw);
return $token_parsed->{'access_token'};
} else {
Catmandu::HTTPError->throw({
code => $response->code,
message => $response->status_line,
url => $response->request->uri,
method => $response->request->method,
request_headers => [],
request_body => $response->request->decoded_content,
response_headers => [],
response_body => $response->decoded_content,
});
return undef;
}
}
1;
( run in 0.990 second using v1.01-cache-2.11-cpan-26ccb49234f )