using System.Threading.Tasks; using OpenIdConnectRequest = OpenIddict.Abstractions.OpenIddictRequest; using BTCPayServer.Data; using BTCPayServer.Models; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; using OpenIddict.Core; using OpenIddict.Server; using System.Security.Claims; namespace BTCPayServer.Security.OpenId { public abstract class BaseOpenIdGrantHandler : IOpenIddictServerHandler where T : OpenIddictServerEvents.BaseContext { private readonly OpenIddictApplicationManager _applicationManager; private readonly OpenIddictAuthorizationManager _authorizationManager; protected readonly SignInManager _signInManager; protected readonly IOptions _identityOptions; protected BaseOpenIdGrantHandler( OpenIddictApplicationManager applicationManager, OpenIddictAuthorizationManager authorizationManager, SignInManager signInManager, IOptions identityOptions) { _applicationManager = applicationManager; _authorizationManager = authorizationManager; _signInManager = signInManager; _identityOptions = identityOptions; } protected Task CreateClaimsPrincipalAsync(OpenIdConnectRequest request, ApplicationUser user) { return OpenIdExtensions.CreateClaimsPrincipalAsync(_applicationManager, _authorizationManager, _identityOptions.Value, _signInManager, request, user); } public abstract ValueTask HandleAsync(T notification); } }