1###############################################################################
2## Copyright 2005-2016 OCSInventory-NG/OCSInventory-Server contributors.
3## See the Contributors file for more details about them.
4##
5## This file is part of OCSInventory-NG/OCSInventory-ocsreports.
6##
7## OCSInventory-NG/OCSInventory-Server is free software: you can redistribute
8## it and/or modify it under the terms of the GNU General Public License as
9## published by the Free Software Foundation, either version 2 of the License,
10## or (at your option) any later version.
11##
12## OCSInventory-NG/OCSInventory-Server is distributed in the hope that it
13## will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
14## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15## GNU General Public License for more details.
16##
17## You should have received a copy of the GNU General Public License
18## along with OCSInventory-NG/OCSInventory-ocsreports. if not, write to the
19## Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20## MA 02110-1301, USA.
21################################################################################
22package Apache::Ocsinventory::Interface;
23
24use Apache::Ocsinventory::Interface::Internals;
25use Apache::Ocsinventory::Interface::Database;
26
27require Apache::Ocsinventory::Interface::Ipdiscover;
28require Apache::Ocsinventory::Interface::Inventory;
29require Apache::Ocsinventory::Interface::Config;
30require Apache::Ocsinventory::Interface::History;
31require Apache::Ocsinventory::Interface::Extensions;
32require Apache::Ocsinventory::Interface::Updates;
33require Apache::Ocsinventory::Interface::Snmp;
34
35use strict;
36
37$ENV{OCS_OPT_WEB_SERVICE_RESULTS_LIMIT} = 100 if !defined $ENV{OCS_OPT_WEB_SERVICE_RESULTS_LIMIT};
38
39eval{
40  if( $ENV{OCS_OPT_WEB_SERVICE_PRIV_MODS_CONF} ){
41    require $ENV{OCS_OPT_WEB_SERVICE_PRIV_MODS_CONF} or die($!);
42  }
43};
44if($@){
45  print STDERR "ocsinventory-server: $@\n";
46  print STDERR "ocsinventory-server: Can't load $ENV{OCS_OPT_WEB_SERVICE_PRIV_MODS_CONF} - Web service Private extensions will be unavailable\n";
47};
48
49
50# ===== ACCESSOR TO COMPUTER'S DATA =====
51
52sub get_computers_V1{
53  my $class = shift;
54# Xml request
55  my $request = shift;
56  return Apache::Ocsinventory::Interface::Inventory::get_computers( $request );
57}
58
59sub delete_computers_by_id_V1{
60  my $class = shift ;
61  my @ids = @_ ;
62  return Apache::Ocsinventory::Interface::Updates::delete_computers_by_id( \@ids );
63}
64
65# ===== CONFIGURATION METHODS =====
66
67# Read a general config parameter
68# If a value is provided, set it to given parameters
69# If only a tvalue is given, set ivalue to NULL
70sub ocs_config_V1{
71  my $class = shift;
72  my ($key, $value) = @_;
73
74  return send_error('BAD_KEY') unless $key =~ /^[_\w]+$/;
75
76  if( defined( $key ) and defined( $value ) ){
77    $key = decode_xml( $key );
78    $value = decode_xml( $value );
79    Apache::Ocsinventory::Interface::Config::ocs_config_write( $key, $value, undef ) if defined($value);
80  }
81  return Apache::Ocsinventory::Interface::Config::ocs_config_read( $key, 1 );
82}
83
84sub ocs_config_V2{
85  my $class = shift;
86  my ($key, $ivalue, $tvalue) = @_;
87
88  return send_error('BAD_KEY') unless $key =~ /^[_\w]+$/;
89
90  if( defined( $key ) and ( defined( $ivalue) or defined( $tvalue) ) ){
91    $key = decode_xml( $key );
92    $ivalue = decode_xml( $ivalue ) if defined $ivalue;
93    $tvalue = decode_xml( $tvalue ) if defined $tvalue;
94    my ($error, $result ) = Apache::Ocsinventory::Interface::Config::ocs_config_write( $key, $ivalue, $tvalue );
95    return $result if $error;
96  }
97  return Apache::Ocsinventory::Interface::Config::ocs_config_read( $key, 0 );
98}
99
100# ===== SOFTWARE DICTIONARY =====
101
102# Get a software dictionary word
103sub get_dico_soft_element_V1{
104  my( $class, $word ) = @_;
105  $word = decode_xml( $word );
106  return Apache::Ocsinventory::Interface::Inventory::get_dico_soft_extracted( $word );
107}
108
109# ===== CHECKSUM UPDATE =====
110
111sub reset_checksum_V1 {
112  my $class = shift;
113  my $checksum = shift;
114  return send_error('BAD_CHECKSUM') unless $checksum =~ /^\d+$/;
115  for(@_){
116    return send_error('BAD_ID') unless $_ =~ /^\d+$/;
117  }
118  return Apache::Ocsinventory::Interface::Internals::reset_checksum( $checksum, \@_ );
119}
120
121# ===== EVENTS TRACKING =====
122
123# Get computer's history
124sub get_history_V1{
125  my( $class, $offset ) = @_;
126  return send_error('BAD_OFFSET') unless $offset =~ /^\d+$/;
127  return Apache::Ocsinventory::Interface::History::get_history_events( $offset );
128}
129
130# Clear computer's history
131sub clear_history_V1{
132  my( $class, $offset ) = @_;
133  return send_error('BAD_OFFSET') unless $offset =~ /^\d+$/;
134  return Apache::Ocsinventory::Interface::History::clear_history_events( $offset );
135}
136
137# ===== IPDISCOVER METHODS =====
138
139sub get_ipdiscover_devices_V1{
140  my $class = shift;
141  my ( $date, $offset, $nInv ) = @_;
142  $nInv = 0 if !defined $nInv;
143  return send_error('BAD_DATE') unless $date =~ /^\d{4}-\d{2}-\d{2}(\s\d\d(:\d\d){2})?$/;
144  return send_error('BAD_OFFSET') unless $offset =~ /^\d+$/;
145  return send_error('BAD_THIRD_PARAMETER') unless $nInv =~ /^(?:0|1)$/;
146  return Apache::Ocsinventory::Interface::Ipdiscover::get_ipdiscover_devices( $date, $offset, $nInv );
147}
148
149sub ipdiscover_tag_V1 {
150  my $class = shift;
151  my ( $device, $description, $type, $user ) = @_;
152  $description = decode_xml( $description );
153  $type = decode_xml( $type );
154  $user = decode_xml( $user );
155  return send_error('BAD_MAC') unless $device =~ /^\w\w(.\w\w){5}$/;
156  return Apache::Ocsinventory::Interface::Ipdiscover::ipdiscover_tag( $device, $description, $type, $user );
157}
158
159sub ipdiscover_untag_V1{
160  my $class = shift;
161  my $device = shift;
162  return send_error('BAD_MAC') unless $device =~ /^\w\w(.\w\w){5}$/;
163  return Apache::Ocsinventory::Interface::Ipdiscover::ipdiscover_untag( $device );
164}
165
166sub ipdiscover_remove_V1{
167  my $class = shift;
168  my $device = shift;
169  return send_error('BAD_MAC') unless $device =~ /^\w\w(.\w\w){5}$/;
170  return Apache::Ocsinventory::Interface::Ipdiscover::ipdiscover_remove( $device );
171}
172
173sub ipdiscover_create_type_V1{
174  my $class = shift;
175  my $type = shift;
176  $type = decode_xml( $type );
177  return Apache::Ocsinventory::Interface::Ipdiscover::ipdiscover_add_type( $type );
178}
179
180sub ipdiscover_delete_type_V1{
181  my $class = shift;
182  my $type = shift;
183  $type = decode_xml( $type );
184  return Apache::Ocsinventory::Interface::Ipdiscover::ipdiscover_del_type( $type );
185}
186
187# ===== ACCESSOR TO SNMP DATA =====
188
189sub get_snmp_V1{
190  my $class = shift;
191# Xml request
192  my $request = shift;
193  return Apache::Ocsinventory::Interface::Snmp::get_snmp( $request );
194}
195
196
1971;
198