mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	Merge pull request #3411 from laf/ipsec-api
This commit is contained in:
		| @@ -30,6 +30,7 @@ | ||||
|         - [`get_devices_by_group`](#api-route-get_devices_by_group) | ||||
|     - [`routing`](#api-routing) | ||||
|         - [`list_bgp`](#api-route-1) | ||||
|         - [`list_ipsec`](#list_ipsec) | ||||
|     - [`switching`](#api-switching) | ||||
|         - [`get_vlans`](#api-route-4) | ||||
|     - [`alerts`](#api-alerts) | ||||
| @@ -866,6 +867,43 @@ Output: | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ### <a name="list_ipsec">Function: `list_ipsec`</a> [`top`](#top) | ||||
|  | ||||
| List the current IPSec tunnels which are active. | ||||
|  | ||||
| Route: /api/v0/routing/ipsec/data/:hostname | ||||
|  | ||||
| - hostname can be either the device hostname or id | ||||
|  | ||||
| Input: | ||||
|  | ||||
|  - | ||||
|  | ||||
| Example: | ||||
| ```curl | ||||
| curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/routing/ipsec/data/localhost | ||||
| ``` | ||||
|  | ||||
| Output: | ||||
| ```text | ||||
| { | ||||
|     "status": "ok", | ||||
|     "err-msg": "", | ||||
|     "count": 0, | ||||
|     "ipsec": [ | ||||
|         "tunnel_id": "1", | ||||
|         "device_id": "1", | ||||
|         "peer_port": "0", | ||||
|         "peer_addr": "127.0.0.1", | ||||
|         "local_addr": "127.0.0.2", | ||||
|         "local_port": "0", | ||||
|         "tunnel_name": "", | ||||
|         "tunnel_status": "active" | ||||
|     ] | ||||
| } | ||||
| ``` | ||||
| > Please note, this will only show active VPN sessions not all configured. | ||||
|  | ||||
| ## <a name="api-switching">`Switching`</a> [`top`](#top) | ||||
|  | ||||
| ### <a name="api-route-4">Function: `get_vlans`</a> [`top`](#top) | ||||
|   | ||||
| @@ -128,6 +128,19 @@ $app->group( | ||||
|                     } | ||||
|                 ); | ||||
|                 // End Inventory | ||||
|                 // Routing section | ||||
|                 $app->group( | ||||
|                     '/routing', | ||||
|                     function () use ($app) { | ||||
|                         $app->group( | ||||
|                             '/ipsec', | ||||
|                             function () use ($app) { | ||||
|                                 $app->get('/data/:hostname', 'authToken', 'list_ipsec')->name('list_ipsec'); | ||||
|                             } | ||||
|                         ); | ||||
|                     } | ||||
|                 ); | ||||
| 		// End Routing | ||||
|             } | ||||
|         ); | ||||
|         $app->get('/v0', 'authToken', 'show_endpoints'); | ||||
|   | ||||
| @@ -1288,3 +1288,33 @@ function get_devices_by_group() { | ||||
|     echo _json_encode($output); | ||||
|  | ||||
| } | ||||
|  | ||||
| function list_ipsec() { | ||||
|     $app      = \Slim\Slim::getInstance(); | ||||
|     $router   = $app->router()->getCurrentRoute()->getParams(); | ||||
|     $status   = 'error'; | ||||
|     $code     = 404; | ||||
|     $message  = ''; | ||||
|     $hostname = $router['hostname']; | ||||
|     // use hostname as device_id if it's all digits | ||||
|     $device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname); | ||||
|     if (!is_numeric($device_id)) { | ||||
|         $message = "No valid hostname or device ID provided"; | ||||
|     } | ||||
|     else { | ||||
|         $ipsec  = dbFetchRows("SELECT `D`.`hostname`, `I`.* FROM `ipsec_tunnels` AS `I`, `devices` AS `D` WHERE `I`.`device_id`=? AND `D`.`device_id` = `I`.`device_id`", array($device_id)); | ||||
|         $total  = count($ipsec); | ||||
|         $status = 'ok'; | ||||
|         $code   = 200; | ||||
|     } | ||||
|  | ||||
|     $output  = array( | ||||
|         'status'  => $status, | ||||
|         'err-msg' => $message, | ||||
|         'count'   => $total, | ||||
|         'ipsec'  => $ipsec, | ||||
|     ); | ||||
|     $app->response->setStatus($code); | ||||
|     $app->response->headers->set('Content-Type', 'application/json'); | ||||
|     echo _json_encode($output); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user