Matrix mxid lookup: paginate Cloudron users API (25/page) — was missing page 2+
This commit is contained in:
1 parent
f86ead8653
commit
29823e87d5
1 file changed
+19
-8
+19
-8
@@ -902,14 +902,25 @@ async def matrix_member_mxids(client: httpx.AsyncClient):
|
||||
"""
|
||||
extra = [m.strip() for m in os.environ.get("MATRIX_EXTRA_MXIDS", "").split(",") if m.strip()]
|
||||
seen: set[str] = set()
|
||||
r = await client.get(
|
||||
f"{CLOUDRON_API}/api/v1/users",
|
||||
headers=cloudron_headers(),
|
||||
)
|
||||
users = (
|
||||
{u["email"].lower(): u["username"] for u in r.json().get("users", [])}
|
||||
if r.status_code == 200 else {}
|
||||
)
|
||||
# Cloudron paginates /api/v1/users at 25/page — walk every page.
|
||||
users: dict[str, str] = {}
|
||||
page = 1
|
||||
while True:
|
||||
r = await client.get(
|
||||
f"{CLOUDRON_API}/api/v1/users",
|
||||
params={"page": page},
|
||||
headers=cloudron_headers(),
|
||||
)
|
||||
if r.status_code != 200:
|
||||
logger.warning("Cloudron users lookup page %s failed: %s", page, r.status_code)
|
||||
break
|
||||
batch = r.json().get("users", [])
|
||||
for u in batch:
|
||||
if u.get("email") and u.get("username"):
|
||||
users[u["email"].lower()] = u["username"]
|
||||
if len(batch) < 25:
|
||||
break
|
||||
page += 1
|
||||
for email in await get_active_member_emails():
|
||||
username = users.get(email.lower())
|
||||
if username:
|
||||
|
||||
Reference in new issue
Block a user