Include entry type in search results

This commit is contained in:
thePR0M3TH3AN committed 2025-08-02 16:26:52 -04:00
1 parent b4f792ad67
commit dcd095d1af
21 files changed
+106 -63

No files matched your search

+2 -1
View File
@@ -17,6 +17,7 @@ from pydantic import BaseModel
from .manager import PasswordManager
from .pubsub import bus
from .entry_types import EntryType
class VaultExportRequest(BaseModel):
@@ -274,7 +275,7 @@ class EntryService:
def search_entries(
self, query: str, kinds: list[str] | None = None
) -> list[tuple[int, str, str | None, str | None, bool]]:
) -> list[tuple[int, str, str | None, str | None, bool, EntryType]]:
"""Search entries optionally filtering by ``kinds``.
Parameters
+16 -7
View File
@@ -1210,8 +1210,12 @@ class EntryManager:
def search_entries(
self, query: str, kinds: List[str] | None = None
) -> List[Tuple[int, str, Optional[str], Optional[str], bool]]:
"""Return entries matching ``query`` across whitelisted metadata fields."""
) -> List[Tuple[int, str, Optional[str], Optional[str], bool, EntryType]]:
"""Return entries matching ``query`` across whitelisted metadata fields.
Each match is represented as ``(index, label, username, url, archived, etype)``
where ``etype`` is the :class:`EntryType` of the entry.
"""
data = self._load_index()
entries_data = data.get("entries", {})
@@ -1220,19 +1224,23 @@ class EntryManager:
return []
query_lower = query.lower()
results: List[Tuple[int, str, Optional[str], Optional[str], bool]] = []
results: List[
Tuple[int, str, Optional[str], Optional[str], bool, EntryType]
] = []
for idx, entry in sorted(entries_data.items(), key=lambda x: int(x[0])):
etype = entry.get("type", entry.get("kind", EntryType.PASSWORD.value))
etype = EntryType(
entry.get("type", entry.get("kind", EntryType.PASSWORD.value))
)
if kinds is not None and etype not in kinds:
if kinds is not None and etype.value not in kinds:
continue
label = entry.get("label", entry.get("website", ""))
username = (
entry.get("username", "") if etype == EntryType.PASSWORD.value else None
entry.get("username", "") if etype == EntryType.PASSWORD else None
)
url = entry.get("url", "") if etype == EntryType.PASSWORD.value else None
url = entry.get("url", "") if etype == EntryType.PASSWORD else None
tags = entry.get("tags", [])
archived = entry.get("archived", entry.get("blacklisted", False))
@@ -1249,6 +1257,7 @@ class EntryManager:
username if username is not None else None,
url if url is not None else None,
archived,
etype,
)
)
+3 -2
View File
@@ -3379,11 +3379,12 @@ class PasswordManager:
child_fingerprint=child_fp,
)
print(colored("\n[+] Search Results:\n", "green"))
for idx, label, username, _url, _b in results:
for idx, label, username, _url, _b, etype in results:
display_label = label
if username:
display_label += f" ({username})"
print(colored(f"{idx}. {display_label}", "cyan"))
type_name = etype.value.replace("_", " ").title()
print(colored(f"{idx}. {type_name} - {display_label}", "cyan"))
idx_input = input(
"Enter index to view details or press Enter to go back: "