def keycloak_metadata(self, obj): """User metadata from keycloak backend. Returns a list of strings.""" keycloak_client = KeycloakClient() keycloak_user = keycloak_client.get_user_by_username( obj.requestor.username) if not keycloak_user: return "No Keycloak User Found" full_name = "{} {}".format(keycloak_user["lastName"], keycloak_user["firstName"]) email = keycloak_user["email"] yield [f"Name: {full_name}", f"Email: {email}"] for key, val in keycloak_user["attributes"].items(): if key not in ["joinDate"]: # convert camelcase to separate out words key = re.sub("([A-Z])", " \\1", key).strip().capitalize() yield [(f"{key}: {val}")]
def update_user_metadata_from_keycloak(self, tas_formatted_user): keycloak_client = KeycloakClient() keycloak_user = keycloak_client.get_user_by_username( tas_formatted_user["username"]) if keycloak_user: attrs = keycloak_user["attributes"] tas_formatted_user.update({ "institution": attrs.get("affiliationInstitution", None), "department": attrs.get("affiliationDepartment", None), "title": attrs.get("affiliationTitle", None), "country": attrs.get("country", None), "phone": attrs.get("phone", None), "citizenship": attrs.get("citizenship", None), }) return tas_formatted_user
def lazy_add_user_to_keycloak(self): keycloak_client = KeycloakClient() # check if user exist in keycloak keycloak_user = keycloak_client.get_user_by_username(self.current_user) if keycloak_user: return user = self.get_user(self.current_user) portal_user = self._get_user_from_portal_db(self.current_user) join_date = None if portal_user: join_date = datetime.timestamp(portal_user.date_joined) kwargs = { "first_name": user["firstName"], "last_name": user["lastName"], "email": user["email"], "affiliation_title": user["title"], "affiliation_department": user["department"], "affiliation_institution": user["institution"], "country": user["country"], "citizenship": user["citizenship"], "join_date": join_date, } keycloak_client.create_user(self.current_user, **kwargs)