csharp/Microsoft.Azure.Databricks.Client/GroupsApiClient.cs (78 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using Microsoft.Azure.Databricks.Client.Models;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.Azure.Databricks.Client;
public class GroupsApiClient : ApiClient, IGroupsApi
{
public GroupsApiClient(HttpClient httpClient) : base(httpClient)
{
}
public async Task AddMember(string parentGroupName, PrincipalName principalName, CancellationToken cancellationToken = default)
{
var groupMembership = new GroupMembership
{
UserName = principalName.UserName,
GroupName = principalName.GroupName,
ParentName = parentGroupName
};
await HttpPost(this.HttpClient, $"{ApiVersion}/groups/add-member", groupMembership, cancellationToken).ConfigureAwait(false);
}
public async Task<string> Create(string groupName, CancellationToken cancellationToken = default)
{
var request = new { group_name = groupName };
var response =
await HttpPost<dynamic, JsonObject>(this.HttpClient, $"{ApiVersion}/groups/create", request,
cancellationToken)
.ConfigureAwait(false);
return response["group_name"]!.GetValue<string>();
}
public async Task<IEnumerable<PrincipalName>> ListMembers(string groupName,
CancellationToken cancellationToken = default)
{
var url = $"{ApiVersion}/groups/list-members?group_name={groupName}";
var response = await HttpGet<JsonObject>(this.HttpClient, url, cancellationToken).ConfigureAwait(false);
return response.TryGetPropertyValue("members", out var members)
? members.Deserialize<IEnumerable<PrincipalName>>(Options)
: Enumerable.Empty<PrincipalName>();
}
public async Task<IEnumerable<string>> List(CancellationToken cancellationToken = default)
{
var response = await HttpGet<JsonObject>(this.HttpClient, $"{ApiVersion}/groups/list", cancellationToken)
.ConfigureAwait(false);
return response.TryGetPropertyValue("group_names", out var groupNames)
? groupNames.Deserialize<IEnumerable<string>>(Options)
: Enumerable.Empty<string>();
}
public async Task<IEnumerable<string>> ListParent(PrincipalName principalName,
CancellationToken cancellationToken = default)
{
var url = !string.IsNullOrEmpty(principalName.UserName)
? $"{ApiVersion}/groups/list-parents?user_name={principalName.UserName}"
: $"{ApiVersion}/groups/list-parents?group_name={principalName.GroupName}";
var response = await HttpGet<JsonObject>(this.HttpClient, url, cancellationToken).ConfigureAwait(false);
return response.TryGetPropertyValue("group_names", out var groupNames)
? groupNames.Deserialize<IEnumerable<string>>(Options)
: Enumerable.Empty<string>();
}
public async Task RemoveMember(string parentGroupName, PrincipalName principalName, CancellationToken cancellationToken = default)
{
var groupMembership = new GroupMembership
{
UserName = principalName.UserName,
GroupName = principalName.GroupName,
ParentName = parentGroupName
};
await HttpPost(this.HttpClient, $"{ApiVersion}/groups/remove-member", groupMembership, cancellationToken).ConfigureAwait(false);
}
public async Task Delete(string groupName, CancellationToken cancellationToken = default)
{
var request = new { group_name = groupName };
await HttpPost(this.HttpClient, $"{ApiVersion}/groups/delete", request, cancellationToken).ConfigureAwait(false);
}
}