Files
Automatic-Parking/Source/ProofOfConcept/Utilities/TeslaOIDCConfigurationManager.cs
Szakáts Alpár Zsolt 944256940f
Some checks failed
Build, Push and Run Container / build (push) Failing after 17s
Fix
2025-08-17 00:16:16 +02:00

53 lines
2.2 KiB
C#

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<OpenIdConnectConfiguration>
{
private readonly IConfigurationManager<OpenIdConnectConfiguration> _inner;
public TeslaOIDCConfigurationManager(string metadataAddress)
{
OpenIdConnectConfigurationRetriever openIDConfigurationRetriever = new OpenIdConnectConfigurationRetriever();
_inner = new ConfigurationManager<OpenIdConnectConfiguration>(metadataAddress, new OpenIdConnectConfigurationRetriever(), new HttpDocumentRetriever());
}
public async Task<OpenIdConnectConfiguration> 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;
public TeslaDocumentRetriever(HttpDocumentRetriever httpDocumentRetriever)
{
this.httpDocumentRetriever = httpDocumentRetriever;
}
public async Task<string> 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");
}
}