You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by ag...@apache.org on 2010/01/04 18:43:46 UTC
svn commit: r895721 - in /incubator/shindig/trunk/php/src:
common/ShindigOAuth.php gadgets/oauth/OAuthFetcher.php
Author: agektmr
Date: Mon Jan 4 17:43:45 2010
New Revision: 895721
URL: http://svn.apache.org/viewvc?rev=895721&view=rev
Log:
Fix for OAuth Proxy on POST. Should now work. example gadget: http://1.latest.gadgetwitter.appspot.com/partuza.xml
Modified:
incubator/shindig/trunk/php/src/common/ShindigOAuth.php
incubator/shindig/trunk/php/src/gadgets/oauth/OAuthFetcher.php
Modified: incubator/shindig/trunk/php/src/common/ShindigOAuth.php
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/common/ShindigOAuth.php?rev=895721&r1=895720&r2=895721&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/common/ShindigOAuth.php (original)
+++ incubator/shindig/trunk/php/src/common/ShindigOAuth.php Mon Jan 4 17:43:45 2010
@@ -170,7 +170,7 @@
return false;
}
$semi = strpos($contentType, ";");
- if ($semi >= 0) {
+ if ($semi != false) {
$contentType = substr($contentType, 0, $semi);
}
return strtolower(ShindigOAuth::$FORM_ENCODED) == strtolower(trim($contentType));
Modified: incubator/shindig/trunk/php/src/gadgets/oauth/OAuthFetcher.php
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/gadgets/oauth/OAuthFetcher.php?rev=895721&r1=895720&r2=895721&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/gadgets/oauth/OAuthFetcher.php (original)
+++ incubator/shindig/trunk/php/src/gadgets/oauth/OAuthFetcher.php Mon Jan 4 17:43:45 2010
@@ -417,9 +417,9 @@
$url = ShindigOAuthUtil::addParameters($url, $oauthParams);
break;
}
- $postBodyBytes = ($postBody == null) ? null : null; //$postBody->getBytes("UTF-8"); //See what can we do with this?
$rcr = new RemoteContentRequest($url);
- $rcr->createRemoteContentRequest($method, $url, $newHeaders, $postBodyBytes, $options);
+ $rcr->createRemoteContentRequest($method, $url, $newHeaders, null, $options);
+ $rcr->setPostBody($postBody);
return $rcr;
}
@@ -549,17 +549,48 @@
*/
private function fetchData() {
try {
- $msgParams = ShindigOAuthUtil::isFormEncoded($this->realRequest->getContentType()) ? ShindigOAuthUtil::urldecode_rfc3986($this->realRequest->getPostBody()) : array();
+ // TODO: it'd be better using $this->realRequest->getContentType(), but not set before hand. Temporary hack.
+ $postBody = $this->realRequest->getPostBody();
+ $url = $this->realRequest->getUrl();
+ $msgParams = array();
+ if (ShindigOAuthUtil::isFormEncoded($this->realRequest->getHeader("Content-Type")) && strlen($postBody) > 0) {
+ $entries = explode('&', $postBody);
+ foreach ($entries as $entry) {
+ $parts = explode('=', $entry);
+ if (count($parts) == 2) {
+ $msgParams[ShindigOAuthUtil::urldecode_rfc3986($parts[0])] = ShindigOAuthUtil::urldecode_rfc3986($parts[1]);
+ }
+ }
+ }
$method = $this->realRequest->getMethod();
$msgParams[self::$XOAUTH_APP_URL] = $this->authToken->getAppUrl();
// Build and sign the message.
- $oauthRequest = $this->newRequestMessageMethod($method, $this->realRequest->getUrl(), $msgParams);
- $rcr = $this->createRemoteContentRequest($this->filterOAuthParams($oauthRequest), $this->realRequest->getMethod(), $this->realRequest->getUrl(), $this->realRequest->getHeaders(), $this->realRequest->getContentType(), $this->realRequest->getPostBody(), $this->realRequest->getOptions());
- //TODO is there a better way to detect an SP error?
+ $oauthRequest = $this->newRequestMessageMethod($method, $url, $msgParams);
+ $oauthParams = $this->filterOAuthParams($oauthRequest);
+ $newHeaders = array();
+ switch ($method) {
+ case 'POST' :
+ if (empty($postBody) || count($postBody) == 0) {
+ $postBody = ShindigOAuthUtil::getPostBodyString($oauthParams);
+ } else {
+ $postBody = $postBody . "&" . ShindigOAuthUtil::getPostBodyString($oauthParams);
+ }
+ // To avoid 417 Response from server, adding empty "Expect" header
+ $newHeaders['Expect'] = '';
+ break;
+ case 'GET' :
+ $url = ShindigOAuthUtil::addParameters($url, $oauthParams);
+ break;
+ }
+ // To choose HTTP method client requested, we don't use $this->createRemoteContentRequest() here.
+ $rcr = new RemoteContentRequest($url);
+ $rcr->createRemoteContentRequest($method, $url, $newHeaders, null, $this->realRequest->getOptions());
+ $rcr->setPostBody($postBody);
$remoteFetcherClass = Config::get('remote_content_fetcher');
$fetcher = new $remoteFetcherClass();
$content = $fetcher->fetchRequest($rcr);
$statusCode = $content->getHttpCode();
+ //TODO is there a better way to detect an SP error? For example: http://wiki.oauth.net/ProblemReporting
if ($statusCode == 401) {
$tokenKey = $this->buildTokenKey();
$this->tokenStore->removeTokenAndSecret($tokenKey);