Normalize URL and HTTP method, WS
authorChuck Hagenbuch <chuck@horde.org>
Wed, 5 Jan 2011 14:54:58 +0000 (09:54 -0500)
committerChuck Hagenbuch <chuck@horde.org>
Thu, 6 Jan 2011 15:09:41 +0000 (10:09 -0500)
framework/Oauth/lib/Horde/Oauth/Consumer.php
framework/Oauth/lib/Horde/Oauth/Request.php
framework/Oauth/lib/Horde/Oauth/SignatureMethod/Base.php
framework/Oauth/lib/Horde/Oauth/SignatureMethod/HmacSha1.php
framework/Oauth/lib/Horde/Oauth/SignatureMethod/Plaintext.php
framework/Oauth/lib/Horde/Oauth/SignatureMethod/RsaSha1.php
framework/Oauth/lib/Horde/Oauth/Token.php

index 044d8a1..9b75cf4 100644 (file)
@@ -123,5 +123,4 @@ class Horde_Oauth_Consumer
 
         return Horde_Oauth_Token::fromString($response->getBody());
     }
-
 }
index 074aa0c..0de8e67 100644 (file)
@@ -62,7 +62,7 @@ class Horde_Oauth_Request
         $this->_params['oauth_signature_method'] = $signatureMethod->getName();
         $this->_params['oauth_signature'] = $signatureMethod->sign($this, $consumer, $token);
 
-        return $this->_url . '?' . $this->buildHttpQuery();
+        return $this->_getNormalizedUrl() . '?' . $this->buildHttpQuery();
     }
 
     /**
@@ -74,8 +74,8 @@ class Horde_Oauth_Request
     public function getSignatureBaseString()
     {
         $parts = array(
-            $this->_method,
-            $this->_url,
+            $this->_getNormalizedHttpMethod(),
+            $this->_getNormalizedUrl(),
             $this->_getSignableParameters()
         );
 
@@ -94,6 +94,8 @@ class Horde_Oauth_Request
         return implode('&', $parts);
     }
 
+    /**
+     */
     public function buildAuthorizationHeader($realm = '')
     {
         $header = '';
@@ -166,4 +168,31 @@ class Horde_Oauth_Request
         return implode('&', $pairs);
     }
 
+    /**
+     * Uppercases the HTTP method
+     */
+    protected function _getNormalizedHttpMethod()
+    {
+        return strtoupper($this->_method);
+    }
+
+    /**
+     * Parse the url and rebuilds it to be scheme://host/path
+     */
+    protected function _getNormalizedUrl()
+    {
+        $parts = parse_url($this->_url);
+
+        $port = !empty($parts['port']) ? $parts['port'] : '80';
+        $scheme = $parts['scheme'];
+        $host = $parts['host'];
+        $path = !empty($parts['path']) ? $parts['path'] : '';
+
+        if (($scheme == 'https' && $port != '443') ||
+            ($scheme == 'http' && $port != '80')) {
+            $host = "$host:$port";
+        }
+
+        return "$scheme://$host$path";
+    }
 }
index a9ab419..4cd16cd 100644 (file)
@@ -26,5 +26,4 @@ abstract class Horde_Oauth_SignatureMethod_Base
     {
         return $signature == $this->sign($request, $consumer, $token);
     }
-
 }
index 668bec3..d3fb9a7 100644 (file)
@@ -37,5 +37,4 @@ class Horde_Oauth_SignatureMethod_HmacSha1 extends Horde_Oauth_SignatureMethod_B
 
         return base64_encode(hash_hmac('sha1', $baseString, $key, true));
     }
-
 }
index 1148e3c..4e9fd8a 100644 (file)
@@ -37,5 +37,4 @@ class Horde_Oauth_SignatureMethod_Plaintext extends Horde_Oauth_SignatureMethod_
 
         return Horde_Oauth_Utils::urlencodeRfc3986(implode('&', $signature));
     }
-
 }
index 5aef78d..c118de7 100644 (file)
@@ -51,5 +51,4 @@ class Horde_Oauth_SignatureMethod_RsaSha1 extends Horde_Oauth_SignatureMethod_Ba
 
         return $result == 1;
     }
-
 }
index 8ab1661..8936cd6 100644 (file)
@@ -47,5 +47,4 @@ class Horde_Oauth_Token
         parse_str($string, $parts);
         return new self($parts['oauth_token'], $parts['oauth_token_secret']);
     }
-
 }