From 977cdd558d291fe7689dbc1702b9606f925581a7 Mon Sep 17 00:00:00 2001 From: laf Date: Tue, 8 Dec 2015 22:53:52 +0000 Subject: [PATCH 1/2] Added API route to update devices columns in DB --- doc/API/API-Docs.md | 28 ++++++++++++++++++++++ html/api_v0.php | 1 + html/includes/api_functions.inc.php | 37 +++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/doc/API/API-Docs.md b/doc/API/API-Docs.md index 17b34e753..e879fe637 100644 --- a/doc/API/API-Docs.md +++ b/doc/API/API-Docs.md @@ -18,6 +18,7 @@ - [`list_devices`](#api-route-10) - [`add_device`](#api-route-11) - [`list_oxidized`](#api-route-21) + - [`update_device_field`](#api-route-update_device_field) - [`routing`](#api-routing) - [`list_bgp`](#api-route-1) - [`switching`](#api-switching) @@ -462,6 +463,33 @@ Output: ] ``` +### Function: `update_device_field` [`top`](#top) + +Update devices field in the database. + +Route: /api/v0/devices/:hostname + +Input (JSON): + + - field: The column name within the database + - data: The data to update the column with + +Examples: +```curl +curl -X PATCH -d '{"field": "notes", "data": "This server should be kept online"}' -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/devices/localhost +``` + +Output: + +```text +[ + { + "status": "ok", + "message": "Device notes has been updated" + } +] +``` + ## `Routing` [`top`](#top) ### Function: `list_bgp` [`top`](#top) diff --git a/html/api_v0.php b/html/api_v0.php index a64bab30d..426591162 100644 --- a/html/api_v0.php +++ b/html/api_v0.php @@ -42,6 +42,7 @@ $app->group( // api/v0/devices/$hostname $app->get('/:hostname', 'authToken', 'get_device')->name('get_device'); // api/v0/devices/$hostname + $app->patch('/:hostname', 'authToken', 'update_device')->name('update_device_field'); $app->get('/:hostname/vlans', 'authToken', 'get_vlans')->name('get_vlans'); // api/v0/devices/$hostname/vlans $app->get('/:hostname/graphs', 'authToken', 'get_graphs')->name('get_graphs'); diff --git a/html/includes/api_functions.inc.php b/html/includes/api_functions.inc.php index 7a903bc65..2abb88871 100644 --- a/html/includes/api_functions.inc.php +++ b/html/includes/api_functions.inc.php @@ -978,3 +978,40 @@ function list_bills() { $app->response->headers->set('Content-Type', 'application/json'); echo _json_encode($output); } + +function update_device() { + global $config; + $app = \Slim\Slim::getInstance(); + $router = $app->router()->getCurrentRoute()->getParams(); + $status = 'error'; + $message = ''; + $code = 500; + $hostname = $router['hostname']; + // use hostname as device_id if it's all digits + $device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname); + $data = json_decode(file_get_contents('php://input'), true); + $bad_fields = array('id','hostname'); + if (empty($data['field'])) { + $message = 'Device field to patch has not been supplied'; + } + elseif (in_array($data['field'], $bad_fields)) { + $message = 'Device field is not allowed to be updated'; + } + else { + if (dbUpdate(array(mres($data['field']) => mres($data['data'])), 'devices', '`device_id`=?', array($device_id))) { + $status = 'ok'; + $message = 'Device ' . mres($data['field']) . ' field has been updated'; + $code = 200; + } + else { + $message = 'Device ' . mres($data['field']) . ' field failed to be updated'; + } + } + $output = array( + 'status' => $status, + 'message' => $message, + ); + $app->response->setStatus($code); + $app->response->headers->set('Content-Type', 'application/json'); + echo _json_encode($output); +} From 9e9a48d78c1da1c660846d85315e91e9656821a7 Mon Sep 17 00:00:00 2001 From: laf Date: Tue, 8 Dec 2015 23:12:26 +0000 Subject: [PATCH 2/2] I will never understand scrut! --- html/includes/api_functions.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/html/includes/api_functions.inc.php b/html/includes/api_functions.inc.php index 2abb88871..9caa5c2b5 100644 --- a/html/includes/api_functions.inc.php +++ b/html/includes/api_functions.inc.php @@ -984,7 +984,6 @@ function update_device() { $app = \Slim\Slim::getInstance(); $router = $app->router()->getCurrentRoute()->getParams(); $status = 'error'; - $message = ''; $code = 500; $hostname = $router['hostname']; // use hostname as device_id if it's all digits