From 7a830637eca9c5e0c9d72908c0d3c256eac0f824 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 17 Jun 2022 16:30:30 +0800 Subject: [PATCH] Add `ClientUri ` and `LogoUri ` to `OpenIddictApplication`. --- .../OpenIddict/AbpOpenIddictDomainModule.cs | 6 ++ .../Applications/AbpApplicationDescriptor.cs | 16 +++++ .../Applications/AbpApplicationManager.cs | 61 +++++++++++++++++++ .../AbpOpenIddictApplicationStore.cs | 19 +++++- .../Applications/IAbpApplicationManager.cs | 12 ++++ .../IAbpOpenIdApplicationStore.cs | 12 ++++ .../Applications/OpenIddictApplication.cs | 10 +++ .../OpenIddictApplicationExtensions.cs | 10 ++- .../OpenIddictApplicationModel.cs | 10 +++ 9 files changed, 151 insertions(+), 5 deletions(-) create mode 100644 modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationDescriptor.cs create mode 100644 modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationManager.cs create mode 100644 modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpApplicationManager.cs create mode 100644 modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpOpenIdApplicationStore.cs diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/AbpOpenIddictDomainModule.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/AbpOpenIddictDomainModule.cs index 16c3ab49c5..428f5a7062 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/AbpOpenIddictDomainModule.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/AbpOpenIddictDomainModule.cs @@ -1,6 +1,8 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; +using OpenIddict.Abstractions; using Volo.Abp.BackgroundWorkers; using Volo.Abp.Caching; using Volo.Abp.DistributedLocking; @@ -68,6 +70,10 @@ public class AbpOpenIddictDomainModule : AbpModule .AddScopeStore() .AddTokenStore(); + builder.ReplaceApplicationManager(typeof(AbpApplicationManager)); + + builder.Services.TryAddScoped(provider => (IAbpApplicationManager)provider.GetRequiredService()); + services.ExecutePreConfiguredActions(builder); }); diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationDescriptor.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationDescriptor.cs new file mode 100644 index 0000000000..3b5a4fc247 --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationDescriptor.cs @@ -0,0 +1,16 @@ +using OpenIddict.Abstractions; + +namespace Volo.Abp.OpenIddict.Applications; + +public class AbpApplicationDescriptor : OpenIddictApplicationDescriptor +{ + /// + /// URI to further information about client. + /// + public string ClientUri { get; set; } + + /// + /// URI to client logo. + /// + public string LogoUri { get; set; } +} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationManager.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationManager.cs new file mode 100644 index 0000000000..b205f60be2 --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpApplicationManager.cs @@ -0,0 +1,61 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using OpenIddict.Abstractions; +using OpenIddict.Core; + +namespace Volo.Abp.OpenIddict.Applications; + +public class AbpApplicationManager : OpenIddictApplicationManager, IAbpApplicationManager +{ + public AbpApplicationManager( + [NotNull] IOpenIddictApplicationCache cache, + [NotNull] ILogger logger, + [NotNull] IOptionsMonitor options, + [NotNull] IOpenIddictApplicationStoreResolver resolver) + : base(cache, logger, options, resolver) + { + + } + + public async override ValueTask PopulateAsync(OpenIddictApplicationDescriptor descriptor, OpenIddictApplicationModel application, CancellationToken cancellationToken = default) + { + await base.PopulateAsync(descriptor, application, cancellationToken); + + if (descriptor is AbpApplicationDescriptor model) + { + application.ClientUri = model.ClientUri; + application.LogoUri = model.LogoUri; + } + } + + public async override ValueTask PopulateAsync(OpenIddictApplicationModel application, OpenIddictApplicationDescriptor descriptor, CancellationToken cancellationToken = default) + { + await base.PopulateAsync(application, descriptor, cancellationToken); + + if (descriptor is AbpApplicationDescriptor model) + { + application.ClientUri = model.ClientUri; + application.LogoUri = model.LogoUri; + } + } + + public virtual async ValueTask GetClientUriAsync(object application, CancellationToken cancellationToken = default) + { + Check.NotNull(application, nameof(application)); + Check.AssignableTo(application.GetType(), nameof(application)); + + return await Store.As().GetClientUriAsync(application.As(), cancellationToken); + } + + public virtual async ValueTask GetLogoUriAsync(object application, CancellationToken cancellationToken = default) + { + Check.NotNull(application, nameof(application)); + Check.AssignableTo(application.GetType(), nameof(application)); + + return await Store.As().GetLogoUriAsync(application.As(), cancellationToken); + } +} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs index 35c37bb657..1f740ecfcd 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs @@ -8,14 +8,13 @@ using System.Runtime.CompilerServices; using System.Text.Json; using System.Threading; using System.Threading.Tasks; -using OpenIddict.Abstractions; using Volo.Abp.Guids; using Volo.Abp.OpenIddict.Tokens; using Volo.Abp.Uow; namespace Volo.Abp.OpenIddict.Applications; -public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase, IOpenIddictApplicationStore +public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase, IAbpOpenIdApplicationStore { protected IOpenIddictTokenRepository TokenRepository { get; } @@ -44,7 +43,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase GetClientUriAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken = default) + { + Check.NotNull(application, nameof(application)); + + return new ValueTask(application.ClientUri); + } + + public virtual ValueTask GetLogoUriAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken = default) + { + Check.NotNull(application, nameof(application)); + + return new ValueTask(application.LogoUri); + } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpApplicationManager.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpApplicationManager.cs new file mode 100644 index 0000000000..1f12a9d088 --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpApplicationManager.cs @@ -0,0 +1,12 @@ +using System.Threading; +using System.Threading.Tasks; +using OpenIddict.Abstractions; + +namespace Volo.Abp.OpenIddict.Applications; + +public interface IAbpApplicationManager : IOpenIddictApplicationManager +{ + ValueTask GetClientUriAsync(object application, CancellationToken cancellationToken = default); + + ValueTask GetLogoUriAsync(object application, CancellationToken cancellationToken = default); +} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpOpenIdApplicationStore.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpOpenIdApplicationStore.cs new file mode 100644 index 0000000000..ca2cd50102 --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IAbpOpenIdApplicationStore.cs @@ -0,0 +1,12 @@ +using System.Threading; +using System.Threading.Tasks; +using OpenIddict.Abstractions; + +namespace Volo.Abp.OpenIddict.Applications; + +public interface IAbpOpenIdApplicationStore : IOpenIddictApplicationStore +{ + ValueTask GetClientUriAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken = default); + + ValueTask GetLogoUriAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken = default); +} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplication.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplication.cs index 6ef1fea798..6098f67392 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplication.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplication.cs @@ -77,4 +77,14 @@ public class OpenIddictApplication : FullAuditedAggregateRoot /// Gets or sets the application type associated with the current application. /// public virtual string Type { get; set; } + + /// + /// URI to further information about client. + /// + public string ClientUri { get; set; } + + /// + /// URI to client logo. + /// + public string LogoUri { get; set; } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationExtensions.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationExtensions.cs index 8f492efe06..87ef747f7b 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationExtensions.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationExtensions.cs @@ -18,7 +18,9 @@ public static class OpenIddictApplicationExtensions Properties = model.Properties, RedirectUris = model.RedirectUris, Requirements = model.Requirements, - Type = model.Type + Type = model.Type, + ClientUri = model.ClientUri, + LogoUri = model.LogoUri }; foreach (var extraProperty in model.ExtraProperties) @@ -45,6 +47,8 @@ public static class OpenIddictApplicationExtensions entity.RedirectUris = model.RedirectUris; entity.Requirements = model.Requirements; entity.Type = model.Type; + entity.ClientUri = model.ClientUri; + entity.LogoUri = model.LogoUri; foreach (var extraProperty in model.ExtraProperties) { @@ -75,7 +79,9 @@ public static class OpenIddictApplicationExtensions Properties = entity.Properties, RedirectUris = entity.RedirectUris, Requirements = entity.Requirements, - Type = entity.Type + Type = entity.Type, + ClientUri = entity.ClientUri, + LogoUri = entity.LogoUri }; foreach (var extraProperty in entity.ExtraProperties) diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationModel.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationModel.cs index 762099cc89..ff13ef2355 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationModel.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationModel.cs @@ -72,4 +72,14 @@ public class OpenIddictApplicationModel : ExtensibleObject /// Gets or sets the application type associated with the current application. /// public virtual string Type { get; set; } + + /// + /// URI to further information about client. + /// + public string ClientUri { get; set; } + + /// + /// URI to client logo. + /// + public string LogoUri { get; set; } }