fix(portal): persist mailu attributes

This commit is contained in:
Brad Stein 2026-01-03 03:11:52 -03:00
parent 13b0099c29
commit 71678a4819
2 changed files with 15 additions and 7 deletions

View File

@ -155,8 +155,9 @@ class KeycloakAdminClient:
if not isinstance(attrs, dict):
attrs = {}
attrs[key] = [value]
full["attributes"] = attrs
self.update_user(user_id, full)
# Keycloak rejects PUTs that include read-only fields from the GET payload (400 Bad Request).
# Update only the attributes we intend to change.
self.update_user(user_id, {"attributes": attrs})
def get_group_id(self, group_name: str) -> str | None:
cached = self._group_id_cache.get(group_name)

View File

@ -129,13 +129,20 @@ def provision_access_request(request_code: str) -> ProvisionResult:
try:
full = admin_client().get_user(user_id)
attrs = full.get("attributes") or {}
mailu_from_attr: str | None = None
if isinstance(attrs, dict):
raw_mailu = attrs.get(MAILU_EMAIL_ATTR)
if isinstance(raw_mailu, list) and raw_mailu and isinstance(raw_mailu[0], str):
mailu_email = raw_mailu[0]
elif isinstance(raw_mailu, str) and raw_mailu:
mailu_email = raw_mailu
if not mailu_email:
if isinstance(raw_mailu, list):
for item in raw_mailu:
if isinstance(item, str) and item.strip():
mailu_from_attr = item.strip()
break
elif isinstance(raw_mailu, str) and raw_mailu.strip():
mailu_from_attr = raw_mailu.strip()
if mailu_from_attr:
mailu_email = mailu_from_attr
else:
mailu_email = f"{username}@{settings.MAILU_DOMAIN}"
admin_client().set_user_attribute(username, MAILU_EMAIL_ATTR, mailu_email)
except Exception: