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; } }