mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Created add, edit, remove location and edit, remove services to the API (#11080)
* Created add, edit, remove location and edit, remove services to the v0 API and added their corresponding routes * Changed repeating code by adding a function that checks for missing parameters * Reduced the lines of add_service_for_host, modified a little more the missing fields function * Changed True and False to true and false, erased an unused var called $missing * Solved merged confict Deleted duplicate functions generated when solving merge conflicts * fixed more conficts Deleting duplicate entries produced by trying to solve a merge conflict * fixing more duplicate functions This merge conflict created more duplicates * Update api_functions.inc.php * Update api_functions.inc.php
This commit is contained in:
@@ -2216,46 +2216,36 @@ function validate_column_list($columns, $tableName)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function missing_fields($required_fields, $data)
|
||||||
|
{
|
||||||
|
foreach ($required_fields as $required) {
|
||||||
|
if (empty($data[$required])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function add_service_for_host(\Illuminate\Http\Request $request)
|
function add_service_for_host(\Illuminate\Http\Request $request)
|
||||||
{
|
{
|
||||||
$hostname = $request->route('hostname');
|
$hostname = $request->route('hostname');
|
||||||
// use hostname as device_id if it's all digits
|
|
||||||
$device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname);
|
$device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname);
|
||||||
|
|
||||||
$data = json_decode($request->getContent(), true);
|
$data = json_decode($request->getContent(), true);
|
||||||
$missing_fields = [];
|
if (missing_fields(array('type'), $data)) {
|
||||||
|
return api_error(400, 'Required fields missing (hostname and type needed)');
|
||||||
// Check if some required fields are empty
|
|
||||||
if (empty($data['type'])) {
|
|
||||||
$missing_fields[] = 'type';
|
|
||||||
}
|
}
|
||||||
if (empty($data['ip'])) {
|
|
||||||
$missing_fields[] = 'ip';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Print error if required fields are missing
|
|
||||||
if (!empty($missing_fields)) {
|
|
||||||
return api_error(400, sprintf("Service field%s %s missing: %s.", ((sizeof($missing_fields)>1)?'s':''), ((sizeof($missing_fields)>1)?'are':'is'), implode(', ', $missing_fields)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if service type exists
|
|
||||||
if (!in_array($data['type'], list_available_services())) {
|
if (!in_array($data['type'], list_available_services())) {
|
||||||
return api_error(400, "The service " . $data['type'] . " does not exist.\n Available service types: " . implode(', ', list_available_services()));
|
return api_error(400, "The service " . $data['type'] . " does not exist.\n Available service types: " . implode(', ', list_available_services()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get parameters
|
|
||||||
$service_type = $data['type'];
|
$service_type = $data['type'];
|
||||||
$service_ip = $data['ip'];
|
$service_ip = $data['ip'];
|
||||||
$service_desc = $data['desc'] ? $data['desc'] : '';
|
$service_desc = $data['desc'] ? $data['desc'] : '';
|
||||||
$service_param = $data['param'] ? $data['param'] : '';
|
$service_param = $data['param'] ? $data['param'] : '';
|
||||||
$service_ignore = $data['ignore'] ? true : false; // Default false
|
$service_ignore = $data['ignore'] ? true : false; // Default false
|
||||||
|
|
||||||
// Set the service
|
|
||||||
$service_id = add_service($device_id, $service_type, $service_desc, $service_ip, $service_param, (int)$service_ignore);
|
$service_id = add_service($device_id, $service_type, $service_desc, $service_ip, $service_param, (int)$service_ignore);
|
||||||
if ($service_id != false) {
|
if ($service_id != false) {
|
||||||
return api_success_noresult(201, "Service $service_type has been added to device $hostname (#$service_id)");
|
return api_success_noresult(201, "Service $service_type has been added to device $hostname (#$service_id)");
|
||||||
}
|
}
|
||||||
|
|
||||||
return api_error(500, 'Failed to add the service');
|
return api_error(500, 'Failed to add the service');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2304,6 +2294,89 @@ function validateDeviceIds($ids)
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function add_location(\Illuminate\Http\Request $request)
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
if (missing_fields(array('location','lat', 'lng'), $data)) {
|
||||||
|
return api_error(400, 'Required fields missing (location, lat and lng needed)');
|
||||||
|
}
|
||||||
|
// Set the location
|
||||||
|
$timestamp = date("Y-m-d H:m:s");
|
||||||
|
$insert = array('location' => $data['location'], 'lat' => $data['lat'], 'lng' => $data['lng'], 'timestamp' => $timestamp);
|
||||||
|
$location_id = dbInsert($insert, 'locations');
|
||||||
|
if ($location_id != false) {
|
||||||
|
return api_success_noresult(201, "Location added with id #$location_id");
|
||||||
|
}
|
||||||
|
return api_error(500, 'Failed to add the location');
|
||||||
|
}
|
||||||
|
|
||||||
|
function edit_location(\Illuminate\Http\Request $request)
|
||||||
|
{
|
||||||
|
$location = $request->route('location_id_or_name');
|
||||||
|
if (empty($location)) {
|
||||||
|
return api_error(400, 'No location has been provided to edit');
|
||||||
|
}
|
||||||
|
$location_id = ctype_digit($location) ? $location : get_location_id_by_name($location);
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
if (empty($location_id)) {
|
||||||
|
return api_error(400, "Failed to delete location");
|
||||||
|
}
|
||||||
|
$result = dbUpdate($data, 'locations', '`id` = ?', [$location_id]);
|
||||||
|
if ($result == 1) {
|
||||||
|
return api_success_noresult(201, "Location updated successfully");
|
||||||
|
}
|
||||||
|
return api_error(500, "Failed to update location");
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_location_id_by_name($location)
|
||||||
|
{
|
||||||
|
return dbFetchCell("SELECT id FROM locations WHERE location = ?", $location);
|
||||||
|
}
|
||||||
|
|
||||||
|
function del_location(\Illuminate\Http\Request $request)
|
||||||
|
{
|
||||||
|
$location = $request->route('location');
|
||||||
|
if (empty($location)) {
|
||||||
|
return api_error(400, 'No location has been provided to delete');
|
||||||
|
}
|
||||||
|
$location_id = get_location_id_by_name($location);
|
||||||
|
if (empty($location_id)) {
|
||||||
|
return api_error(400, "Failed to delete $location (Does not exists)");
|
||||||
|
}
|
||||||
|
$data = [
|
||||||
|
'location_id' => 0
|
||||||
|
];
|
||||||
|
dbUpdate($data, 'devices', '`location_id` = ?', [$location_id]);
|
||||||
|
$result = dbDelete('locations', '`location` = ? ', [$location]);
|
||||||
|
if ($result == 1) {
|
||||||
|
return api_success_noresult(201, "Location $location has been deleted successfully");
|
||||||
|
}
|
||||||
|
return api_error(500, "Failed to delete the location $location");
|
||||||
|
}
|
||||||
|
|
||||||
|
function del_service_from_host(\Illuminate\Http\Request $request)
|
||||||
|
{
|
||||||
|
$service_id = $request->route('id');
|
||||||
|
if (empty($service_id)) {
|
||||||
|
return api_error(400, 'No service_id has been provided to delete');
|
||||||
|
}
|
||||||
|
$result = delete_service($service_id);
|
||||||
|
if ($result == 1) {
|
||||||
|
return api_success_noresult(201, "Service has been deleted successfully");
|
||||||
|
}
|
||||||
|
return api_error(500, "Failed to delete the service");
|
||||||
|
}
|
||||||
|
|
||||||
|
function edit_service_for_host(\Illuminate\Http\Request $request)
|
||||||
|
{
|
||||||
|
$service_id = $request->route('id');
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
if (edit_service($data, $service_id) == 1) {
|
||||||
|
return api_success_noresult(201, "Service updated successfully");
|
||||||
|
}
|
||||||
|
return api_error(500, "Failed to update the service with id $service_id");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display Librenms Instance Info
|
* Display Librenms Instance Info
|
||||||
|
@@ -78,6 +78,11 @@ Route::group(['prefix' => 'v0', 'namespace' => '\App\Api\Controllers'], function
|
|||||||
Route::post('devicegroups', 'LegacyApiController@add_device_group')->name('add_device_group');
|
Route::post('devicegroups', 'LegacyApiController@add_device_group')->name('add_device_group');
|
||||||
Route::post('devices/{id}/parents', 'LegacyApiController@add_parents_to_host')->name('add_parents_to_host');
|
Route::post('devices/{id}/parents', 'LegacyApiController@add_parents_to_host')->name('add_parents_to_host');
|
||||||
Route::delete('/devices/{id}/parents', 'LegacyApiController@del_parents_from_host')->name('del_parents_from_host');
|
Route::delete('/devices/{id}/parents', 'LegacyApiController@del_parents_from_host')->name('del_parents_from_host');
|
||||||
|
Route::post('locations', 'LegacyApiController@add_location')->name('add_location');
|
||||||
|
Route::patch('locations/{location_id_or_name}', 'LegacyApiController@edit_location')->name('edit_location');
|
||||||
|
Route::delete('locations/{location}', 'LegacyApiController@del_location')->name('del_location');
|
||||||
|
Route::delete('services/{id}', 'LegacyApiController@del_service_from_host')->name('del_service_from_host');
|
||||||
|
Route::patch('services/{id}', 'LegacyApiController@edit_service_for_host')->name('edit_service_for_host');
|
||||||
});
|
});
|
||||||
|
|
||||||
// restricted by access
|
// restricted by access
|
||||||
|
Reference in New Issue
Block a user