def update_user()

in django_airavata/apps/auth/iam_admin_client.py [0:0]


def update_user(username, first_name=None, last_name=None, email=None):
    # fetch user representation
    authz_token = utils.get_service_account_authz_token()
    headers = {'Authorization': f'Bearer {authz_token.accessToken}'}
    parsed = urlparse(settings.KEYCLOAK_AUTHORIZE_URL)
    r = requests.get(f"{parsed.scheme}://{parsed.netloc}/auth/admin/realms/{settings.GATEWAY_ID}/users",
                     params={'username': username},
                     headers=headers)
    r.raise_for_status()
    user_list = r.json()
    user = None
    # The users search finds partial matches. Loop to find the exact match.
    for u in user_list:
        if u['username'] == username:
            user = u
            break
    if user is None:
        raise Exception(f"Could not find user {username}")

    # update user
    if first_name is not None:
        user['firstName'] = first_name
    if last_name is not None:
        user['lastName'] = last_name
    if email is not None:
        user['email'] = email
    r = requests.put(f"{parsed.scheme}://{parsed.netloc}/auth/admin/realms/{settings.GATEWAY_ID}/users/{user['id']}",
                     json=user,
                     headers=headers)
    r.raise_for_status()