private static Dictionary <string, int> BuildDictionaryOfIdsToIndices(ClaimPermissions permissions) { var permissionsDictionary = new Dictionary <string, int>(); permissions.ResourceAccessRuleSets.ForEachAtIndex((r, i) => permissionsDictionary.Add(r.Id, i)); return(permissionsDictionary); }
public async Task <OpenApiResult> GetClaimPermissionResourceAccessRulesAsync( IOpenApiContext context, string claimPermissionsId) { if (context is null) { throw new ArgumentNullException(nameof(context)); } if (claimPermissionsId is null) { throw new ArgumentNullException(nameof(claimPermissionsId)); } ITenant tenant = await this.marainServicesTenancy.GetRequestingTenantAsync(context.CurrentTenantId).ConfigureAwait(false); IClaimPermissionsStore store = await this.permissionsStoreFactory.GetClaimPermissionsStoreAsync(tenant).ConfigureAwait(false); try { ClaimPermissions claimPermissions = await store.GetAsync(claimPermissionsId).ConfigureAwait(false); return(this.OkResult(claimPermissions.AllResourceAccessRules, "application/json")); } catch (ClaimPermissionsNotFoundException) { return(this.NotFoundResult()); } }
/// <inheritdoc/> public async Task <ClaimPermissions> UpdateAsync(ClaimPermissions claimPermissions) { if (claimPermissions is null) { throw new ArgumentNullException(nameof(claimPermissions)); } if (string.IsNullOrWhiteSpace(claimPermissions.ETag)) { throw new ArgumentException( "There is no ETag on this ClaimPermissions. Updates are not safe without an ETag."); } BlobClient blob = this.Container.GetBlobClient(claimPermissions.Id); string serializedPermissions = JsonConvert.SerializeObject(claimPermissions, this.serializerSettings); Response <BlobContentInfo> response = await blob.UploadAsync( BinaryData.FromString(serializedPermissions), new BlobUploadOptions { Conditions = new BlobRequestConditions { IfMatch = new ETag(claimPermissions.ETag) } }) .ConfigureAwait(false); claimPermissions.ETag = response.Value.ETag.ToString("G"); return(claimPermissions); }
/// <inheritdoc/> public async Task <ClaimPermissions> CreateAsync(ClaimPermissions claimPermissions) { if (claimPermissions is null) { throw new ArgumentNullException(nameof(claimPermissions)); } BlockBlobClient blob = this.Container.GetBlockBlobClient(claimPermissions.Id); string serializedPermissions = JsonConvert.SerializeObject(claimPermissions, this.serializerSettings); try { using var content = BinaryData.FromString(serializedPermissions).ToStream(); Response <BlobContentInfo> response = await blob.UploadAsync( content, new BlobUploadOptions { Conditions = new BlobRequestConditions { IfNoneMatch = ETag.All } }) .ConfigureAwait(false); claimPermissions.ETag = response.Value.ETag.ToString("G"); return(claimPermissions); } catch (RequestFailedException x) { System.Diagnostics.Debug.WriteLine(x.ToString()); throw new InvalidOperationException(); } }
private async Task <ClaimPermissions> DownloadPermissionsAsync(string id) { BlobClient blob = this.Container.GetBlobClient(id); Response <BlobDownloadResult> response = await blob.DownloadContentAsync().ConfigureAwait(false); // Note: although BlobDownloadResult supports direct deserialization from JSON, using System.Text.Json // (meaning it can work directly with UTF-8 content, avoiding the conversion to UTF-16 we're doing // here) we currently depend on the JSON.NET serialization settings mechanism, so we have to use // this more inefficient route for now. string permissionsJson = response.Value.Content.ToString(); ClaimPermissions permissions = JsonConvert.DeserializeObject <ClaimPermissions>(permissionsJson, this.serializerSettings); permissions.ETag = response.Value.Details.ETag.ToString("G"); return(permissions); }
public async Task <OpenApiResult> CreateClaimPermissionsAsync( IOpenApiContext context, ClaimPermissions body) { if (context is null) { throw new ArgumentNullException(nameof(context)); } if (body is null) { throw new ArgumentNullException(nameof(body)); } ITenant tenant = await this.marainServicesTenancy.GetRequestingTenantAsync(context.CurrentTenantId).ConfigureAwait(false); (bool allRulesExist, OpenApiResult failureResult) = await this.CheckRuleSetsExist(tenant, body.ResourceAccessRuleSets); if (!allRulesExist) { return(failureResult); } IClaimPermissionsStore claimPermissionsStore = await this.permissionsStoreFactory.GetClaimPermissionsStoreAsync(tenant).ConfigureAwait(false); try { ClaimPermissions result = await claimPermissionsStore.CreateAsync(body).ConfigureAwait(false); return(this.OkResult(result, "application/json")); } catch (InvalidOperationException) { var response = new JObject { ["status"] = 400, ["detail"] = "A ClaimPermissions with this ID has already been created", }; return(new OpenApiResult { StatusCode = 400, Results = { { "application/json", response } }, }); } }
/// <inheritdoc/> public async Task <ClaimPermissions> GetAsync(string id) { if (id is null) { throw new ArgumentNullException(nameof(id)); } try { ClaimPermissions permissions = await this.DownloadPermissionsAsync(id); return(await this.UpdateRuleSetsAsync(permissions).ConfigureAwait(false)); } catch (Exception ex) when(ex is not ResourceAccessRuleSetNotFoundException) { throw new ClaimPermissionsNotFoundException(id, ex); } }
/// <inheritdoc/> public async Task <(int HttpStatusCode, ClaimPermissions Result)> CreateClaimPermissionsAsync(ClaimPermissions newClaimPermissions) { this.ToClientLibraryType(newClaimPermissions, out Client.Models.CreateClaimPermissionsRequest input); HttpOperationResponse <object> result = await this.claimsServiceClient.CreateClaimPermissionsWithHttpMessagesAsync( this.testTenants.TransientClientTenantId, input); return(await GetStatusAndConvertedBody(result)); }
private async Task <ClaimPermissions> UpdateRuleSetsAsync(ClaimPermissions permissions) { IEnumerable <ClaimPermissions> result = await this.UpdateRuleSetsAsync(new[] { permissions }, 1).ConfigureAwait(false); return(result.First()); }
/// <inheritdoc/> public async Task <(int HttpStatusCode, ClaimPermissions Result)> CreateClaimPermissionsAsync(ClaimPermissions newClaimPermissions) { OpenApiResult result = await this.claimsService.CreateClaimPermissionsAsync(this.MakeOpenApiContext(), newClaimPermissions); result.Results.TryGetValue("application/json", out object claimPermissions); return(result.StatusCode, claimPermissions as ClaimPermissions); }