Browse Source

Make provider options a first-class property in OpenIddictClientRegistration

pull/1573/head
Kévin Chalet 4 years ago
parent
commit
dca91a000e
  1. 10
      gen/OpenIddict.Client.WebIntegration.Generators/OpenIddictClientWebIntegrationGenerator.cs
  2. 5
      src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationConstants.cs
  3. 24
      src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHelpers.cs
  4. 5
      src/OpenIddict.Client/OpenIddictClientRegistration.cs

10
gen/OpenIddict.Client.WebIntegration.Generators/OpenIddictClientWebIntegrationGenerator.cs

@ -428,7 +428,6 @@ using Microsoft.IdentityModel.Tokens;
using OpenIddict.Client;
using SmartFormat;
using SmartFormat.Core.Settings;
using Properties = OpenIddict.Client.WebIntegration.OpenIddictClientWebIntegrationConstants.Properties;
using static OpenIddict.Client.WebIntegration.OpenIddictClientWebIntegrationConstants;
namespace OpenIddict.Client.WebIntegration;
@ -548,6 +547,7 @@ public sealed partial class OpenIddictClientWebIntegrationConfiguration
var registration = new OpenIddictClientRegistration
{
ProviderName = Providers.{{ provider.name }},
ProviderOptions = settings,
Issuer = settings.Environment switch
{
@ -647,11 +647,6 @@ public sealed partial class OpenIddictClientWebIntegrationConfiguration
new SigningCredentials(settings.{{ setting.property_name }}, ""{{ setting.signing_algorithm }}""),
{{~ end ~}}
{{~ end ~}}
},
Properties =
{
[Properties.ProviderOptions] = settings
}
};
@ -778,7 +773,6 @@ using OpenIddict.Client;
using OpenIddict.Client.WebIntegration;
using SmartFormat;
using SmartFormat.Core.Settings;
using Properties = OpenIddict.Client.WebIntegration.OpenIddictClientWebIntegrationConstants.Properties;
using static OpenIddict.Client.WebIntegration.OpenIddictClientWebIntegrationConstants;
namespace OpenIddict.Client.WebIntegration;
@ -793,7 +787,7 @@ public static partial class OpenIddictClientWebIntegrationHelpers
/// <returns>The {{ provider.name }} provider options.</returns>
/// <exception cref=""InvalidOperationException"">The provider options cannot be resolved.</exception>
public static OpenIddictClientWebIntegrationOptions.{{ provider.name }} Get{{ provider.name }}Options(this OpenIddictClientRegistration registration)
=> registration.GetProviderOptions<OpenIddictClientWebIntegrationOptions.{{ provider.name }}>() ??
=> registration.ProviderOptions is OpenIddictClientWebIntegrationOptions.{{ provider.name }} options ? options :
throw new InvalidOperationException(SR.FormatID0333(Providers.{{ provider.name }}));
{{~ end ~}}

5
src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationConstants.cs

@ -12,9 +12,4 @@ namespace OpenIddict.Client.WebIntegration;
public static partial class OpenIddictClientWebIntegrationConstants
{
// Note: provider name constants are automatically generated by the source generator.
public static class Properties
{
public const string ProviderOptions = ".provider_options";
}
}

24
src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHelpers.cs

@ -4,8 +4,6 @@
* the license and the contributors participating to this project.
*/
using Properties = OpenIddict.Client.WebIntegration.OpenIddictClientWebIntegrationConstants.Properties;
namespace OpenIddict.Client.WebIntegration;
/// <summary>
@ -13,25 +11,5 @@ namespace OpenIddict.Client.WebIntegration;
/// </summary>
public static partial class OpenIddictClientWebIntegrationHelpers
{
/// <summary>
/// Resolves the provider options associated with the client registration or
/// <see langword="null" /> if no provider information is attached to the registration or if
/// the actual setting information doesn't match the specified <typeparamref name="TOptions"/>.
/// </summary>
/// <typeparam name="TOptions">The type of the provider options.</typeparam>
/// <param name="registration">The client registration.</param>
/// <returns>The provider options, if applicable.</returns>
/// <exception cref="ArgumentNullException"><paramref name="registration"/> is null.</exception>
public static TOptions? GetProviderOptions<TOptions>(this OpenIddictClientRegistration registration)
{
if (registration is null)
{
throw new ArgumentNullException(nameof(registration));
}
return registration.Properties.TryGetValue(Properties.ProviderOptions, out var value)
&& value is TOptions options ? options : default;
// Note: provider-specific helpers are automatically generated by the source generator.
}
// Note: provider-specific helpers are automatically generated by the source generator.
}

5
src/OpenIddict.Client/OpenIddictClientRegistration.cs

@ -104,6 +104,11 @@ public sealed class OpenIddictClientRegistration
/// </remarks>
public string? ProviderName { get; set; }
/// <summary>
/// Gets or sets the provider options, if applicable.
/// </summary>
public dynamic? ProviderOptions { get; set; }
/// <summary>
/// Gets or sets the static server configuration, if applicable.
/// </summary>

Loading…
Cancel
Save