vaultwarden: reduce lookup returns

This commit is contained in:
Brad Stein 2026-01-24 06:18:35 -03:00
parent d21595aaac
commit dc0fb4eb22

View File

@ -112,29 +112,38 @@ class VaultwardenService:
def _lookup_via(self, base_url: str, email: str) -> VaultwardenLookup | None: def _lookup_via(self, base_url: str, email: str) -> VaultwardenLookup | None:
if not base_url: if not base_url:
return None return None
result: VaultwardenLookup | None = None
try: try:
session = self._admin_session(base_url) session = self._admin_session(base_url)
resp = session.get("/admin/users") resp = session.get("/admin/users")
if resp.status_code == HTTP_TOO_MANY_REQUESTS: if resp.status_code == HTTP_TOO_MANY_REQUESTS:
self._rate_limited_until = time.time() + float(settings.vaultwarden_admin_rate_limit_backoff_sec) self._rate_limited_until = time.time() + float(settings.vaultwarden_admin_rate_limit_backoff_sec)
return VaultwardenLookup(ok=False, status="rate_limited", detail="vaultwarden rate limited") result = VaultwardenLookup(ok=False, status="rate_limited", detail="vaultwarden rate limited")
resp.raise_for_status() else:
users = resp.json() resp.raise_for_status()
if not isinstance(users, list): users = resp.json()
return VaultwardenLookup(ok=False, status="error", detail="unexpected users response") if not isinstance(users, list):
target = email.lower() result = VaultwardenLookup(ok=False, status="error", detail="unexpected users response")
for entry in users: else:
if not isinstance(entry, dict): target = email.lower()
continue found = False
user_email = entry.get("email") for entry in users:
if isinstance(user_email, str) and user_email.lower() == target: if not isinstance(entry, dict):
return VaultwardenLookup(ok=True, status="present", detail="user found") continue
return VaultwardenLookup(ok=True, status="missing", detail="user missing") user_email = entry.get("email")
if isinstance(user_email, str) and user_email.lower() == target:
found = True
break
status = "present" if found else "missing"
detail = "user found" if found else "user missing"
result = VaultwardenLookup(ok=True, status=status, detail=detail)
except Exception as exc: except Exception as exc:
message = str(exc) message = str(exc)
if "rate limited" in message.lower(): if "rate limited" in message.lower():
return VaultwardenLookup(ok=False, status="rate_limited", detail="vaultwarden rate limited") result = VaultwardenLookup(ok=False, status="rate_limited", detail="vaultwarden rate limited")
return VaultwardenLookup(ok=False, status="error", detail=message) else:
result = VaultwardenLookup(ok=False, status="error", detail=message)
return result or VaultwardenLookup(ok=False, status="error", detail="lookup failed")
def invite_user(self, email: str) -> VaultwardenInvite: def invite_user(self, email: str) -> VaultwardenInvite:
email = self._normalize_email(email) email = self._normalize_email(email)