/usr/share/fusioninventory/lib/FusionInventory/Agent/HTTP/Client/Fusion.pm is in fusioninventory-agent 1:2.3.10.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | package FusionInventory::Agent::HTTP::Client::Fusion;
use strict;
use warnings;
use base 'FusionInventory::Agent::HTTP::Client';
use JSON;
use HTTP::Request;
use URI::Escape;
sub new {
my ($class, %params) = @_;
my $self = $class->SUPER::new(%params);
# Stack the messages sent in order to be able to check the
# correctness of the behavior with the test-suite
if ($params{debug}) {
$self->{debug} = 1;
$self->{msgStack} = []
}
return $self;
}
sub _prepareVal {
my ($self, $val) = @_;
return '' unless length($val);
# forbid to long argument.
while (length(URI::Escape::uri_escape_utf8($val)) > 1500) {
$val =~ s/^.{5}/…/;
}
return URI::Escape::uri_escape_utf8($val);
}
sub send { ## no critic (ProhibitBuiltinHomonyms)
my ($self, %params) = @_;
push @{$self->{msgStack}}, $params{args} if $self->{debug};
my $url = ref $params{url} eq 'URI' ?
$params{url} : URI->new($params{url});
my $finalUrl = $url.'?action='.uri_escape($params{args}->{action});
foreach my $k (keys %{$params{args}}) {
if (ref($params{args}->{$k}) eq 'ARRAY') {
foreach (@{$params{args}->{$k}}) {
$finalUrl .= '&'.$k.'[]='.$self->_prepareVal($_ || '');
}
} elsif (ref($params{args}->{$k}) eq 'HASH') {
foreach (keys %{$params{args}->{$k}}) {
$finalUrl .= '&'.$k.'['.$_.']='.$self->_prepareVal($params{args}->{$k}{$_});
}
} elsif ($k ne 'action' && length($params{args}->{$k})) {
$finalUrl .= '&'.$k.'='.$self->_prepareVal($params{args}->{$k});
}
}
$self->{logger}->debug2($finalUrl) if $self->{logger};
my $request = HTTP::Request->new(GET => $finalUrl);
my $response = $self->request($request);
return unless $response;
return eval { from_json( $response->content(), { utf8 => 1 } ) };
}
1;
__END__
=head1 NAME
FusionInventory::Agent::HTTP::Client::Fusion - An HTTP client using Fusion protocol
=head1 DESCRIPTION
This is the object used by the agent to send messages to GLPI servers,
using new Fusion protocol (JSON messages sent through GET requests).
=head1 METHODS
=head2 send(%params)
The following parameters are allowed, as keys of the %params
hash:
=over
=item I<url>
the url to send the message to (mandatory)
=item I<args>
A list of parameters to pass to the server. The action key is mandatory.
Parameters can be hashref or arrayref.
=back
This method returns a perl data structure.
|