mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-11-10 23:00:44 +00:00
Include entry type in search results
This commit is contained in:
1 parent
b4f792ad67
commit
dcd095d1af
21 files changed
+106
-63
No files matched your search
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -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: "
|
||||
|
||||
Reference in new issue
Block a user