3
3
import os
4
4
import sys
5
5
import time
6
+ from requests .adapters import HTTPAdapter
7
+ from urllib3 .util .retry import Retry
8
+
6
9
try :
7
10
import cookielib
8
11
except ImportError :
12
15
class SumoLogic (object ):
13
16
def __init__ (self , accessId , accessKey , endpoint = None , caBundle = None , cookieFile = 'cookies.txt' ):
14
17
self .session = requests .Session ()
18
+ retries = Retry (total = 3 , backoff_factor = 1 , status_forcelist = [500 , 502 , 503 , 504 , 429 ])
19
+ adapter = HTTPAdapter (max_retries = retries )
20
+ self .session .mount ('https://' , adapter )
21
+ self .session .mount ('http://' , adapter )
22
+
23
+
15
24
self .session .auth = (accessId , accessKey )
16
25
self .DEFAULT_VERSION = 'v1'
17
26
self .method = None
@@ -268,16 +277,31 @@ def sync_folder(self, folder_id, content):
268
277
def check_sync_folder (self , folder_id , job_id ):
269
278
return self .get ('/content/folders/%s/synchronize/%s/status' % (folder_id , job_id ), version = 'v2' )
270
279
271
- def delete_folder (self , folder_id ):
272
- return self .delete ('/content/%s/delete' % folder_id , version = 'v2' )
280
+ def delete_folder (self , folder_id , isAdmin = False ):
281
+ headers = {'isAdminMode' : 'true' } if isAdmin else {}
282
+ return self .delete ('/content/%s/delete' % folder_id , headers = headers , version = 'v2' )
273
283
274
- def create_folder (self , name , description , parent_folder_id ):
284
+ def create_folder (self , name , description , parent_folder_id , isAdmin = False ):
285
+ headers = {'isAdminMode' : 'true' } if isAdmin else {}
275
286
content = {
276
287
"name" : name ,
277
288
"description" : description ,
278
289
"parentId" : parent_folder_id
279
290
}
280
- return self .post ('/content/folders' , params = content , version = 'v2' )
291
+ return self .post ('/content/folders' , params = content , headers = headers , version = 'v2' )
292
+
293
+ def get_children_folder (self , folder_id ):
294
+ r = self .get ('/content/folders/%s' % folder_id , version = 'v2' )
295
+ return json .loads (r .text )['children' ]
296
+
297
+ def folder_not_exist (self , folder_id ):
298
+ endpoint = self .get_versioned_endpoint ('v2' )
299
+ r = self .session .get (endpoint + '/content/folders/' + folder_id , params = None )
300
+ return "Content with the given ID does not exist." in r .text
301
+
302
+ def get_parent_folder_id (self , folder_id ):
303
+ r = self .get ('/content/folders/%s' % folder_id , version = 'v2' )
304
+ return json .loads (r .text )['parentId' ]
281
305
282
306
def get_personal_folder (self ):
283
307
return self .get ('/content/folders/personal' , version = 'v2' )
@@ -293,15 +317,25 @@ def get_global_folder(self):
293
317
else :
294
318
return None
295
319
296
- def import_content (self , folder_id , content , is_overwrite = "false" ):
297
- return self .post ('/content/folders/%s/import?overwrite=%s' % (folder_id , is_overwrite ), params = content ,
320
+ def import_content (self , folder_id , content , is_overwrite = "false" , isAdmin = False ):
321
+ headers = {'isAdminMode' : 'true' } if isAdmin else {}
322
+ return self .post ('/content/folders/%s/import?overwrite=%s' % (folder_id , is_overwrite ), headers = headers , params = content ,
298
323
version = 'v2' )
299
324
300
325
def check_import_status (self , folder_id , job_id ):
301
326
return self .get ('/content/folders/%s/import/%s/status' % (folder_id , job_id ), version = 'v2' )
302
327
303
- def get_folder (self , folder_id ):
304
- return self .get ('/content/folders/%s' % folder_id , version = 'v2' )
328
+ def get_folder (self , folder_id , isAdmin = False ):
329
+ headers = {'isAdminMode' : 'true' } if isAdmin else {}
330
+ return self .get ('/content/folders/%s' % folder_id , headers = headers , version = 'v2' )
331
+
332
+ def update_folder (self , folder_id , isAdmin = False ):
333
+ headers = {'isAdminMode' : 'true' } if isAdmin else {}
334
+ return self .get ('/content/folders/%s' % folder_id , headers = headers , version = 'v2' )
335
+
336
+ def copy_folder (self , folder_id , destination_folder_id , isAdmin = False ):
337
+ headers = {'isAdminMode' : 'true' } if isAdmin else {}
338
+ return self .post ('/content/%s/copy?destinationFolder=%s' % (folder_id , destination_folder_id ), headers = headers ,params = {}, version = 'v2' )
305
339
306
340
def export_content (self , content_id ):
307
341
return self .post ('/content/%s/export' % content_id , params = "" , version = 'v2' )
@@ -392,8 +426,9 @@ def update_lookup_table(self, id, content):
392
426
return self .put ('/lookupTables/%s/row' % id , params = content , version = 'v1' )
393
427
394
428
# apps
395
- def install_app (self , app_id , content ):
396
- return self .post ('/apps/%s/install' % (app_id ), params = content )
429
+ def install_app (self , app_id , content , isAdmin = False ):
430
+ headers = {'isAdminMode' : 'true' } if isAdmin else {}
431
+ return self .post ('/apps/%s/install' % (app_id ), headers = headers , params = content )
397
432
398
433
def check_app_install_status (self , job_id ):
399
434
return self .get ('/apps/install/%s/status' % job_id )
@@ -692,3 +727,24 @@ def delete_cse_threat_intel_indicator(self, threat_intel_indicator_id):
692
727
result = response .json ()
693
728
694
729
return result
730
+
731
+ # monitors
732
+ def import_monitors (self , folder_id , content ):
733
+ response = self .post ('/monitors/%s/import' % folder_id , params = content )
734
+ return json .loads (response .text )
735
+
736
+ def set_monitors_permissions (self , content ):
737
+ response = self .put ('/monitors/permissions/set' , params = content )
738
+ return json .loads (response .text )
739
+
740
+ def export_monitors (self , folder_id ):
741
+ response = self .get ('/monitors/%s/export' % folder_id )
742
+ return json .loads (response .text )
743
+
744
+ def get_root_folder (self ):
745
+ response = self .get ('/monitors/root' )
746
+ return json .loads (response .text )
747
+
748
+ def delete_monitor_folder (self , folder_id ):
749
+ return self .delete ('/monitors/%s' % folder_id )
750
+
0 commit comments