Closed nicktacular closed 8 years ago
@nicktacular Please help us understand a bit more about this issue by providing more information.
@stevenmaguire I responded with a few more details in #42 but I can provide more detail here.
a[b]=1&a[c]=2
.Currently, I see there being 2 different, but related issues:
parse_str
will parse []
as arrays in a query string, thereby resulting in a multi-dimensional array. The HmacSha1Signature
should be aware of this and deal with this case in some way that does not issue a PHP warning about unexpected arrays: Warning: rawurlencode() expects parameter 1 to be string, array given
I think we can solve in this manner. Create an interface called QueryParserInterface
that allows you to override the method in which queries are parsed and sorted into a string. The default would be called DefaultQueryParser
which uses parse_url
and anyone that wants to modify this can contribute to an adapter implementation.
Thoughts?
Awesome, Thanks for providing this!
Can you add a bit more clarity to these responses?
The nature of the nested parameters is to pass an array-like structure to provide the necessary request parameters to the backend.
Are these parameters being used to create entities? to filter a query of existing entities?
I'm trying to make any request that uses a query string like a[b]=1&a[c]=2.
Can you provide a specific example of a request query string that is causing some problems?
I do think the two points you've made are valid, I am trying to discern the scope of the use case you are experiencing. Service providers implement OAuth (1 and 2!) inconsistently. I want to understand the instigator of this issue to research whether or not other providers, at least the ones I know of, are susceptible.
It is worth noting that another project had this same discussion and the root of the initial concern was more enlightening than the solution being proposed. https://github.com/woothemes/woocommerce/issues/7833
Edit: Same issue here when passing a multidimensional array as the $bodyParameters
argument to League\OAuth1\Client\Server::getHeaders().
@stevenmaguire - I've not had time to work on this. I will get to this sometime later this month. Thanks.
Hi guys, any updates on this?
Ignore previous comment ;)
I've encountered an issue whereby if you create a service that extends
League\OAuth1\Client\Server\Server
and use$this->getHeaders(...)
with a query string that has array notation (i.e.var[]=whatever
) then the URL cannot be properly signed.Here's an example:
This generates a warning:
Warning: rawurlencode() expects parameter 1 to be string, array given in /my/proj/vendor/league/oauth1-client/src/Client/Signature/HmacSha1Signature.php on line 66
Which means that the service is sending an invalid signature.
When I dug deeper, it looks like the method
League\OAuth1\Client\Signature\HmacSha1Signature::baseString
does not properly operate on such nested arrays. Specifically this line:$data[rawurlencode($key)] = rawurlencode($value);
. The methodrawurlencode
doesn't know how to act on an array.Is this a bug or did I miss another way to sign a URL here?
Client version: 1.6.1