Browse Source

Add a new OpenIddictMessage constructor accepting non-nullable immutable arrays

pull/2426/head
Kévin Chalet 1 month ago
parent
commit
8dbf493469
  1. 18
      Directory.Packages.props
  2. 1
      sandbox/OpenIddict.Sandbox.AspNet.Client/OpenIddict.Sandbox.AspNet.Client.csproj
  3. 1
      sandbox/OpenIddict.Sandbox.AspNet.Server/OpenIddict.Sandbox.AspNet.Server.csproj
  4. 4
      sandbox/OpenIddict.Sandbox.AspNet.Server/Views/Authorization/Authorize.cshtml
  5. 4
      sandbox/OpenIddict.Sandbox.AspNet.Server/Views/Authorization/EndSession.cshtml
  6. 4
      shared/OpenIddict.Extensions/OpenIddictHelpers.cs
  7. 10
      shared/OpenIddict.Extensions/OpenIddictPolyfills.cs
  8. 33
      src/OpenIddict.Abstractions/Primitives/OpenIddictMessage.cs
  9. 11
      src/OpenIddict.Abstractions/Primitives/OpenIddictRequest.cs
  10. 11
      src/OpenIddict.Abstractions/Primitives/OpenIddictResponse.cs
  11. 4
      src/OpenIddict.Client.Owin/OpenIddictClientOwinHandlers.cs
  12. 4
      src/OpenIddict.Client.SystemNetHttp/OpenIddictClientSystemNetHttpHandlers.cs
  13. 8
      src/OpenIddict.Server.Owin/OpenIddictServerOwinHandlers.cs
  14. 4
      src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpHandlers.cs
  15. 20
      test/OpenIddict.Abstractions.Tests/Primitives/OpenIddictMessageTests.cs
  16. 3
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.cs
  17. 16
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs
  18. 3
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.cs
  19. 3
      test/OpenIddict.Validation.AspNetCore.IntegrationTests/OpenIddictValidationAspNetCoreIntegrationTests.cs
  20. 16
      test/OpenIddict.Validation.IntegrationTests/OpenIddictValidationIntegrationTestClient.cs
  21. 3
      test/OpenIddict.Validation.Owin.IntegrationTests/OpenIddictValidationOwinIntegrationTests.cs

18
Directory.Packages.props

@ -53,7 +53,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -110,7 +110,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -202,7 +202,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -249,7 +249,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -295,7 +295,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -354,7 +354,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -405,7 +405,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -446,7 +446,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
<!--
@ -468,7 +468,7 @@
Note: OpenIddict uses Meziantou.Polyfill to dynamically generate polyfills for types that are not available
on some of the targeted TFMs (e.g Index, Range or nullable attributes on .NET Framework/.NET Standard).
-->
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.83" />
<GlobalPackageReference Include="Meziantou.Polyfill" Condition=" '$(IncludePolyfills)' != 'false' " Version="1.0.101" />
</ItemGroup>
</Project>

1
sandbox/OpenIddict.Sandbox.AspNet.Client/OpenIddict.Sandbox.AspNet.Client.csproj

@ -7,7 +7,6 @@
<MvcBuildViews>false</MvcBuildViews>
<ImplicitUsings>disable</ImplicitUsings>
<NoWarn>CA3147</NoWarn>
<IncludePolyfills>false</IncludePolyfills>
</PropertyGroup>
<ItemGroup>

1
sandbox/OpenIddict.Sandbox.AspNet.Server/OpenIddict.Sandbox.AspNet.Server.csproj

@ -7,7 +7,6 @@
<MvcBuildViews>false</MvcBuildViews>
<ImplicitUsings>disable</ImplicitUsings>
<NoWarn>CA3147</NoWarn>
<IncludePolyfills>false</IncludePolyfills>
</PropertyGroup>
<ItemGroup>

4
sandbox/OpenIddict.Sandbox.AspNet.Server/Views/Authorization/Authorize.cshtml

@ -14,10 +14,10 @@
foreach (var parameter in string.Equals(Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase) ?
from name in Request.Form.AllKeys
from value in Request.Form.GetValues(name)
select new KeyValuePair<string, string>(name, value) :
select KeyValuePair.Create(name, value) :
from name in Request.QueryString.AllKeys
from value in Request.QueryString.GetValues(name)
select new KeyValuePair<string, string>(name, value))
select KeyValuePair.Create(name, value))
{
<input type="hidden" name="@parameter.Key" value="@parameter.Value" />
}

4
sandbox/OpenIddict.Sandbox.AspNet.Server/Views/Authorization/EndSession.cshtml

@ -12,10 +12,10 @@
foreach (var parameter in string.Equals(Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase) ?
from name in Request.Form.AllKeys
from value in Request.Form.GetValues(name)
select new KeyValuePair<string, string>(name, value) :
select KeyValuePair.Create(name, value) :
from name in Request.QueryString.AllKeys
from value in Request.QueryString.GetValues(name)
select new KeyValuePair<string, string>(name, value))
select KeyValuePair.Create(name, value))
{
<input type="hidden" name="@parameter.Key" value="@parameter.Value" />
}

4
shared/OpenIddict.Extensions/OpenIddictHelpers.cs

@ -1193,7 +1193,7 @@ internal static class OpenIddictHelpers
ReadNextPairImpl();
if (ReadSucceeded())
{
return new KeyValuePair<string, string>(_currentKey, _currentValue);
return KeyValuePair.Create(_currentKey, _currentValue);
}
return null;
}
@ -1220,7 +1220,7 @@ internal static class OpenIddictHelpers
await ReadNextPairAsyncImpl(cancellationToken);
if (ReadSucceeded())
{
return new KeyValuePair<string, string>(_currentKey, _currentValue);
return KeyValuePair.Create(_currentKey, _currentValue);
}
return null;
}

10
shared/OpenIddict.Extensions/OpenIddictPolyfills.cs

@ -258,16 +258,6 @@ internal static class OpenIddictPolyfills
#endif
}
extension(ValueTask)
{
#if !SUPPORTS_VALUETASK_COMPLETED_TASK
/// <summary>
/// Gets a task that has already completed successfully.
/// </summary>
public static ValueTask CompletedTask => default;
#endif
}
extension<TResult>(ValueTask<TResult>)
{
#if !SUPPORTS_VALUETASK_COMPLETED_TASK

33
src/OpenIddict.Abstractions/Primitives/OpenIddictMessage.cs

@ -152,6 +152,37 @@ public class OpenIddictMessage
/// </summary>
/// <param name="parameters">The message parameters.</param>
/// <remarks>Parameters with a null or empty key are always ignored.</remarks>
public OpenIddictMessage(IEnumerable<KeyValuePair<string, ImmutableArray<string?>>> parameters)
{
ArgumentNullException.ThrowIfNull(parameters);
foreach (var parameter in parameters)
{
// Ignore parameters whose name is null or empty.
if (string.IsNullOrEmpty(parameter.Key))
{
continue;
}
// Note: the core OAuth 2.0 specification requires that request parameters
// not be present more than once but derived specifications like the
// token exchange specification deliberately allow specifying multiple
// parameters with the same name to represent a multi-valued parameter.
AddParameter(parameter.Key, parameter.Value switch
{
{ IsDefaultOrEmpty: true } => default,
[string value] => new OpenIddictParameter(value),
[..] values => new OpenIddictParameter(values)
});
}
}
/// <summary>
/// Initializes a new OpenIddict message.
/// </summary>
/// <param name="parameters">The message parameters.</param>
/// <remarks>Parameters with a null or empty key are always ignored.</remarks>
[Obsolete("This constructor is obsolete and will be removed in a future version.")]
public OpenIddictMessage(IEnumerable<KeyValuePair<string, ImmutableArray<string?>?>> parameters)
{
ArgumentNullException.ThrowIfNull(parameters);
@ -170,7 +201,7 @@ public class OpenIddictMessage
// parameters with the same name to represent a multi-valued parameter.
AddParameter(parameter.Key, parameter.Value switch
{
null or [] => default,
null or { IsDefaultOrEmpty: true } => default,
[string value] => new OpenIddictParameter(value),
[..] values => new OpenIddictParameter(values)
});

11
src/OpenIddict.Abstractions/Primitives/OpenIddictRequest.cs

@ -80,6 +80,17 @@ public class OpenIddictRequest : OpenIddictMessage
/// </summary>
/// <param name="parameters">The request parameters.</param>
/// <remarks>Parameters with a null or empty key are always ignored.</remarks>
public OpenIddictRequest(IEnumerable<KeyValuePair<string, ImmutableArray<string?>>> parameters)
: base(parameters)
{
}
/// <summary>
/// Initializes a new OpenIddict request.
/// </summary>
/// <param name="parameters">The request parameters.</param>
/// <remarks>Parameters with a null or empty key are always ignored.</remarks>
[Obsolete("This constructor is obsolete and will be removed in a future version.")]
public OpenIddictRequest(IEnumerable<KeyValuePair<string, ImmutableArray<string?>?>> parameters)
: base(parameters)
{

11
src/OpenIddict.Abstractions/Primitives/OpenIddictResponse.cs

@ -79,6 +79,17 @@ public class OpenIddictResponse : OpenIddictMessage
/// </summary>
/// <param name="parameters">The response parameters.</param>
/// <remarks>Parameters with a null or empty key are always ignored.</remarks>
public OpenIddictResponse(IEnumerable<KeyValuePair<string, ImmutableArray<string?>>> parameters)
: base(parameters)
{
}
/// <summary>
/// Initializes a new OpenIddict response.
/// </summary>
/// <param name="parameters">The response parameters.</param>
/// <remarks>Parameters with a null or empty key are always ignored.</remarks>
[Obsolete("This constructor is obsolete and will be removed in a future version.")]
public OpenIddictResponse(IEnumerable<KeyValuePair<string, ImmutableArray<string?>?>> parameters)
: base(parameters)
{

4
src/OpenIddict.Client.Owin/OpenIddictClientOwinHandlers.cs

@ -245,7 +245,7 @@ public static partial class OpenIddictClientOwinHandlers
context.Transaction.Request = new OpenIddictRequest(
from parameter in request.Query
let values = new StringValues(parameter.Value)
select new KeyValuePair<string, StringValues>(parameter.Key, values));
select KeyValuePair.Create(parameter.Key, values));
}
else if (string.Equals(request.Method, "POST", StringComparison.OrdinalIgnoreCase))
@ -279,7 +279,7 @@ public static partial class OpenIddictClientOwinHandlers
context.Transaction.Request = new OpenIddictRequest(
from parameter in await request.ReadFormAsync()
let values = new StringValues(parameter.Value)
select new KeyValuePair<string, StringValues>(parameter.Key, values));
select KeyValuePair.Create(parameter.Key, values));
}
else

4
src/OpenIddict.Client.SystemNetHttp/OpenIddictClientSystemNetHttpHandlers.cs

@ -1148,7 +1148,7 @@ public static partial class OpenIddictClientSystemNetHttpHandlers
let values = (ImmutableArray<string?>?) parameter.Value
where values is not null
from value in values.GetValueOrDefault()
select new KeyValuePair<string?, string?>(parameter.Key, value));
select KeyValuePair.Create(parameter.Key, value));
}
return ValueTask.CompletedTask;
@ -1590,7 +1590,7 @@ public static partial class OpenIddictClientSystemNetHttpHandlers
value = parameter[start..index].Trim();
}
yield return new KeyValuePair<string, string?>(key, value);
yield return KeyValuePair.Create<string, string?>(key, value);
}
}
}

8
src/OpenIddict.Server.Owin/OpenIddictServerOwinHandlers.cs

@ -493,7 +493,7 @@ public static partial class OpenIddictServerOwinHandlers
context.Transaction.Request = new OpenIddictRequest(
from parameter in request.Query
let values = new StringValues(parameter.Value)
select new KeyValuePair<string, StringValues>(parameter.Key, values));
select KeyValuePair.Create(parameter.Key, values));
}
else
@ -544,7 +544,7 @@ public static partial class OpenIddictServerOwinHandlers
context.Transaction.Request = new OpenIddictRequest(
from parameter in request.Query
let values = new StringValues(parameter.Value)
select new KeyValuePair<string, StringValues>(parameter.Key, values));
select KeyValuePair.Create(parameter.Key, values));
}
else if (string.Equals(request.Method, "POST", StringComparison.OrdinalIgnoreCase))
@ -578,7 +578,7 @@ public static partial class OpenIddictServerOwinHandlers
context.Transaction.Request = new OpenIddictRequest(
from parameter in await request.ReadFormAsync()
let values = new StringValues(parameter.Value)
select new KeyValuePair<string, StringValues>(parameter.Key, values));
select KeyValuePair.Create(parameter.Key, values));
}
else
@ -653,7 +653,7 @@ public static partial class OpenIddictServerOwinHandlers
context.Transaction.Request = new OpenIddictRequest(
from parameter in await request.ReadFormAsync()
let values = new StringValues(parameter.Value)
select new KeyValuePair<string, StringValues>(parameter.Key, values));
select KeyValuePair.Create(parameter.Key, values));
}
else

4
src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpHandlers.cs

@ -548,7 +548,7 @@ public static partial class OpenIddictValidationSystemNetHttpHandlers
let values = (ImmutableArray<string?>?) parameter.Value
where values is not null
from value in values.GetValueOrDefault()
select new KeyValuePair<string?, string?>(parameter.Key, value));
select KeyValuePair.Create(parameter.Key, value));
}
return ValueTask.CompletedTask;
@ -990,7 +990,7 @@ public static partial class OpenIddictValidationSystemNetHttpHandlers
value = parameter[start..index].Trim();
}
yield return new KeyValuePair<string, string?>(key, value);
yield return KeyValuePair.Create<string, string?>(key, value);
}
}
}

20
test/OpenIddict.Abstractions.Tests/Primitives/OpenIddictMessageTests.cs

@ -36,8 +36,8 @@ public class OpenIddictMessageTests
{
return new OpenIddictMessage(
[
new KeyValuePair<string, OpenIddictParameter>("parameter", "Fabrikam"),
new KeyValuePair<string, OpenIddictParameter>("parameter", "Contoso")
KeyValuePair.Create("parameter", new OpenIddictParameter("Fabrikam")),
KeyValuePair.Create("parameter", new OpenIddictParameter("Contoso"))
]);
});
@ -51,7 +51,7 @@ public class OpenIddictMessageTests
// Arrange and act
var message = new OpenIddictMessage(
[
new KeyValuePair<string, OpenIddictParameter>("parameter", 42)
KeyValuePair.Create("parameter", new OpenIddictParameter(42))
]);
// Assert
@ -66,7 +66,7 @@ public class OpenIddictMessageTests
// Arrange and act
var message = new OpenIddictMessage(
[
new KeyValuePair<string, OpenIddictParameter>(name!, "Fabrikam")
KeyValuePair.Create(name!, new OpenIddictParameter("Fabrikam"))
]);
// Assert
@ -79,8 +79,8 @@ public class OpenIddictMessageTests
// Arrange and act
var message = new OpenIddictMessage(
[
new KeyValuePair<string, OpenIddictParameter>("null-parameter", (string?) null),
new KeyValuePair<string, OpenIddictParameter>("empty-parameter", string.Empty)
KeyValuePair.Create("null-parameter", new OpenIddictParameter((string?) null)),
KeyValuePair.Create("empty-parameter", new OpenIddictParameter(string.Empty))
]);
// Assert
@ -93,8 +93,8 @@ public class OpenIddictMessageTests
// Arrange and act
var message = new OpenIddictMessage(
[
new KeyValuePair<string, string?>("parameter", "Fabrikam"),
new KeyValuePair<string, string?>("parameter", "Contoso")
KeyValuePair.Create<string, string?>("parameter", "Fabrikam"),
KeyValuePair.Create<string, string?>("parameter", "Contoso")
]);
// Assert
@ -109,7 +109,7 @@ public class OpenIddictMessageTests
// Arrange and act
var message = new OpenIddictMessage(
[
new KeyValuePair<string, ImmutableArray<string?>?>("parameter", ["Fabrikam", "Contoso"])
KeyValuePair.Create<string, ImmutableArray<string?>>("parameter", ["Fabrikam", "Contoso"])
]);
// Assert
@ -124,7 +124,7 @@ public class OpenIddictMessageTests
// Arrange and act
var message = new OpenIddictMessage(
[
new KeyValuePair<string, ImmutableArray<string?>?>("parameter", ["Fabrikam"])
KeyValuePair.Create<string, ImmutableArray<string?>>("parameter", ["Fabrikam"])
]);
// Assert

3
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.cs

@ -823,8 +823,7 @@ public partial class OpenIddictServerAspNetCoreIntegrationTests : OpenIddictServ
}
var claims = result.Principal.Claims.GroupBy(claim => claim.Type)
.Select(group => new KeyValuePair<string, ImmutableArray<string?>?>(
group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
.Select(group => KeyValuePair.Create(group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonSerializer.Serialize(new OpenIddictResponse(claims)));

16
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs

@ -204,7 +204,7 @@ public class OpenIddictServerIntegrationTestClient : IAsyncDisposable
let values = (ImmutableArray<string?>?) parameter.Value
where values is not null
from value in values.GetValueOrDefault()
select new KeyValuePair<string?, string?>(parameter.Key, value));
select KeyValuePair.Create(parameter.Key, value));
}
return message;
@ -295,7 +295,7 @@ public class OpenIddictServerIntegrationTestClient : IAsyncDisposable
value = parameter[start..index].Trim();
}
yield return new KeyValuePair<string, string?>(key, value);
yield return KeyValuePair.Create<string, string?>(key, value);
}
}
}
@ -356,14 +356,14 @@ public class OpenIddictServerIntegrationTestClient : IAsyncDisposable
var value = UnescapeDataString(segment.Substring(index + 1, segment.Length - (index + 1)));
parameters.Add(new KeyValuePair<string, string?>(name, value));
parameters.Add(KeyValuePair.Create(name, value));
}
return new OpenIddictResponse(
from parameter in parameters
group parameter by parameter.Key into grouping
let values = grouping.Select(parameter => parameter.Value)
select new KeyValuePair<string, StringValues>(grouping.Key, values.ToArray()));
select KeyValuePair.Create(grouping.Key, new StringValues(values.ToArray())));
}
else if (string.Equals(message.Content?.Headers?.ContentType?.MediaType, "application/json", StringComparison.OrdinalIgnoreCase))
@ -399,14 +399,14 @@ public class OpenIddictServerIntegrationTestClient : IAsyncDisposable
var value = element.GetAttribute("value");
parameters.Add(new KeyValuePair<string, string?>(name, value));
parameters.Add(KeyValuePair.Create(name, value));
}
return new OpenIddictResponse(
from parameter in parameters
group parameter by parameter.Key into grouping
let values = grouping.Select(parameter => parameter.Value)
select new KeyValuePair<string, StringValues>(grouping.Key, values.ToArray()));
select KeyValuePair.Create(grouping.Key, new StringValues(values.ToArray())));
}
else if (string.Equals(message.Content?.Headers?.ContentType?.MediaType, "text/plain", StringComparison.OrdinalIgnoreCase))
@ -438,14 +438,14 @@ public class OpenIddictServerIntegrationTestClient : IAsyncDisposable
var value = line[(index + 1)..];
parameters.Add(new KeyValuePair<string, string>(name, value));
parameters.Add(KeyValuePair.Create(name, value));
}
return new OpenIddictResponse(
from parameter in parameters
group parameter by parameter.Key into grouping
let values = grouping.Select(parameter => parameter.Value)
select new KeyValuePair<string, StringValues>(grouping.Key, values.ToArray()));
select KeyValuePair.Create(grouping.Key, new StringValues(values.ToArray())));
}
return new OpenIddictResponse();

3
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.cs

@ -776,8 +776,7 @@ public partial class OpenIddictServerOwinIntegrationTests : OpenIddictServerInte
}
var claims = result.Identity.Claims.GroupBy(claim => claim.Type)
.Select(group => new KeyValuePair<string, ImmutableArray<string?>?>(
group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
.Select(group => KeyValuePair.Create(group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonSerializer.Serialize(new OpenIddictResponse(claims)));

3
test/OpenIddict.Validation.AspNetCore.IntegrationTests/OpenIddictValidationAspNetCoreIntegrationTests.cs

@ -185,8 +185,7 @@ public partial class OpenIddictValidationAspNetCoreIntegrationTests : OpenIddict
}
var claims = result.Principal.Claims.GroupBy(claim => claim.Type)
.Select(group => new KeyValuePair<string, ImmutableArray<string?>?>(
group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
.Select(group => KeyValuePair.Create(group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonSerializer.Serialize(new OpenIddictResponse(claims)));

16
test/OpenIddict.Validation.IntegrationTests/OpenIddictValidationIntegrationTestClient.cs

@ -204,7 +204,7 @@ public class OpenIddictValidationIntegrationTestClient : IAsyncDisposable
let values = (ImmutableArray<string?>?) parameter.Value
where values is not null
from value in values.GetValueOrDefault()
select new KeyValuePair<string?, string?>(parameter.Key, value));
select KeyValuePair.Create(parameter.Key, value));
}
return message;
@ -295,7 +295,7 @@ public class OpenIddictValidationIntegrationTestClient : IAsyncDisposable
value = parameter[start..index].Trim();
}
yield return new KeyValuePair<string, string?>(key, value);
yield return KeyValuePair.Create<string, string?>(key, value);
}
}
}
@ -356,14 +356,14 @@ public class OpenIddictValidationIntegrationTestClient : IAsyncDisposable
var value = UnescapeDataString(segment.Substring(index + 1, segment.Length - (index + 1)));
parameters.Add(new KeyValuePair<string, string?>(name, value));
parameters.Add(KeyValuePair.Create(name, value));
}
return new OpenIddictResponse(
from parameter in parameters
group parameter by parameter.Key into grouping
let values = grouping.Select(parameter => parameter.Value)
select new KeyValuePair<string, StringValues>(grouping.Key, values.ToArray()));
select KeyValuePair.Create(grouping.Key, new StringValues(values.ToArray())));
}
else if (string.Equals(message.Content?.Headers?.ContentType?.MediaType, "application/json", StringComparison.OrdinalIgnoreCase))
@ -399,14 +399,14 @@ public class OpenIddictValidationIntegrationTestClient : IAsyncDisposable
var value = element.GetAttribute("value");
parameters.Add(new KeyValuePair<string, string?>(name, value));
parameters.Add(KeyValuePair.Create(name, value));
}
return new OpenIddictResponse(
from parameter in parameters
group parameter by parameter.Key into grouping
let values = grouping.Select(parameter => parameter.Value)
select new KeyValuePair<string, StringValues>(grouping.Key, values.ToArray()));
select KeyValuePair.Create(grouping.Key, new StringValues(values.ToArray())));
}
else if (string.Equals(message.Content?.Headers?.ContentType?.MediaType, "text/plain", StringComparison.OrdinalIgnoreCase))
@ -438,14 +438,14 @@ public class OpenIddictValidationIntegrationTestClient : IAsyncDisposable
var value = line[(index + 1)..];
parameters.Add(new KeyValuePair<string, string>(name, value));
parameters.Add(KeyValuePair.Create(name, value));
}
return new OpenIddictResponse(
from parameter in parameters
group parameter by parameter.Key into grouping
let values = grouping.Select(parameter => parameter.Value)
select new KeyValuePair<string, StringValues>(grouping.Key, values.ToArray()));
select KeyValuePair.Create(grouping.Key, new StringValues(values.ToArray())));
}
return new OpenIddictResponse();

3
test/OpenIddict.Validation.Owin.IntegrationTests/OpenIddictValidationOwinIntegrationTests.cs

@ -170,8 +170,7 @@ public partial class OpenIddictValidationOwinIntegrationTests : OpenIddictValida
}
var claims = result.Identity.Claims.GroupBy(claim => claim.Type)
.Select(group => new KeyValuePair<string, ImmutableArray<string?>?>(
group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
.Select(group => KeyValuePair.Create(group.Key, group.Select(claim => claim.Value).ToImmutableArray<string?>()));
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonSerializer.Serialize(new OpenIddictResponse(claims)));

Loading…
Cancel
Save