mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	Added add and remove parents for device from the V0 API (#11100)
* Added add and remove parents for device from the V0 API * Fixed some minors errors (white spaces and lack of them, an unnecesary else) * Added missing } * Reducing cognitive complexity * Further reduced cognitive complexity and added a check if parent device existed (it blew up when it did not) * Refactored the code and fixed bugs (that i created) when deviceIds or parentIds where nonexistent * Fixed } not on a new line issue * Empty space removed * Deleted lines added by mistake to composer.json * removed a comma that broke composer.json * added the missing element in composer.json * Added optional ids to del_parents_fom_host Updated del_parents_from_host() so it can accept parent(s) id(s) to delete, if none given it deletes all it's parents. * Fixing code issues on del_parents_from_host Refactored and solved small issues with del_parents_from_host * Refactored code del_parents_from_host Refactored del_parents_from_host() in order to comply with the projects standard * Added one space Added missing whitespace * refactoring for better readability
This commit is contained in:
		| @@ -2259,6 +2259,52 @@ function add_service_for_host(\Illuminate\Http\Request $request) | |||||||
|     return api_error(500, 'Failed to add the service'); |     return api_error(500, 'Failed to add the service'); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function add_parents_to_host(\Illuminate\Http\Request $request) | ||||||
|  | { | ||||||
|  |     $data = json_decode($request->getContent(), true); | ||||||
|  |     $device_id = $request->route('id'); | ||||||
|  |     $parent_ids = explode(',', $data['parent_ids']); | ||||||
|  |     if (validateDeviceIds($parent_ids) && validateDeviceIds(array($device_id)) && (!in_array($device_id, $parent_ids))) { | ||||||
|  |         Device::find($device_id)->parents()->sync($parent_ids); | ||||||
|  |         return api_success_noresult(201, 'Device dependencies have been saved'); | ||||||
|  |     } | ||||||
|  |     return api_error(400, "Check your parent and device IDs"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function del_parents_from_host(\Illuminate\Http\Request $request) | ||||||
|  | { | ||||||
|  |     $device_id = $request->route('id'); | ||||||
|  |     $data = json_decode($request->getContent(), true); | ||||||
|  |     if (!validateDeviceIds(array($device_id))) { | ||||||
|  |         return api_error(400, "Check your device ID!"); | ||||||
|  |     } | ||||||
|  |     $device = Device::find($device_id); | ||||||
|  |     if (!empty($data['parent_ids'])) { | ||||||
|  |         $parents = explode(',', $data['parent_ids']); | ||||||
|  |         //remove parents included in the request if they are valid device ids | ||||||
|  |         $result = validateDeviceIds($parents)?$device->parents()->detach($parents):false; | ||||||
|  |     } | ||||||
|  |     if (is_null($result)) { | ||||||
|  |         //$result doesn't exist so $data['parent_ids'] is empty | ||||||
|  |         $result = $device->parents()->detach(); //remove all parents | ||||||
|  |     } | ||||||
|  |     if ($result) { | ||||||
|  |         return api_success_noresult(201, 'All device dependencies have been removed'); | ||||||
|  |     } | ||||||
|  |     return api_error(400, 'Device dependency cannot be deleted check device and parents ids'); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function validateDeviceIds($ids) | ||||||
|  | { | ||||||
|  |     foreach ($ids as $id) { | ||||||
|  |         $invalidId = !is_numeric($id) || $id < 1 || is_null(Device::find($id)); | ||||||
|  |         if ($invalidId) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Display Librenms Instance Info |  * Display Librenms Instance Info | ||||||
|  */ |  */ | ||||||
|   | |||||||
| @@ -76,6 +76,8 @@ Route::group(['prefix' => 'v0', 'namespace' => '\App\Api\Controllers'], function | |||||||
|         Route::get('oxidized/config/search/{searchstring}', 'LegacyApiController@search_oxidized')->name('search_oxidized'); |         Route::get('oxidized/config/search/{searchstring}', 'LegacyApiController@search_oxidized')->name('search_oxidized'); | ||||||
|         Route::get('oxidized/config/{device_name}', 'LegacyApiController@get_oxidized_config')->name('get_oxidized_config'); |         Route::get('oxidized/config/{device_name}', 'LegacyApiController@get_oxidized_config')->name('get_oxidized_config'); | ||||||
|         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::delete('/devices/{id}/parents', 'LegacyApiController@del_parents_from_host')->name('del_parents_from_host'); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     // restricted by access |     // restricted by access | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user