@@ -65,7 +65,7 @@ def merakiRequest(p_apiKey, p_httpVerb, p_endpoint, p_additionalHeaders=None, p_
65
65
66
66
query = ""
67
67
if not p_queryItems is None :
68
- query = "?" + urlencode (p_queryItems )
68
+ query = "?" + urlencode (p_queryItems , True )
69
69
url = API_BASE_URL + p_endpoint + query
70
70
71
71
verb = p_httpVerb .upper ()
@@ -192,6 +192,17 @@ def getNetworkMerakiAuthUsers(p_apiKey, p_networkId):
192
192
success , errors , headers , response = merakiRequest (p_apiKey , "GET" , endpoint , p_verbose = FLAG_REQUEST_VERBOSE )
193
193
return success , errors , headers , response
194
194
195
+
196
+ def getNetworkSmDevices (p_apiKey , p_networkId ):
197
+ endpoint = "/networks/%s/sm/devices" % p_networkId
198
+ query = {"fields[]" : ['ip' , 'systemType' , 'lastConnected' , 'location' , 'lastUser' ,
199
+ 'ownerEmail' , 'ownerUsername' , 'imei' , 'simCarrierNetwork' ]}
200
+
201
+ success , errors , headers , response = merakiRequest (p_apiKey , "GET" , endpoint , p_queryItems = query ,
202
+ p_verbose = FLAG_REQUEST_VERBOSE )
203
+
204
+ return success , errors , headers , response
205
+
195
206
196
207
def getOrganizationAdmins (p_apiKey , p_organizationId ):
197
208
endpoint = "/organizations/%s/admins" % p_organizationId
@@ -462,8 +473,29 @@ def perform_scan(config):
462
473
log_to_database (db , document , config ['endpoints' ]['getNetworkMerakiAuthUsers' ]['collection' ],
463
474
config ['endpoints' ]['getNetworkMerakiAuthUsers' ]['mode' ],
464
475
keyValuePair = {'id' : user ['id' ], 'networkId' : network ['id' ]})
476
+ if 'getNetworkSmDevices' in config ['endpoints' ] and config ['endpoints' ]['getNetworkSmDevices' ]['enabled' ]:
477
+ if 'systemsManager' in network ['productTypes' ]:
478
+ success , errors , headers , sm_devices = getNetworkSmDevices (api_key , network ['id' ])
479
+ if not sm_devices is None :
480
+ tag_disabled = not config ['endpoints' ]['getNetworkSmDevices' ]['filter_by_device_tag_enabled' ]
481
+ tag_filter = config ['endpoints' ]['getNetworkSmDevices' ]['target_device_tag' ]
482
+ scan_time = datetime .datetime .now ()
483
+ for device in sm_devices :
484
+ if tag_disabled or tag_filter in device ['tags' ]:
485
+ document = {
486
+ 'scanTime' : scan_time ,
487
+ 'scanIntervalMinutes' : config ['scan_interval_minutes' ],
488
+ 'networkId' : network ['id' ],
489
+ 'networkName' : network ['name' ]
490
+ }
491
+ for key in device :
492
+ document [key ] = device [key ]
493
+
494
+ log_to_database (db , document ,
495
+ config ['endpoints' ]['getNetworkSmDevices' ]['collection' ],
496
+ config ['endpoints' ]['getNetworkSmDevices' ]['mode' ],
497
+ keyValuePair = {'id' : device ['id' ]})
465
498
466
-
467
499
print (str (datetime .datetime .now ()) + " -- Scan complete" )
468
500
469
501
0 commit comments