Skip to content

Commit 7e7b4f6

Browse files
feature(#20): this commit introduces a handler to revoke a client's audience
1 parent 49b0c92 commit 7e7b4f6

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
namespace HttpsRichardy.Federation.Application.Handlers.Client;
2+
3+
public sealed class RevokeAudienceFromClientHandler(IClientCollection clientCollection) :
4+
IDispatchHandler<RevokeClientAudienceScheme, Result<IReadOnlyCollection<string>>>
5+
{
6+
public async Task<Result<IReadOnlyCollection<string>>> HandleAsync(
7+
RevokeClientAudienceScheme parameters, CancellationToken cancellation = default)
8+
{
9+
var filters = ClientFilters.WithSpecifications()
10+
.WithIdentifier(parameters.Id)
11+
.Build();
12+
13+
var clients = await clientCollection.GetClientsAsync(filters, cancellation);
14+
var client = clients.FirstOrDefault();
15+
16+
if (client is null)
17+
{
18+
return Result<IReadOnlyCollection<string>>.Failure(ClientErrors.ClientDoesNotExist);
19+
}
20+
21+
var audienceToRemove = client.Audiences.FirstOrDefault(current => current.Value == parameters.Audience);
22+
if (audienceToRemove is null)
23+
{
24+
return Result<IReadOnlyCollection<string>>.Failure(ClientErrors.AudienceNotAssigned);
25+
}
26+
27+
client.Audiences.Remove(audienceToRemove);
28+
29+
await clientCollection.UpdateAsync(client, cancellation);
30+
31+
return Result<IReadOnlyCollection<string>>.Success([.. client.Audiences.Select(current => current.Value)]);
32+
}
33+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace HttpsRichardy.Federation.Application.Payloads.Client;
2+
3+
public sealed record RevokeClientAudienceScheme :
4+
IDispatchable<Result<IReadOnlyCollection<string>>>
5+
{
6+
[JsonIgnore]
7+
public string Id { get; init; } = default!;
8+
9+
[JsonIgnore]
10+
public string Audience { get; init; } = default!;
11+
}

0 commit comments

Comments
 (0)