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 IConfigurationManager _inner; public TeslaOIDCConfigurationManager(string metadataAddress) { _inner = new ConfigurationManager(metadataAddress, new OpenIdConnectConfigurationRetriever(), new TeslaDocumentRetriever()); } public async Task GetConfigurationAsync(CancellationToken cancel) { OpenIdConnectConfiguration? configuration = await _inner.GetConfigurationAsync(cancel); string cloudEndpointBase = "https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3"; configuration.AuthorizationEndpoint = $"{cloudEndpointBase}/authorize"; configuration.TokenEndpoint = $"{cloudEndpointBase}/token"; configuration.JwksUri = $"{cloudEndpointBase}/discovery/thirdparty/keys"; configuration.EndSessionEndpoint = $"{cloudEndpointBase}/logout"; configuration.UserInfoEndpoint = $"{cloudEndpointBase}/userinfo"; return configuration; } public void RequestRefresh() => _inner.RequestRefresh(); } public class TeslaDocumentRetriever : IDocumentRetriever { private readonly HttpDocumentRetriever httpDocumentRetriever = new HttpDocumentRetriever(); public async Task GetDocumentAsync(string address, CancellationToken cancel) { string document = await this.httpDocumentRetriever.GetDocumentAsync(address, cancel); return document.Replace("https://fleet-auth.tesla.com/oauth2/v3", "https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3"); } }