Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions nettacker/core/lib/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,13 @@ def process_conditions(
):
# Remove sensitive keys from headers before submitting to DB
event = remove_sensitive_header_keys(event)
if "stop_at_first_success" in event["response"]:
event_name = event["response"]["stop_at_first_success"]
existing = find_temp_events(
target, module_name, scan_id, event_name, port=event.get("ports", "")
)
if existing:
return False
if "save_to_temp_events_only" in event.get("response", ""):
submit_temp_logs_to_db(
{
Expand All @@ -135,6 +142,21 @@ def process_conditions(
"data": response,
}
)
if event["response"]["conditions_results"] and "stop_at_first_success" in event.get(
"response", ""
):
submit_temp_logs_to_db(
{
"date": datetime.now(),
"target": target,
"module_name": module_name,
"scan_id": scan_id,
"event_name": event["response"]["stop_at_first_success"],
"port": event.get("ports", ""),
"event": event,
"data": response,
}
)
if event["response"]["conditions_results"] and "save_to_temp_events_only" not in event.get(
"response", ""
):
Expand Down Expand Up @@ -270,6 +292,13 @@ def run(
"""Engine entry point."""
backup_method = copy.deepcopy(sub_step["method"])
backup_response = copy.deepcopy(sub_step["response"])
if "stop_at_first_success" in backup_response:
event_name = backup_response["stop_at_first_success"]
existing = find_temp_events(
target, module_name, scan_id, event_name, port=sub_step.get("ports", "")
)
if existing:
return False
del sub_step["method"]
del sub_step["response"]

Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
48 changes: 27 additions & 21 deletions nettacker/database/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ def submit_temp_logs_to_db(log):
return False


def find_temp_events(target, module_name, scan_id, event_name):
def find_temp_events(target, module_name, scan_id, event_name, port=None):
"""
select all events by scan_unique id, target, module_name

Expand All @@ -420,16 +420,24 @@ def find_temp_events(target, module_name, scan_id, event_name):
if isinstance(session, tuple):
connection, cursor = session
try:
cursor.execute(
"""
SELECT event
FROM temp_events
WHERE target = ? AND module_name = ? AND scan_unique_id = ? AND event_name = ?
LIMIT 1
""",
(target, module_name, scan_id, event_name),
)

if port is not None:
cursor.execute(
"""
SELECT event FROM temp_events
WHERE target = ? AND module_name = ? AND scan_unique_id = ? AND event_name = ? AND port = ?
LIMIT 1
""",
(target, module_name, scan_id, event_name, json.dumps(port)),
)
else:
cursor.execute(
"""
SELECT event FROM temp_events
WHERE target = ? AND module_name = ? AND scan_unique_id = ? AND event_name = ?
LIMIT 1
""",
(target, module_name, scan_id, event_name),
)
row = cursor.fetchone()
if row:
return row[0]
Expand All @@ -444,17 +452,15 @@ def find_temp_events(target, module_name, scan_id, event_name):
except Exception:
pass
else:
result = (
session.query(TempEvents)
.filter(
TempEvents.target == target,
TempEvents.module_name == module_name,
TempEvents.scan_unique_id == scan_id,
TempEvents.event_name == event_name,
)
.first()
query = session.query(TempEvents).filter(
TempEvents.target == target,
TempEvents.module_name == module_name,
TempEvents.scan_unique_id == scan_id,
TempEvents.event_name == event_name,
)

if port is not None:
query = query.filter(TempEvents.port == json.dumps(port))
result = query.first()
return result.event if result else []


Expand Down
Loading