using System.Collections.Concurrent; using System.IdentityModel.Tokens.Jwt; using Microsoft.IdentityModel.Protocols; using Microsoft.IdentityModel.Protocols.OpenIdConnect; using Microsoft.IdentityModel.Tokens; namespace ProofOfConcept.Utilities; using Microsoft.IdentityModel.Protocols; using Microsoft.IdentityModel.Protocols.OpenIdConnect; public sealed class TeslaOIDCConfigurationManager : IConfigurationManager { private readonly Func urlOverride; private readonly IConfigurationManager _inner; public TeslaOIDCConfigurationManager(string metadataAddress, Func urlOverride) { this.urlOverride = urlOverride; _inner = new ConfigurationManager( metadataAddress, new OpenIdConnectConfigurationRetriever()); } public async Task GetConfigurationAsync(CancellationToken cancel) { OpenIdConnectConfiguration? configuration = await _inner.GetConfigurationAsync(cancel); configuration.TokenEndpoint = urlOverride(configuration.TokenEndpoint); return configuration; } public void RequestRefresh() => _inner.RequestRefresh(); }