Ver Fonte

Merge pull request #244 from chmielot/oauth_multipart

Zend_Oauth_Client: Consider multipart/form-data
Enrico Zimuel há 11 anos atrás
pai
commit
7e6b5a7954
2 ficheiros alterados com 49 adições e 16 exclusões
  1. 9 16
      library/Zend/Oauth/Client.php
  2. 40 0
      tests/Zend/Oauth/ClientTest.php

+ 9 - 16
library/Zend/Oauth/Client.php

@@ -292,27 +292,20 @@ class Zend_Oauth_Client extends Zend_Http_Client
 
     /**
      * Collect all signable parameters into a single array across query string
-     * and POST body. These are returned as a properly formatted single
-     * query string.
+     * and POST body. Don't include POST parameters if content type is multipart POST.
      *
-     * @return string
+     * @return array
      */
     protected function _getSignableParametersAsQueryString()
     {
         $params = array();
-            if (!empty($this->paramsGet)) {
-                $params = array_merge($params, $this->paramsGet);
-                $query  = $this->getToken()->toQueryString(
-                    $this->getUri(true), $this->_config, $params
-                );
-            }
-            if (!empty($this->paramsPost)) {
-                $params = array_merge($params, $this->paramsPost);
-                $query  = $this->getToken()->toQueryString(
-                    $this->getUri(true), $this->_config, $params
-                );
-            }
-            return $params;
+        if (!empty($this->paramsGet)) {
+            $params = array_merge($params, $this->paramsGet);
+        }
+        if ($this->enctype != self::ENC_FORMDATA && !empty($this->paramsPost)) {
+            $params = array_merge($params, $this->paramsPost);
+        }
+        return $params;
     }
 
     /**

+ 40 - 0
tests/Zend/Oauth/ClientTest.php

@@ -22,6 +22,14 @@
 
 require_once 'Zend/Oauth.php';
 require_once 'Zend/Oauth/Config.php';
+require_once 'Zend/Oauth/Client.php';
+
+class Test_Oauth_Client extends Zend_Oauth_Client {
+    public function getSignableParametersAsQueryString()
+    {
+        return $this->_getSignableParametersAsQueryString();
+    }
+}
 
 /**
  * @category   Zend
@@ -46,4 +54,36 @@ class Zend_Oauth_ClientTest extends PHPUnit_Framework_TestCase
         $this->client->setRequestMethod(Zend_Oauth_Client::OPTIONS);
         $this->assertEquals(Zend_Oauth_Client::OPTIONS, $this->client->getRequestMethod());
     }
+
+    /**
+     * zendframework / zf1 # 244
+     */
+    public function testIncludesParametersForSignatureOnPostEncUrlEncoded()
+    {
+        $client = new Test_Oauth_Client(array());
+        $client->setEncType(Zend_Http_Client::ENC_URLENCODED);
+        $params = array(
+            'param1' => 'dummy1',
+            'param2' => 'dummy2',
+        );
+        $client->setParameterPost($params);
+        $client->setMethod(Zend_Http_Client::POST);
+        $this->assertEquals(2, count($client->getSignableParametersAsQueryString()));
+    }
+
+    /**
+     * zendframework / zf1 # 244
+     */
+    public function testExcludesParametersOnPostEncFormData()
+    {
+        $client = new Test_Oauth_Client(array());
+        $client->setEncType(Zend_Http_Client::ENC_FORMDATA);
+        $params = array(
+            'param1' => 'dummy1',
+            'param2' => 'dummy2',
+        );
+        $client->setParameterPost($params);
+        $client->setMethod(Zend_Http_Client::POST);
+        $this->assertEquals(0, count($client->getSignableParametersAsQueryString()));
+    }
 }