provisioning/service/src/Manager/EnrollmentGroupManager.cs (147 lines of code) (raw):

// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Microsoft.Azure.Devices.Common; using Microsoft.Azure.Devices.Common.Service.Auth; using Newtonsoft.Json; namespace Microsoft.Azure.Devices.Provisioning.Service { internal static class EnrollmentGroupManager { private const string ServiceName = "enrollmentGroups"; private const string EnrollmentIdUriFormat = "{0}/{1}?{2}"; private const string EnrollmentAttestationName = "attestationmechanism"; private const string EnrollmentAttestationUriFormat = "{0}/{1}/{2}?{3}"; internal static async Task<EnrollmentGroup> CreateOrUpdateAsync( IContractApiHttp contractApiHttp, EnrollmentGroup enrollmentGroup, CancellationToken cancellationToken) { if (enrollmentGroup == null) { throw new ArgumentNullException(nameof(enrollmentGroup)); } ContractApiResponse contractApiResponse = await contractApiHttp .RequestAsync( HttpMethod.Put, GetEnrollmentUri(enrollmentGroup.EnrollmentGroupId), null, JsonConvert.SerializeObject(enrollmentGroup, JsonSerializerSettingsInitializer.GetJsonSerializerSettings()), enrollmentGroup.ETag, cancellationToken) .ConfigureAwait(false); if (contractApiResponse.Body == null) { throw new ProvisioningServiceClientHttpException(contractApiResponse, true); } return JsonConvert.DeserializeObject<EnrollmentGroup>(contractApiResponse.Body, JsonSerializerSettingsInitializer.GetJsonSerializerSettings()); } internal static async Task<EnrollmentGroup> GetAsync( IContractApiHttp contractApiHttp, string enrollmentGroupId, CancellationToken cancellationToken) { ContractApiResponse contractApiResponse = await contractApiHttp .RequestAsync( HttpMethod.Get, GetEnrollmentUri(enrollmentGroupId), null, null, null, cancellationToken) .ConfigureAwait(false); if (contractApiResponse.Body == null) { throw new ProvisioningServiceClientHttpException(contractApiResponse, true); } return JsonConvert.DeserializeObject<EnrollmentGroup>(contractApiResponse.Body, JsonSerializerSettingsInitializer.GetJsonSerializerSettings()); } internal static async Task DeleteAsync( IContractApiHttp contractApiHttp, EnrollmentGroup enrollmentGroup, CancellationToken cancellationToken) { if (enrollmentGroup == null) { throw new ArgumentNullException(nameof(enrollmentGroup)); } await contractApiHttp .RequestAsync( HttpMethod.Delete, GetEnrollmentUri(enrollmentGroup.EnrollmentGroupId), null, null, enrollmentGroup.ETag, cancellationToken) .ConfigureAwait(false); } internal static async Task DeleteAsync( IContractApiHttp contractApiHttp, string enrollmentGroupId, CancellationToken cancellationToken, string eTag = null) { await contractApiHttp .RequestAsync( HttpMethod.Delete, GetEnrollmentUri(enrollmentGroupId), null, null, eTag, cancellationToken) .ConfigureAwait(false); } internal static Query CreateQuery( ServiceConnectionString provisioningConnectionString, QuerySpecification querySpecification, HttpTransportSettings httpTransportSettings, CancellationToken cancellationToken, int pageSize = 0) { if (querySpecification == null) { throw new ArgumentNullException(nameof(querySpecification)); } if (pageSize < 0) { throw new ArgumentException($"{nameof(pageSize)} cannot be negative"); } return new Query(provisioningConnectionString, ServiceName, querySpecification, httpTransportSettings, pageSize, cancellationToken); } private static Uri GetEnrollmentUri(string enrollmentGroupId) { enrollmentGroupId = WebUtility.UrlEncode(enrollmentGroupId); return new Uri(EnrollmentIdUriFormat.FormatInvariant(ServiceName, enrollmentGroupId, SdkUtils.ApiVersionQueryString), UriKind.Relative); } internal static async Task<AttestationMechanism> GetEnrollmentAttestationAsync( IContractApiHttp contractApiHttp, string enrollmentGroupId, CancellationToken cancellationToken) { ContractApiResponse contractApiResponse = await contractApiHttp .RequestAsync( HttpMethod.Post, GetEnrollmentAttestationUri(enrollmentGroupId), null, null, null, cancellationToken) .ConfigureAwait(false); if (contractApiResponse.Body == null) { throw new ProvisioningServiceClientHttpException(contractApiResponse, true); } return JsonConvert.DeserializeObject<AttestationMechanism>(contractApiResponse.Body, JsonSerializerSettingsInitializer.GetJsonSerializerSettings()); } private static Uri GetEnrollmentAttestationUri(string enrollmentGroupId) { enrollmentGroupId = WebUtility.UrlEncode(enrollmentGroupId); return new Uri( EnrollmentAttestationUriFormat.FormatInvariant(ServiceName, enrollmentGroupId, EnrollmentAttestationName, SdkUtils.ApiVersionQueryString), UriKind.Relative); } } }