Skip to content

Commit ec6459e

Browse files
feature(#20): this commit introduces an endpoint to revoke a client's audience access
1 parent 0c1f7eb commit ec6459e

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

Applications/Backend/Source/HttpsRichardy.Federation.WebApi/Controllers/ClientsController.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,30 @@ public async Task<IActionResult> AssignAudienceAsync([FromRoute] string id, [Fro
159159

160160
{ IsFailure: true } when result.Error == ClientErrors.ClientAlreadyHasAudience =>
161161
StatusCode(StatusCodes.Status409Conflict, result.Error),
162+
163+
{ IsFailure: true } when result.Error == ClientErrors.InvalidAudienceValue =>
164+
StatusCode(StatusCodes.Status400BadRequest, result.Error),
165+
};
166+
}
167+
168+
[HttpDelete("{id}/audiences/{audience}")]
169+
[Stability(Stability.Stable)]
170+
[Authorize(Roles = Permissions.EditClient)]
171+
public async Task<IActionResult> RevokeAudienceAsync([FromRoute] string id, [FromRoute] string audience, CancellationToken cancellation)
172+
{
173+
var request = new RevokeClientAudienceScheme { Id = id, Audience = audience };
174+
var result = await dispatcher.DispatchAsync(request, cancellation);
175+
176+
return result switch
177+
{
178+
{ IsSuccess: true } when result.Data is not null =>
179+
StatusCode(StatusCodes.Status200OK, result.Data),
180+
181+
{ IsFailure: true } when result.Error == ClientErrors.ClientDoesNotExist =>
182+
StatusCode(StatusCodes.Status404NotFound, result.Error),
183+
184+
{ IsFailure: true } when result.Error == ClientErrors.AudienceNotAssigned =>
185+
StatusCode(StatusCodes.Status409Conflict, result.Error)
162186
};
163187
}
164188
}

Applications/Backend/Source/HttpsRichardy.Federation.WebApi/Conventions/ClientsConventions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,11 @@ public static void RevokePermissionAsync(string id, string permissionId, Cancell
4646
[ProducesResponseType(typeof(Error), StatusCodes.Status404NotFound)]
4747
[ProducesResponseType(typeof(Error), StatusCodes.Status409Conflict)]
4848
public static void AssignAudienceAsync(string id, AssignClientAudienceScheme request, CancellationToken cancellation) { }
49+
50+
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
51+
[ProducesResponseType(typeof(IReadOnlyCollection<string>), StatusCodes.Status200OK)]
52+
[ProducesResponseType(typeof(Error), StatusCodes.Status400BadRequest)]
53+
[ProducesResponseType(typeof(Error), StatusCodes.Status404NotFound)]
54+
[ProducesResponseType(typeof(Error), StatusCodes.Status409Conflict)]
55+
public static void RevokeAudienceAsync(string id, string audience, CancellationToken cancellation) { }
4956
}

0 commit comments

Comments
 (0)