vaultwarden: reduce lookup returns
This commit is contained in:
parent
d21595aaac
commit
dc0fb4eb22
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user