diff --git a/src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHandlers.cs b/src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHandlers.cs index cf91fc14..8a1585f0 100644 --- a/src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHandlers.cs +++ b/src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHandlers.cs @@ -28,7 +28,7 @@ public static partial class OpenIddictClientWebIntegrationHandlers OverrideTokenEndpointClientAuthenticationMethod.Descriptor, OverrideTokenEndpoint.Descriptor, AttachNonStandardClientAssertionClaims.Descriptor, - OverrideScope.Descriptor, + OverrideScopes.Descriptor, AttachAdditionalTokenRequestParameters.Descriptor, AttachTokenRequestNonStandardClientCredentials.Descriptor, AdjustRedirectUriInTokenRequest.Descriptor, @@ -605,10 +605,9 @@ public static partial class OpenIddictClientWebIntegrationHandlers } /// - /// Contains the logic responsible for overriding the scope to be attached - /// to the token request for the providers that require it. + /// Contains the logic responsible for overriding the scopes for the providers that require it. /// - public sealed class OverrideScope : IOpenIddictClientHandler + public sealed class OverrideScopes : IOpenIddictClientHandler { /// /// Gets the default descriptor definition assigned to this handler. @@ -616,7 +615,7 @@ public static partial class OpenIddictClientWebIntegrationHandlers public static OpenIddictClientHandlerDescriptor Descriptor { get; } = OpenIddictClientHandlerDescriptor.CreateBuilder() .AddFilter() - .UseSingletonHandler() + .UseSingletonHandler() .SetOrder(AttachTokenRequestParameters.Descriptor.Order - 500) .SetType(OpenIddictClientHandlerType.BuiltIn) .Build(); @@ -624,10 +623,7 @@ public static partial class OpenIddictClientWebIntegrationHandlers /// public ValueTask HandleAsync(ProcessAuthenticationContext context) { - if (context is null) - { - throw new ArgumentNullException(nameof(context)); - } + ArgumentNullException.ThrowIfNull(context); // osu! requires at least one scope to be set for client credentials grant, as tokens without // scopes are not valid. If no scope is explicitly specified, use the default value `public`. @@ -1057,13 +1053,14 @@ public static partial class OpenIddictClientWebIntegrationHandlers right: new Uri(token, UriKind.Relative)), // osu! supports specifying a game mode when querying the userinfo endpoint. - ProviderTypes.Osu - => !context.Properties.TryGetValue(Osu.Properties.GameMode, out string? gameMode) || - string.IsNullOrEmpty(gameMode) ? - new Uri("https://osu.ppy.sh/api/v2/me", UriKind.Absolute) : - OpenIddictHelpers.CreateAbsoluteUri( - left : new Uri("https://osu.ppy.sh/api/v2/me", UriKind.Absolute), - right: new Uri(gameMode, UriKind.Relative)), + ProviderTypes.Osu => context.Properties.GetValueOrDefault(Osu.Properties.GameMode) switch + { + { Length: > 0 } mode => OpenIddictHelpers.CreateAbsoluteUri( + left : new Uri("https://osu.ppy.sh/api/v2/me", UriKind.Absolute), + right: new Uri(mode, UriKind.Relative)), + + _ => new Uri("https://osu.ppy.sh/api/v2/me", UriKind.Absolute) + }, // SuperOffice doesn't expose a static OpenID Connect userinfo endpoint but offers an API whose // absolute URI needs to be computed based on a special claim returned in the identity token.