mirror of
https://github.com/overcuriousity/trace.git
synced 2025-12-20 13:02:21 +00:00
bug fixes
This commit is contained in:
11
trace/cli.py
11
trace/cli.py
@@ -42,11 +42,14 @@ def quick_add_note(content: str):
|
|||||||
signature = None
|
signature = None
|
||||||
if settings.get("pgp_enabled", True):
|
if settings.get("pgp_enabled", True):
|
||||||
gpg_key_id = settings.get("gpg_key_id", None)
|
gpg_key_id = settings.get("gpg_key_id", None)
|
||||||
signature = Crypto.sign_content(f"Hash: {note.content_hash}\nContent: {note.content}", key_id=gpg_key_id)
|
if gpg_key_id:
|
||||||
if signature:
|
signature = Crypto.sign_content(f"Hash: {note.content_hash}\nContent: {note.content}", key_id=gpg_key_id)
|
||||||
note.signature = signature
|
if signature:
|
||||||
|
note.signature = signature
|
||||||
|
else:
|
||||||
|
print("Warning: GPG signature failed (GPG not found or no key). Note saved without signature.")
|
||||||
else:
|
else:
|
||||||
print("Warning: GPG signature failed (GPG not found or no key). Note saved without signature.")
|
print("Warning: No GPG key ID configured. Note saved without signature.")
|
||||||
|
|
||||||
# Attach to evidence or case
|
# Attach to evidence or case
|
||||||
if target_evidence:
|
if target_evidence:
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ class Storage:
|
|||||||
|
|
||||||
def _create_demo_case(self):
|
def _create_demo_case(self):
|
||||||
"""Create a demo case with evidence showcasing all features"""
|
"""Create a demo case with evidence showcasing all features"""
|
||||||
# Create demo case
|
|
||||||
demo_case = Case(
|
demo_case = Case(
|
||||||
case_number="DEMO-2024-001",
|
case_number="DEMO-2024-001",
|
||||||
name="Sample Investigation",
|
name="Sample Investigation",
|
||||||
|
|||||||
34
trace/tui.py
34
trace/tui.py
@@ -1391,21 +1391,21 @@ class TUI:
|
|||||||
case_notes = self.active_case.notes
|
case_notes = self.active_case.notes
|
||||||
filtered = self._get_filtered_list(self.active_case.evidence, "name", "description")
|
filtered = self._get_filtered_list(self.active_case.evidence, "name", "description")
|
||||||
|
|
||||||
# Only allow setting active for evidence, not notes
|
# Evidence is displayed first (indices 0 to len(evidence)-1)
|
||||||
if self.selected_index < len(case_notes):
|
# Case notes are displayed second (indices len(evidence) to len(evidence)+len(notes)-1)
|
||||||
|
if self.selected_index < len(filtered):
|
||||||
|
# Selected evidence - set it as active
|
||||||
|
ev = filtered[self.selected_index]
|
||||||
|
self.state_manager.set_active(case_id=self.active_case.case_id, evidence_id=ev.evidence_id)
|
||||||
|
self.global_active_case_id = self.active_case.case_id
|
||||||
|
self.global_active_evidence_id = ev.evidence_id
|
||||||
|
self.show_message(f"Active: {ev.name}")
|
||||||
|
elif case_notes and self.selected_index - len(filtered) < len(case_notes):
|
||||||
# Selected a note - set case as active (not evidence)
|
# Selected a note - set case as active (not evidence)
|
||||||
self.state_manager.set_active(case_id=self.active_case.case_id, evidence_id=None)
|
self.state_manager.set_active(case_id=self.active_case.case_id, evidence_id=None)
|
||||||
self.global_active_case_id = self.active_case.case_id
|
self.global_active_case_id = self.active_case.case_id
|
||||||
self.global_active_evidence_id = None
|
self.global_active_evidence_id = None
|
||||||
self.show_message(f"Active: Case {self.active_case.case_number}")
|
self.show_message(f"Active: Case {self.active_case.case_number}")
|
||||||
elif filtered and self.selected_index - len(case_notes) < len(filtered):
|
|
||||||
# Selected evidence - set it as active
|
|
||||||
evidence_idx = self.selected_index - len(case_notes)
|
|
||||||
ev = filtered[evidence_idx]
|
|
||||||
self.state_manager.set_active(case_id=self.active_case.case_id, evidence_id=ev.evidence_id)
|
|
||||||
self.global_active_case_id = self.active_case.case_id
|
|
||||||
self.global_active_evidence_id = ev.evidence_id
|
|
||||||
self.show_message(f"Active: {ev.name}")
|
|
||||||
else:
|
else:
|
||||||
# Nothing selected - set case as active
|
# Nothing selected - set case as active
|
||||||
self.state_manager.set_active(case_id=self.active_case.case_id, evidence_id=None)
|
self.state_manager.set_active(case_id=self.active_case.case_id, evidence_id=None)
|
||||||
@@ -1833,7 +1833,7 @@ class TUI:
|
|||||||
x = (self.width - w) // 2
|
x = (self.width - w) // 2
|
||||||
|
|
||||||
win = curses.newwin(h, w, y, x)
|
win = curses.newwin(h, w, y, x)
|
||||||
win.keypad(1) # Enable keypad mode for arrow keys
|
win.keypad(True) # Enable keypad mode for arrow keys
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
win.clear()
|
win.clear()
|
||||||
@@ -1930,7 +1930,7 @@ class TUI:
|
|||||||
x = (self.width - w) // 2
|
x = (self.width - w) // 2
|
||||||
|
|
||||||
win = curses.newwin(h, w, y, x)
|
win = curses.newwin(h, w, y, x)
|
||||||
win.keypad(1) # Enable keypad mode for arrow keys
|
win.keypad(True) # Enable keypad mode for arrow keys
|
||||||
scroll_offset = 0
|
scroll_offset = 0
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@@ -2073,12 +2073,12 @@ class TUI:
|
|||||||
|
|
||||||
if self.current_view == "evidence_detail" and self.active_evidence:
|
if self.current_view == "evidence_detail" and self.active_evidence:
|
||||||
context_title = f"Add Note → Evidence: {self.active_evidence.name}"
|
context_title = f"Add Note → Evidence: {self.active_evidence.name}"
|
||||||
context_prompt = f"Case: {self.active_case.case_number if self.active_case else '?'}\nEvidence: {self.active_evidence.name}\n\nNote will be added to this evidence."
|
context_prompt = f"Case: {self.active_case.case_number if self.active_case else '?'}\nEvidence: {self.active_evidence.name}\n"
|
||||||
recent_notes = self.active_evidence.notes[-5:] if len(self.active_evidence.notes) > 0 else []
|
recent_notes = self.active_evidence.notes[-5:] if len(self.active_evidence.notes) > 0 else []
|
||||||
target_evidence = self.active_evidence
|
target_evidence = self.active_evidence
|
||||||
elif self.current_view == "case_detail" and self.active_case:
|
elif self.current_view == "case_detail" and self.active_case:
|
||||||
context_title = f"Add Note → Case: {self.active_case.case_number}"
|
context_title = f"Add Note → Case: {self.active_case.case_number}"
|
||||||
context_prompt = f"Case: {self.active_case.case_number}\n{self.active_case.name if self.active_case.name else ''}\n\nNote will be added to case notes."
|
context_prompt = f"Case: {self.active_case.case_number}\n{self.active_case.name if self.active_case.name else ''}\nNote will be added to case notes."
|
||||||
recent_notes = self.active_case.notes[-5:] if len(self.active_case.notes) > 0 else []
|
recent_notes = self.active_case.notes[-5:] if len(self.active_case.notes) > 0 else []
|
||||||
target_case = self.active_case
|
target_case = self.active_case
|
||||||
elif self.current_view == "case_list":
|
elif self.current_view == "case_list":
|
||||||
@@ -2091,14 +2091,14 @@ class TUI:
|
|||||||
for ev in active_case.evidence:
|
for ev in active_case.evidence:
|
||||||
if ev.evidence_id == self.global_active_evidence_id:
|
if ev.evidence_id == self.global_active_evidence_id:
|
||||||
context_title = f"Add Note → Evidence: {ev.name}"
|
context_title = f"Add Note → Evidence: {ev.name}"
|
||||||
context_prompt = f"Case: {active_case.case_number}\nEvidence: {ev.name}\n\nNote will be added to this evidence."
|
context_prompt = f"Case: {active_case.case_number}\nEvidence: {ev.name}\n"
|
||||||
recent_notes = ev.notes[-5:] if len(ev.notes) > 0 else []
|
recent_notes = ev.notes[-5:] if len(ev.notes) > 0 else []
|
||||||
target_case = active_case
|
target_case = active_case
|
||||||
target_evidence = ev
|
target_evidence = ev
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
context_title = f"Add Note → Case: {active_case.case_number}"
|
context_title = f"Add Note → Case: {active_case.case_number}"
|
||||||
context_prompt = f"Case: {active_case.case_number}\n\nNote will be added to case notes."
|
context_prompt = f"Case: {active_case.case_number}\nNote will be added to case notes."
|
||||||
recent_notes = active_case.notes[-5:] if len(active_case.notes) > 0 else []
|
recent_notes = active_case.notes[-5:] if len(active_case.notes) > 0 else []
|
||||||
target_case = active_case
|
target_case = active_case
|
||||||
|
|
||||||
@@ -2131,7 +2131,7 @@ class TUI:
|
|||||||
|
|
||||||
signed = False
|
signed = False
|
||||||
if pgp_enabled:
|
if pgp_enabled:
|
||||||
sig = Crypto.sign_content(f"Hash: {note.content_hash}\nContent: {note.content}", key_id=gpg_key_id)
|
sig = Crypto.sign_content(f"Hash: {note.content_hash}\nContent: {note.content}", key_id=gpg_key_id or "")
|
||||||
if sig:
|
if sig:
|
||||||
note.signature = sig
|
note.signature = sig
|
||||||
signed = True
|
signed = True
|
||||||
|
|||||||
Reference in New Issue
Block a user