Skip to content

Commit

Permalink
Fixes OAuth1 signature with special characters (#2126, #1945) (#2127)
Browse files Browse the repository at this point in the history
* Fixes OAuth1 signature with special characters (#2126, #1945)

* Adds test for parameters encoding

---------

Co-authored-by: Eleonora Adova <eleonora.adova@riscogroup.com>
  • Loading branch information
elia936 and Eleonora Adova committed Feb 7, 2024
1 parent f3642c1 commit 122a2b0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/RestSharp/Authenticators/OAuth/OAuthTools.cs
Expand Up @@ -142,7 +142,7 @@ static class OAuthTools {
internal static IEnumerable<string> SortParametersExcludingSignature(WebPairCollection parameters)
=> parameters

This comment has been minimized.

Copy link
@ErenYeager9128

ErenYeager9128 Mar 7, 2024

Meta Api request search

.Where(x => !x.Name.EqualsIgnoreCase("oauth_signature"))
.Select(x => new WebPair(UrlEncodeStrict(x.Name), UrlEncodeStrict(x.Value)))
.Select(x => new WebPair(UrlEncodeStrict(x.Name), UrlEncodeRelaxed(x.Value)))
.OrderBy(x => x, WebPair.Comparer)
.Select(x => x.GetQueryParameter(false));

Expand Down
26 changes: 19 additions & 7 deletions test/RestSharp.Tests.Integrated/OAuth1Tests.cs
Expand Up @@ -51,17 +51,29 @@ class QueueItem {
actual.Should().BeEquivalentTo(expected);
}

[Fact]
public void Properly_Encodes_Parameter_Names() {
var postData = new WebPairCollection {
{ "name[first]", "Chuck" },
{ "name[last]", "Testa" }
};
[Theory]
[MemberData(nameof(EncodeParametersTestData))]
public void Properly_Encodes_Parameter_Names(IList<(string, string)> parameters, string expected) {
var postData = new WebPairCollection();
postData.AddRange(parameters.Select(x => new WebPair(x.Item1, x.Item2)));
var sortedParams = OAuthTools.SortParametersExcludingSignature(postData);

sortedParams.First().Should().Be("name%5Bfirst%5D=Chuck");
sortedParams.First().Should().Be(expected);
}

public static IEnumerable<object[]> EncodeParametersTestData =>
new List<object[]>
{
new object[] {
new List<(string, string)> { ("name[first]", "Chuck"), ("name[last]", "Testa") },
"name%5Bfirst%5D=Chuck"
},
new object[] {
new List<(string, string)> { ("country", "España") },
"country=Espa%C3%B1a"
}
};

[Fact]
public void Use_RFC_3986_Encoding_For_Auth_Signature_Base() {
// reserved characters for 2396 and 3986
Expand Down

0 comments on commit 122a2b0

Please sign in to comment.