Rebased from Memopt

This commit is contained in:
brotoskyj
2025-09-02 09:14:22 -04:00
parent 4b291a9521
commit df4fd49197
+21 -25
View File
@@ -20,6 +20,9 @@ import pandas
import time import time
import utils.pretty as ct import utils.pretty as ct
import ijson import ijson
import os
from bson import ObjectId
import datetime
def pullPolicyExechistories(url, choice, policiesnames, outputjson: bool): def pullPolicyExechistories(url, choice, policiesnames, outputjson: bool):
file_path = 'chunkinator.json' file_path = 'chunkinator.json'
@@ -28,10 +31,14 @@ def pullPolicyExechistories(url, choice, policiesnames, outputjson: bool):
} }
checkpoint = '000000000000000000000000' checkpoint = '000000000000000000000000'
json_output = {'error': 'Success', 'response': {'exechistories': []}} json_output = {'error': 'Success', 'response': {'exechistories': []}}
while True: while True:
json_response_data = checkpoint_stomper(checkpoint, url, policiesnames, headers) json_response_data = checkpoint_stomper(checkpoint, url, policiesnames, headers)
if not json_response_data['response']['exechistories']: histories = json_response_data['response']['exechistories']
if not histories:
break break
array_dividend = max(round(len(histories) / 20), 1)
match_found = False match_found = False
array_dividend = round(len(json_response_data['response']['exechistories'])/20) array_dividend = round(len(json_response_data['response']['exechistories'])/20)
if array_dividend == 0: if array_dividend == 0:
@@ -41,10 +48,7 @@ def pullPolicyExechistories(url, choice, policiesnames, outputjson: bool):
match_found = True match_found = True
break break
checkpoints_processed = round(len(json_response_data['response']['exechistories'])/array_dividend) checkpoints_processed = round(len(json_response_data['response']['exechistories'])/array_dividend)
if (index + 1) < checkpoints_processed: print(ct.colorText(f"{checkpoints_processed} checkpoints from this execution have been processed. Stepping to the subsequent checkpoint. {item['checkpoint']}", "blue"))
print(ct.colorText(f"{index + 1}/{checkpoints_processed} checkpoint(s) from this execution have been processed and Found with Date Match. Last Checkpoint: {item['checkpoint']}.", "blue"))
else:
print(ct.colorText(f"{index + 1}/{checkpoints_processed} checkpoint(s) from this execution have been processed. Last Checkpoint: {item['checkpoint']}.", "blue"))
checkpoint = item['checkpoint'] checkpoint = item['checkpoint']
if match_found == True: if match_found == True:
for index, item in enumerate(json_response_data['response']['exechistories']): for index, item in enumerate(json_response_data['response']['exechistories']):
@@ -99,6 +103,7 @@ def checkpoint_stomper(checkpoint, url, policy, headers):
json_output['response']['exechistories'].append(item) json_output['response']['exechistories'].append(item)
parse_text = json.loads(json.dumps(json_output)) parse_text = json.loads(json.dumps(json_output))
return parse_text return parse_text
def listPolicies(url): def listPolicies(url):
endpoint = url + '/v1/group' endpoint = url + '/v1/group'
print(ct.colorText("[+] Grabbing All Policies", "cyan")) print(ct.colorText("[+] Grabbing All Policies", "cyan"))
@@ -142,25 +147,16 @@ def listAllowlists(url):
return choice, policiesnames, policyids return choice, policiesnames, policyids
#Need else and catch for upper bound #Need else and catch for upper bound
def skipback(days):
"""
Generate a MongoDB ObjectId for a given number of days ago from today.
Adds 1 extra day to the input to look further back.
"""
adjusted_days = days + 1
date_days_ago = datetime.datetime.now(datetime.UTC) - datetime.timedelta(days=adjusted_days)
timestamp = int(date_days_ago.timestamp())
hex_timestamp = format(timestamp, '08x')
objectid_hex = hex_timestamp + '0000000000000000'
return ObjectId(objectid_hex)
def listCategories(url):
endpoint = url + '/v1/application/categories'
print(ct.colorText("[+] Grabbing All Categories", "cyan"))
payload = {}
headers = {
"X-APIKey": os.getenv('APIKEY')
}
response = requests.request("POST", endpoint, headers=headers, data=payload, verify=False)
parse_text = json.loads(response.text)
policiesnames = []
policyids = []
for index, list in enumerate(parse_text['response']['categories'], start=1):
print(ct.colorText(f"{index}. {list['name']}", "yellow"))
policiesnames.append(list['name'])
policyids.append(list['categoryid'])
choice = input(ct.colorText("Select Policy Group: ", "white"))
choice = int(choice) - 1
return choice, policiesnames, policyids