using Azure.Core;
using SharepointToolbox.Web.Services;
namespace SharepointToolbox.Web.Infrastructure.Auth;
///
/// TokenCredential backed by the circuit's ISessionManager.
/// Lets GraphServiceClient call GetTokenAsync transparently using our refresh-token flow.
///
public class SessionTokenCredential : TokenCredential
{
private readonly ISessionManager _sessionManager;
public SessionTokenCredential(ISessionManager sessionManager) { _sessionManager = sessionManager; }
public override async ValueTask GetTokenAsync(TokenRequestContext requestContext, CancellationToken ct)
{
var scope = requestContext.Scopes.FirstOrDefault() ?? "https://graph.microsoft.com/.default";
var (token, expiresAt) = await _sessionManager.GetAccessTokenWithExpiryAsync(scope, ct);
return new AccessToken(token, expiresAt);
}
public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken ct)
=> GetTokenAsync(requestContext, ct).AsTask().GetAwaiter().GetResult();
}