using System; using System.ComponentModel; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using OpenIddict.Models; namespace OpenIddict { public class OpenIddictStore : IOpenIddictStore where TUser : IdentityUser where TApplication : Application where TContext : DbContext where TKey : IEquatable { public OpenIddictStore(TContext context) { Context = context; } /// /// Gets the database context associated with the current store. /// public virtual TContext Context { get; } public DbSet Applications { get { return Context.Set(); } } public virtual Task FindApplicationByIdAsync(string identifier, CancellationToken cancellationToken) { var key = (TKey) TypeDescriptor.GetConverter(typeof(TKey)).ConvertFromInvariantString(identifier); return Applications.SingleOrDefaultAsync(application => application.Id.Equals(key), cancellationToken); } public virtual Task FindApplicationByLogoutRedirectUri(string url, CancellationToken cancellationToken) { return Applications.SingleOrDefaultAsync(application => application.LogoutRedirectUri == url, cancellationToken); } public virtual Task GetApplicationTypeAsync(TApplication application, CancellationToken cancellationToken) { if (application == null) { throw new ArgumentNullException(nameof(application)); } return Task.FromResult(application.Type); } public virtual Task GetDisplayNameAsync(TApplication application, CancellationToken cancellationToken) { if (application == null) { throw new ArgumentNullException(nameof(application)); } return Task.FromResult(application.DisplayName); } public virtual Task GetRedirectUriAsync(TApplication application, CancellationToken cancellationToken) { if (application == null) { throw new ArgumentNullException(nameof(application)); } return Task.FromResult(application.RedirectUri); } public virtual Task GetHashedSecretAsync(TApplication application, CancellationToken cancellationToken) { if (application == null) { throw new ArgumentNullException(nameof(application)); } return Task.FromResult(application.Secret); } } }