blob: 5f6ab094f407a128aea1b1e17b13310268856a0e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
using ArcaneLibs.Collections;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Spacebar.Sdk.Core;
public class SpacebarClientProviderService(ILogger<SpacebarClientProviderService> logger, IServiceProvider serviceProvider, SpacebarClientWellKnownResolverService clientWellKnownResolver) {
private static readonly SemaphoreCache<UnauthenticatedSpacebarClient> UnauthenticatedClientCache = new();
private static readonly SemaphoreCache<AuthenticatedSpacebarClient> AuthenticatedClientCache = new();
public async Task<UnauthenticatedSpacebarClient> GetUnauthenticatedClientAsync(string serverName) {
return await UnauthenticatedClientCache.GetOrAdd(serverName, async () => {
logger.LogInformation("Creating a new unauthenticated client for {serverName}!", serverName);
var clientLogger = serviceProvider.GetRequiredService<ILogger<UnauthenticatedSpacebarClient>>();
var wellKnown = await clientWellKnownResolver.ResolveClientWellKnown(serverName);
return new UnauthenticatedSpacebarClient(clientLogger, wellKnown);
});
}
public async Task<AuthenticatedSpacebarClient> GetAuthenticatedClientAsync(string serverName, string accessToken) {
return await AuthenticatedClientCache.GetOrAdd(serverName, async () => {
logger.LogInformation("Creating a new authenticated client for {serverName}!", serverName);
var clientLogger = serviceProvider.GetRequiredService<ILogger<AuthenticatedSpacebarClient>>();
var wellKnown = await clientWellKnownResolver.ResolveClientWellKnown(serverName);
return new AuthenticatedSpacebarClient(clientLogger, serviceProvider, wellKnown, accessToken);
});
}
}
|