Things are moving along nicely, but there are still some pretty big areas that are missing or busted.

  • Authentication (Session working mostly, oAuth exists but has not been significantly tested)

Comments

teunis’s picture

Testing with Services 3.x and 3.x-dev on Drupal 7
oAuth with REST - ok!
oAuth with XMLRPC - If you see "invalid signature" and are running on an alternate port, try this patch:
I'm not sure how to submit this formally - but it works for me. It could probably be made prettier.

diff -ur broken/oauth/lib/OAuth.php fixed/oauth/lib/OAuth.php
--- broken/oauth/lib/OAuth.php  2011-10-24 22:46:56.000000000 -0700
+++ fixed/oauth/lib/OAuth.php   2011-11-10 11:32:56.449376203 -0800
@@ -228,7 +228,14 @@
 
   function __construct($http_method, $http_url, $parameters=NULL) {
     $parameters = ($parameters) ? $parameters : array();
-    $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
+    $parts = parse_url($http_url, PHP_URL_QUERY);
+    if (isset($parts['host']) && isset($parts['port'])) {
+      $qq = strpos($parts['host'], ':'.$parts['port']);
+      if ($qq > 0) {
+       $parts['host'] = substr($parts['host'], $qq);
+      }
+    }
+    $parameters = array_merge( OAuthUtil::parse_parameters($parts), $parameters);
     $this->parameters = $parameters;
     $this->http_method = $http_method;
     $this->http_url = $http_url;
@@ -388,7 +395,9 @@
 
     if (($scheme == 'https' && $port != '443')
         || ($scheme == 'http' && $port != '80')) {
-      $host = "$host:$port";
+      if (!strpos($host, ':'.$port)) {
+       $host = "$host:$port";
+      }
     }
     return "$scheme://$host$path";
   }
jaimealsilva’s picture

Please @teunis, or someone with knowledge, document how to create and TEST services with OAuth authentication.
There are a lot of unfinished documents and broken links to videos all over Drupal.org but no official documents on how to do it and test it.