azure-devops/azext_devops/dev/team/user.py (69 lines of code) (raw):

# -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from knack.util import CLIError from azext_devops.devops_sdk.v5_0.member_entitlement_management.models import (AccessLevel, GraphUser, JsonPatchOperation) from azext_devops.dev.common.services import (get_member_entitlement_management_client, resolve_instance) from azext_devops.dev.common.identities import resolve_identity_as_id def get_user_entitlements(top=100, skip=None, organization=None, detect=None): """List users in an organization [except for users which are added via AAD groups]. :param int top: Maximum number of users to return. Max value is 10000. :param int skip: Offset: Number of records to skip. :rtype: [UserEntitlement] """ organization = resolve_instance(detect=detect, organization=organization) client = get_member_entitlement_management_client(organization) user_entitlements = client.get_user_entitlements(top=top, skip=skip) return user_entitlements def get_user_entitlement(user, organization=None, detect=None): """Show user details. :param user: Email ID or ID of the user. :type user: str :rtype: UserEntitlement """ organization = resolve_instance(detect=detect, organization=organization) if '@' in user: user = resolve_identity_as_id(user, organization) client = get_member_entitlement_management_client(organization) user_entitlement_details = client.get_user_entitlement(user_id=user) return user_entitlement_details def delete_user_entitlement(user, organization=None, detect=None): """Remove user from an organization. :param user: Email ID or ID of the user. :type user: str """ organization = resolve_instance(detect=detect, organization=organization) if '@' in user: user = resolve_identity_as_id(user, organization) client = get_member_entitlement_management_client(organization) delete_user_entitlement_details = client.delete_user_entitlement(user_id=user) return delete_user_entitlement_details def update_user_entitlement(user, license_type, organization=None, detect=None): """Update license type for a user. :param user: Email ID or ID of the user. :type user: str :param license_type: License type for the user. :type license_type: str :rtype: UserEntitlementsPatchResponse """ patch_document = [] value = {} value['accountLicenseType'] = license_type patch_document.append(_create_patch_operation('replace', '/accessLevel', value)) organization = resolve_instance(detect=detect, organization=organization) if '@' in user: user = resolve_identity_as_id(user, organization) client = get_member_entitlement_management_client(organization) user_entitlement_update = client.update_user_entitlement(document=patch_document, user_id=user) if user_entitlement_update.is_success is False and \ user_entitlement_update.operation_results[0].errors[0] is not None: raise CLIError(user_entitlement_update.operation_results[0].errors[0]['value']) return user_entitlement_update.user_entitlement def add_user_entitlement(email_id, license_type, send_email_invite=None, organization=None, detect=None): """Add user. :param email_id: Email ID of the user. :type email_id: str :param license_type: License type for the user. :type license_type: str :rtype: UserEntitlementsPatchResponse """ if send_email_invite is None: send_email_invite = True do_not_send_invite = not send_email_invite organization = resolve_instance(detect=detect, organization=organization) client = get_member_entitlement_management_client(organization) user_access_level = AccessLevel() user_access_level.account_license_type = license_type graph_user = GraphUser() graph_user.subject_kind = 'user' graph_user.principal_name = email_id value = {} value['accessLevel'] = user_access_level value['extensions'] = [] value['projectEntitlements'] = [] value['user'] = graph_user patch_document = [] patch_document.append(_create_patch_operation('add', '', value)) user_entitlement = client.update_user_entitlements(document=patch_document, do_not_send_invite_for_new_users=do_not_send_invite) if user_entitlement.have_results_succeeded is False and user_entitlement.results[0].errors[0] is not None: raise CLIError(user_entitlement.results[0].errors[0]['value']) return user_entitlement.results[0].result def _create_patch_operation(op, path, value): patch_operation = JsonPatchOperation() patch_operation.op = op patch_operation.path = path patch_operation.value = value return patch_operation