diff --git a/scripts/vaultwarden_cred_sync.py b/scripts/vaultwarden_cred_sync.py index 3850249..5dbf22f 100644 --- a/scripts/vaultwarden_cred_sync.py +++ b/scripts/vaultwarden_cred_sync.py @@ -125,15 +125,25 @@ def main() -> int: skipped += 1 continue - current_status = _extract_attr(user.get("attributes"), VAULTWARDEN_STATUS_ATTR) - email = _vaultwarden_email_for_user(user) + # Fetch the full user payload so we can reliably read attributes (and skip re-invites). + user_id = (user.get("id") if isinstance(user.get("id"), str) else "") or "" + user_id = user_id.strip() + full_user = user + if user_id: + try: + full_user = admin_client().get_user(user_id) + except Exception: + full_user = user + + current_status = _extract_attr(full_user.get("attributes"), VAULTWARDEN_STATUS_ATTR) + email = _vaultwarden_email_for_user(full_user) if not email: print(f"skip {username}: missing email", file=sys.stderr) skipped += 1 continue try: - _set_user_attribute_if_missing(username, user, VAULTWARDEN_EMAIL_ATTR, email) + _set_user_attribute_if_missing(username, full_user, VAULTWARDEN_EMAIL_ATTR, email) except Exception: pass