fix(portal): persist mailu attributes
This commit is contained in:
parent
13b0099c29
commit
71678a4819
@ -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)
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user