You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/lib/NGCP/Panel/Utils/DeviceBootstrap/VendorREST.pm

92 lines
2.4 KiB

package NGCP::Panel::Utils::DeviceBootstrap::VendorREST;
use strict;
use warnings;
use Moo;
use HTTP::Request;
use JSON qw/encode_json decode_json/;
extends 'NGCP::Panel::Utils::DeviceBootstrap::VendorRPC';
sub redirect_server_call {
my ($self, $action) = @_;
my $c = $self->params->{c};
$self->init_content_params();
$c->log->debug("Performing VendorREST call for action '$action'");
my $method = $action.'_content';
my $data = $self->rest_prepare_request($method);
unless ($data) {
$c->log->debug("VendorREST call for action '$action' failed due to missing data");
return "No bootstrap data from redirect service";
}
my $req = HTTP::Request->new($data->{method} => $data->{url});
if ($data->{token}) {
$req->header(token => $data->{token});
}
elsif ($data->{hawk}) {
$req->header(Authorization => $data->{hawk});
$req->header('accept' => 'application/json');
}
else {
$req->header(%{$self->get_basic_authorization($self->params->{credentials})});
}
if (defined $data->{body}) {
$req->content(encode_json($data->{body}));
$req->content_type('application/json');
}
my $res = $self->_ua->request($req);
if ($res->is_success) {
$c->log->info("Performing VendorREST for action '$action' succeeded");
return 0;
} else {
$c->log->error("Performing VendorREST for action '$action' failed (" . $res->status_line . "): " . $res->decoded_content);
return "Failed to perform redirect service action";
}
}
sub to_log {
my ($self, $data) = @_;
my $msg = sprintf "%s:", $data->{name};
foreach my $t (qw(tx_id action url status msg data)) {
if (exists $data->{$t}) {
$msg .= sprintf " $t=%s", $data->{$t} // '';
}
}
return $msg;
}
sub data_to_str {
my ($self, $data) = @_;
my $data_str;
if (ref $data) {
$data_str = Data::Dumper->new([$data])
->Terse(1)
->Dump;
} elsif ($data) {
$data_str = $data;
}
if ($data_str) {
$data_str =~ s/\n//g;
$data_str =~ s/\s+/ /g;
} else {
$data_str = '';
}
if (length($data_str) > 100000) {
$data_str = "{ data => 'Msg size is too big' }";
}
return $data_str;
}
1;
# vim: set tabstop=4 expandtab: