16 const NONCE =
'e7aa11195ca58349bec8b5ebe351d3497eb9e603';
19 'consumer_key' =>
'foo',
20 'consumer_secret' =>
'bar',
22 'token_secret' =>
'dracula'
35 $this->assertArrayHasKey(
'request.before_send', $events);
43 $class = new \ReflectionClass($p);
44 $property = $class->getProperty(
'config');
45 $property->setAccessible(
true);
46 $config = $property->getValue($p);
48 $this->assertEquals(
'foo',
$config[
'consumer_key']);
49 $this->assertEquals(
'bar',
$config[
'consumer_secret']);
50 $this->assertEquals(
'count',
$config[
'token']);
51 $this->assertEquals(
'dracula',
$config[
'token_secret']);
52 $this->assertEquals(
'1.0',
$config[
'version']);
53 $this->assertEquals(
'HMAC-SHA1',
$config[
'signature_method']);
54 $this->assertEquals(
'header',
$config[
'request_method']);
61 $signString = $p->getStringToSign($request, self::TIMESTAMP, self::NONCE);
63 $this->assertContains(
'&e=f', rawurldecode($signString));
67 'POST&http%3A%2F%2Fwww.test.com%2Fpath' .
69 '&a%3Db%26c%3Dd%26e%3Df%26oauth_consumer_key%3Dfoo' .
70 '%26oauth_nonce%3De7aa11195ca58349bec8b5ebe351d3497eb9e603%26' .
71 'oauth_signature_method%3DHMAC-SHA1' .
72 '%26oauth_timestamp%3D' . self::TIMESTAMP .
'%26oauth_token%3Dcount%26oauth_version%3D1.0';
74 $this->assertEquals($expectedSignString, $signString);
80 $config[
'disable_post_params'] =
true;
83 $sts = rawurldecode($p->getStringToSign($request, self::TIMESTAMP, self::NONCE));
84 $this->assertNotContains(
'&e=f', $sts);
91 $request->setHeader(
'Content-Type',
'Foo');
94 'POST&http%3A%2F%2Fwww.test.com%2Fpath' .
96 '&a%3Db%26c%3Dd%26oauth_consumer_key%3Dfoo' .
97 '%26oauth_nonce%3D'. self::NONCE .
'%26' .
98 'oauth_signature_method%3DHMAC-SHA1' .
99 '%26oauth_timestamp%3D' . self::TIMESTAMP .
'%26oauth_token%3Dcount%26oauth_version%3D1.0',
100 $p->getStringToSign($request, self::TIMESTAMP, self::NONCE)
111 $request->getQuery()->set(
'a',
true);
112 $request->getQuery()->set(
'c',
false);
113 $this->assertContains(
'&a%3Dtrue%26c%3Dfalse', $p->getStringToSign($request, self::TIMESTAMP, self::NONCE));
119 'consumer_key' =>
'foo',
120 'consumer_secret' =>
'bar',
122 'token_secret' =>
'dracula'
127 $signString = $p->getStringToSign($request, self::TIMESTAMP, self::NONCE);
129 $this->assertContains(
'&e=f', rawurldecode($signString));
131 $expectedSignString =
132 'POST&http%3A%2F%2Fwww.test.com%2Fpath' .
134 '&a%3Db%26c%3Dd%26e%3Df%26oauth_consumer_key%3Dfoo' .
135 '%26oauth_nonce%3De7aa11195ca58349bec8b5ebe351d3497eb9e603%26' .
136 'oauth_signature_method%3DHMAC-SHA1' .
137 '%26oauth_timestamp%3D' . self::TIMESTAMP .
'%26oauth_version%3D1.0';
139 $this->assertEquals($expectedSignString, $signString);
149 $request->getQuery()->set(
'a', array(
'b' => array(
'e' =>
'f',
'c' =>
'd')));
150 $this->assertContains(
'a%255Bb%255D%255Bc%255D%3Dd%26a%255Bb%255D%255Be%255D%3Df%26c%3Dd%26e%3Df%26', $p->getStringToSign($request, self::TIMESTAMP, self::NONCE));
161 $query = $request->getQuery()->setAggregator($aggregator)
162 ->set(
'g', array(
'h',
'i',
'j'))
163 ->set(
'k', array(
'l'))
164 ->set(
'm', array(
'n',
'o'));
165 $this->assertContains(
'a%3Db%26c%3Dd%26e%3Df%26g%3Dh%2Ci%2Cj%26k%3Dl%26m%3Dn%2Co', $p->getStringToSign($request, self::TIMESTAMP, self::NONCE));
173 $p =
new OauthPlugin(array_merge($this->config, array(
174 'signature_callback' =>
function($string, $key) {
175 return "_{$string}|{$key}_";
179 $sig = $p->getSignature($request, self::TIMESTAMP, self::NONCE);
181 '_POST&http%3A%2F%2Fwww.test.com%2Fpath&a%3Db%26c%3Dd%26e%3Df%26oauth_consumer_key%3Dfoo' .
182 '%26oauth_nonce%3D'. self::NONCE .
'%26oauth_signature_method%3DHMAC-SHA1' .
183 '%26oauth_timestamp%3D' . self::TIMESTAMP .
'%26oauth_token%3Dcount%26oauth_version%3D1.0|' .
196 $event =
new Event(array(
198 'timestamp' => self::TIMESTAMP
200 $params = $p->onRequestBeforeSend($event);
202 $this->assertTrue($event[
'request']->hasHeader(
'Authorization'));
204 $authorizationHeader = (string)$event[
'request']->getHeader(
'Authorization');
206 $this->assertStringStartsWith(
'OAuth ', $authorizationHeader);
208 $stringsToCheck = array(
209 'oauth_consumer_key="foo"',
210 'oauth_nonce="'.urlencode($params[
'oauth_nonce']).
'"',
211 'oauth_signature="'.urlencode($params[
'oauth_signature']).
'"',
212 'oauth_signature_method="HMAC-SHA1"',
213 'oauth_timestamp="' . self::TIMESTAMP .
'"',
214 'oauth_token="count"',
215 'oauth_version="1.0"',
218 $totalLength = strlen(
'OAuth ');
223 foreach ($stringsToCheck as $stringToCheck) {
224 $this->assertContains($stringToCheck, $authorizationHeader);
225 $totalLength += strlen($separator);
226 $totalLength += strlen($stringToCheck);
233 $this->assertEquals($totalLength, strlen($authorizationHeader),
'Authorization has extra characters i.e. contains extra elements compared to stringsToCheck.');
244 $event =
new Event(array(
246 'timestamp' => self::TIMESTAMP
248 $params = $p->onRequestBeforeSend($event);
250 $this->assertFalse($event[
'request']->hasHeader(
'Authorization'));
252 $stringsToCheck = array(
255 'oauth_consumer_key=foo',
256 'oauth_nonce='.urlencode($params[
'oauth_nonce']),
257 'oauth_signature='.urlencode($params[
'oauth_signature']),
258 'oauth_signature_method=HMAC-SHA1',
259 'oauth_timestamp='.self::TIMESTAMP,
264 $queryString = (string) $event[
'request']->getQuery();
266 $totalLength = strlen(
'?');
271 foreach ($stringsToCheck as $stringToCheck) {
272 $this->assertContains($stringToCheck, $queryString);
273 $totalLength += strlen($separator);
274 $totalLength += strlen($stringToCheck);
281 $this->assertEquals($totalLength, strlen($queryString),
'Query string has extra characters i.e. contains extra elements compared to stringsToCheck.');
291 array(
'request_method' =>
'FakeMethod')
295 $event =
new Event(array(
297 'timestamp' => self::TIMESTAMP
300 $p->onRequestBeforeSend($event);
305 unset($this->config[
'token']);
307 $event =
new Event(array(
'request' => $this->
getRequest(),
'timestamp' => self::TIMESTAMP));
308 $p->onRequestBeforeSend($event);
309 $this->assertTrue($event[
'request']->hasHeader(
'Authorization'));
310 $this->assertNotContains(
'oauth_token=', (
string) $event[
'request']->getHeader(
'Authorization'));
318 'consumer_key' =>
'foo',
319 'consumer_secret' =>
'bar',
323 $event =
new Event(array(
325 'timestamp' => self::TIMESTAMP
328 $timestamp = $plugin->getTimestamp($event);
329 $request = $event[
'request'];
330 $nonce = $plugin->generateNonce($request);
332 $paramsToSign = $plugin->getParamsToSign($request, $timestamp, $nonce);
334 $optionalParams = array(
335 'callback' =>
'oauth_callback',
336 'token' =>
'oauth_token',
337 'verifier' =>
'oauth_verifier',
338 'token_secret' =>
'token_secret'
341 foreach ($optionalParams as $optionName => $oauthName) {
342 $this->assertArrayNotHasKey($oauthName, $paramsToSign,
"Optional Oauth param '$oauthName' was not set via config variable '$optionName', but it is listed in getParamsToSign().");