]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Plugin onAutoload replaces _ with / in lib paths, this renames some classes.
authorMikael Nordfeldth <mmn@hethane.se>
Wed, 2 Oct 2013 12:07:53 +0000 (14:07 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Wed, 2 Oct 2013 12:07:53 +0000 (14:07 +0200)
14 files changed:
plugins/Irc/IrcPlugin.php
plugins/Irc/lib/fake_irc.php [deleted file]
plugins/Irc/lib/fakeirc.php [new file with mode: 0644]
plugins/Xmpp/XmppPlugin.php
plugins/Xmpp/lib/queued_xmpp.php [deleted file]
plugins/Xmpp/lib/queuedxmpp.php [new file with mode: 0644]
plugins/Xmpp/lib/sharing_xmpp.php [deleted file]
plugins/Xmpp/lib/sharingxmpp.php [new file with mode: 0644]
plugins/Xmpp/lib/xmppmanager.php
plugins/YammerImport/README
plugins/YammerImport/lib/sn_yammerclient.php [deleted file]
plugins/YammerImport/lib/snyammerclient.php [new file with mode: 0644]
plugins/YammerImport/lib/yammerimporter.php
plugins/YammerImport/lib/yammerrunner.php

index 18d1a0afe1b1f719d4dd007d7009fcb0e59c000a..0610625a13f9cf0f77662c60af58337a3af3846e 100644 (file)
@@ -356,7 +356,7 @@ class IrcPlugin extends ImPlugin {
             $this->regcheck = true;
         }
 
-        $this->fake_irc = new Fake_Irc;
+        $this->fake_irc = new FakeIrc;
 
         /*
          * Commands allowed to return output to a channel
diff --git a/plugins/Irc/lib/fake_irc.php b/plugins/Irc/lib/fake_irc.php
deleted file mode 100644 (file)
index 81b8676..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Instead of sending IRC messages, retrieve the raw data that would be sent
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Network
- * @package   StatusNet
- * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>
- * @copyright 2010 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
-
-class Fake_Irc extends Phergie_Driver_Streams {
-    public $would_be_sent = null;
-
-    /**
-    * Store the components for sending a command
-    *
-    * @param string $command Command
-    * @param array $args Arguments
-    * @return void
-    */
-    protected function send($command, $args = '') {
-        $this->would_be_sent = array('command' => $command, 'args' => $args);
-    }
-}
diff --git a/plugins/Irc/lib/fakeirc.php b/plugins/Irc/lib/fakeirc.php
new file mode 100644 (file)
index 0000000..ea5e433
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Instead of sending IRC messages, retrieve the raw data that would be sent
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Network
+ * @package   StatusNet
+ * @author    Luke Fitzgerald <lw.fitzgerald@googlemail.com>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+    exit(1);
+}
+
+class FakeIrc extends Phergie_Driver_Streams {
+    public $would_be_sent = null;
+
+    /**
+    * Store the components for sending a command
+    *
+    * @param string $command Command
+    * @param array $args Arguments
+    * @return void
+    */
+    protected function send($command, $args = '') {
+        $this->would_be_sent = array('command' => $command, 'args' => $args);
+    }
+}
index 61b299865691bfa46d1a272cbcfb8f5d80f7b9f3..51139a6684d095740cd999eaf0f3e843944dd928 100644 (file)
@@ -390,7 +390,7 @@ class XmppPlugin extends ImPlugin
      * Build a queue-proxied XMPP interface object. Any outgoing messages
      * will be run back through us for enqueing rather than sent directly.
      *
-     * @return Queued_XMPP
+     * @return QueuedXMPP
      * @throws Exception if server settings are invalid.
      */
     function queuedConnection(){
@@ -411,7 +411,7 @@ class XmppPlugin extends ImPlugin
             throw new Exception(_m('You must specify a password in the configuration.'));
         }
 
-        return new Queued_XMPP($this, $this->host ?
+        return new QueuedXMPP($this, $this->host ?
                                     $this->host :
                                     $this->server,
                                     $this->port,
diff --git a/plugins/Xmpp/lib/queued_xmpp.php b/plugins/Xmpp/lib/queued_xmpp.php
deleted file mode 100644 (file)
index aeb7584..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Queue-mediated proxy class for outgoing XMPP messages.
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Network
- * @package   StatusNet
- * @author    Brion Vibber <brion@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
-
-class Queued_XMPP extends XMPPHP_XMPP
-{
-    /**
-     * Reference to the XmppPlugin object we're hooked up to.
-     */
-    public $plugin;
-
-       /**
-        * Constructor
-        *
-     * @param XmppPlugin $plugin
-        * @param string  $host
-        * @param integer $port
-        * @param string  $user
-        * @param string  $password
-        * @param string  $resource
-        * @param string  $server
-        * @param boolean $printlog
-        * @param string  $loglevel
-        */
-       public function __construct($plugin, $host, $port, $user, $password, $resource, $server = null, $printlog = false, $loglevel = null)
-       {
-        $this->plugin = $plugin;
-
-        parent::__construct($host, $port, $user, $password, $resource, $server, $printlog, $loglevel);
-
-        // We use $host to connect, but $server to build JIDs if specified.
-        // This seems to fix an upstream bug where $host was used to build
-        // $this->basejid, never seen since it isn't actually used in the base
-        // classes.
-        if (!$server) {
-            $server = $this->host;
-        }
-        $this->basejid = $this->user . '@' . $server;
-
-        // Normally the fulljid is filled out by the server at resource binding
-        // time, but we need to do it since we're not talking to a real server.
-        $this->fulljid = "{$this->basejid}/{$this->resource}";
-    }
-
-    /**
-     * Send a formatted message to the outgoing queue for later forwarding
-     * to a real XMPP connection.
-     *
-     * @param string $msg
-     */
-    public function send($msg, $timeout=NULL)
-    {
-        $this->plugin->enqueueOutgoingRaw($msg);
-    }
-
-    //@{
-    /**
-     * Stream i/o functions disabled; only do output
-     */
-    public function connect($timeout = 30, $persistent = false, $sendinit = true)
-    {
-        // No i18n needed. Test message.
-        throw new Exception('Cannot connect to server from fake XMPP.');
-    }
-
-    public function disconnect()
-    {
-        // No i18n needed. Test message.
-        throw new Exception('Cannot connect to server from fake XMPP.');
-    }
-
-    public function process()
-    {
-        // No i18n needed. Test message.
-        throw new Exception('Cannot read stream from fake XMPP.');
-    }
-
-    public function processUntil($event, $timeout=-1)
-    {
-        // No i18n needed. Test message.
-        throw new Exception('Cannot read stream from fake XMPP.');
-    }
-
-    public function read()
-    {
-        // No i18n needed. Test message.
-        throw new Exception('Cannot read stream from fake XMPP.');
-    }
-
-    public function readyToProcess()
-    {
-        // No i18n needed. Test message.
-        throw new Exception('Cannot read stream from fake XMPP.');
-    }
-    //@}
-}
diff --git a/plugins/Xmpp/lib/queuedxmpp.php b/plugins/Xmpp/lib/queuedxmpp.php
new file mode 100644 (file)
index 0000000..5a3c464
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Queue-mediated proxy class for outgoing XMPP messages.
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Network
+ * @package   StatusNet
+ * @author    Brion Vibber <brion@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+    exit(1);
+}
+
+class QueuedXMPP extends XMPPHP_XMPP
+{
+    /**
+     * Reference to the XmppPlugin object we're hooked up to.
+     */
+    public $plugin;
+
+       /**
+        * Constructor
+        *
+     * @param XmppPlugin $plugin
+        * @param string  $host
+        * @param integer $port
+        * @param string  $user
+        * @param string  $password
+        * @param string  $resource
+        * @param string  $server
+        * @param boolean $printlog
+        * @param string  $loglevel
+        */
+       public function __construct($plugin, $host, $port, $user, $password, $resource, $server = null, $printlog = false, $loglevel = null)
+       {
+        $this->plugin = $plugin;
+
+        parent::__construct($host, $port, $user, $password, $resource, $server, $printlog, $loglevel);
+
+        // We use $host to connect, but $server to build JIDs if specified.
+        // This seems to fix an upstream bug where $host was used to build
+        // $this->basejid, never seen since it isn't actually used in the base
+        // classes.
+        if (!$server) {
+            $server = $this->host;
+        }
+        $this->basejid = $this->user . '@' . $server;
+
+        // Normally the fulljid is filled out by the server at resource binding
+        // time, but we need to do it since we're not talking to a real server.
+        $this->fulljid = "{$this->basejid}/{$this->resource}";
+    }
+
+    /**
+     * Send a formatted message to the outgoing queue for later forwarding
+     * to a real XMPP connection.
+     *
+     * @param string $msg
+     */
+    public function send($msg, $timeout=NULL)
+    {
+        $this->plugin->enqueueOutgoingRaw($msg);
+    }
+
+    //@{
+    /**
+     * Stream i/o functions disabled; only do output
+     */
+    public function connect($timeout = 30, $persistent = false, $sendinit = true)
+    {
+        // No i18n needed. Test message.
+        throw new Exception('Cannot connect to server from fake XMPP.');
+    }
+
+    public function disconnect()
+    {
+        // No i18n needed. Test message.
+        throw new Exception('Cannot connect to server from fake XMPP.');
+    }
+
+    public function process()
+    {
+        // No i18n needed. Test message.
+        throw new Exception('Cannot read stream from fake XMPP.');
+    }
+
+    public function processUntil($event, $timeout=-1)
+    {
+        // No i18n needed. Test message.
+        throw new Exception('Cannot read stream from fake XMPP.');
+    }
+
+    public function read()
+    {
+        // No i18n needed. Test message.
+        throw new Exception('Cannot read stream from fake XMPP.');
+    }
+
+    public function readyToProcess()
+    {
+        // No i18n needed. Test message.
+        throw new Exception('Cannot read stream from fake XMPP.');
+    }
+    //@}
+}
diff --git a/plugins/Xmpp/lib/sharing_xmpp.php b/plugins/Xmpp/lib/sharing_xmpp.php
deleted file mode 100644 (file)
index 4b69125..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Send and receive notices using the Jabber network
- *
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @category  Jabber
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-class Sharing_XMPP extends XMPPHP_XMPP
-{
-    function getSocket()
-    {
-        return $this->socket;
-    }
-}
diff --git a/plugins/Xmpp/lib/sharingxmpp.php b/plugins/Xmpp/lib/sharingxmpp.php
new file mode 100644 (file)
index 0000000..99e1978
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Send and receive notices using the Jabber network
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Jabber
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+class SharingXMPP extends XMPPHP_XMPP
+{
+    function getSocket()
+    {
+        return $this->socket;
+    }
+}
index c7d4c15dd6987568a8f182ab01a4d0acb0ef5637..372824ce54dc2f960958ad63af71fafdba55d40b 100644 (file)
@@ -131,7 +131,7 @@ class XmppManager extends ImManager
     {
         if (!$this->conn || $this->conn->isDisconnected()) {
             $resource = 'queue' . posix_getpid();
-            $this->conn = new Sharing_XMPP($this->plugin->host ?
+            $this->conn = new SharingXMPP($this->plugin->host ?
                                     $this->plugin->host :
                                     $this->plugin->server,
                                     $this->plugin->port,
index db16744dcec483ed85dabb1f8d713a06079eb4cb..47fc07023aedfb8006695a34d247cc4264d87153 100644 (file)
@@ -146,10 +146,10 @@ Standalone classes
 ------------------
 
 YammerRunner: encapsulates the iterative process of retrieving the various users,
-              groups, and messages via SN_YammerClient and saving them locally
+              groups, and messages via SNYammerClient and saving them locally
               via YammerImporter.
 
-SN_YammerClient: encapsulates HTTP+OAuth interface to Yammer API, returns data
+SNYammerClient: encapsulates HTTP+OAuth interface to Yammer API, returns data
                  as straight decoded JSON object trees.
 
 YammerImporter: encapsulates logic to pull information from the returned API data
diff --git a/plugins/YammerImport/lib/sn_yammerclient.php b/plugins/YammerImport/lib/sn_yammerclient.php
deleted file mode 100644 (file)
index 2827bdc..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * Basic client class for Yammer's OAuth/JSON API.
- *
- * @package YammerImportPlugin
- * @author Brion Vibber <brion@status.net>
- */
-class SN_YammerClient
-{
-    protected $apiBase = "https://www.yammer.com";
-    protected $consumerKey, $consumerSecret;
-    protected $token, $tokenSecret, $verifier;
-
-    public function __construct($consumerKey, $consumerSecret, $token=null, $tokenSecret=null)
-    {
-        $this->consumerKey = $consumerKey;
-        $this->consumerSecret = $consumerSecret;
-        $this->token = $token;
-        $this->tokenSecret = $tokenSecret;
-    }
-
-    /**
-     * Make an HTTP GET request with OAuth headers and return an HTTPResponse
-     * with the returned body and codes.
-     *
-     * @param string $url
-     * @return HTTPResponse
-     *
-     * @throws Exception on low-level network error
-     */
-    protected function httpGet($url)
-    {
-        $headers = array('Authorization: ' . $this->authHeader());
-
-        $client = HTTPClient::start();
-        return $client->get($url, $headers);
-    }
-
-    /**
-     * Make an HTTP GET request with OAuth headers and return the response body
-     * on success.
-     *
-     * @param string $url
-     * @return string
-     *
-     * @throws Exception on low-level network or HTTP error
-     */
-    public function fetchUrl($url)
-    {
-        $response = $this->httpGet($url);
-        if ($response->isOk()) {
-            return $response->getBody();
-        } else {
-            // TRANS: Exeption thrown when an external Yammer system gives an error.
-            // TRANS: %1$s is an HTTP error code, %2$s is the error message body.
-            throw new Exception(sprintf(_m('Yammer API returned HTTP code %1$s: %2$s'),
-                                $response->getStatus(),
-                                $response->getBody()));
-        }
-    }
-
-    /**
-     * Make an HTTP hit with OAuth headers and return the response body on success.
-     *
-     * @param string $path URL chunk for the API method
-     * @param array $params
-     * @return string
-     *
-     * @throws Exception on low-level network or HTTP error
-     */
-    protected function fetchApi($path, $params=array())
-    {
-        $url = $this->apiBase . '/' . $path;
-        if ($params) {
-            $url .= '?' . http_build_query($params, null, '&');
-        }
-        return $this->fetchUrl($url);
-    }
-
-    /**
-     * Hit the main Yammer API point and decode returned JSON data.
-     *
-     * @param string $method
-     * @param array $params
-     * @return array from JSON data
-     *
-     * @throws Exception for HTTP error or bad JSON return
-     */
-    public function api($method, $params=array())
-    {
-        $body = $this->fetchApi("api/v1/$method.json", $params);
-        $data = json_decode($body, true);
-        if ($data === null) {
-            common_log(LOG_ERR, "Invalid JSON response from Yammer API: " . $body);
-            // TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
-            throw new Exception(_m('Invalid JSON response from Yammer API.'));
-        }
-        return $data;
-    }
-
-    /**
-     * Build an Authorization header value from the keys we have available.
-     */
-    protected function authHeader()
-    {
-        // token
-        // token_secret
-        $params = array('realm' => '',
-                        'oauth_consumer_key' => $this->consumerKey,
-                        'oauth_signature_method' => 'PLAINTEXT',
-                        'oauth_timestamp' => time(),
-                        'oauth_nonce' => time(),
-                        'oauth_version' => '1.0');
-        if ($this->token) {
-            $params['oauth_token'] = $this->token;
-        }
-        if ($this->tokenSecret) {
-            $params['oauth_signature'] = $this->consumerSecret . '&' . $this->tokenSecret;
-        } else {
-            $params['oauth_signature'] = $this->consumerSecret . '&';
-        }
-        if ($this->verifier) {
-            $params['oauth_verifier'] = $this->verifier;
-        }
-        $parts = array_map(array($this, 'authHeaderChunk'), array_keys($params), array_values($params));
-        return 'OAuth ' . implode(', ', $parts);
-    }
-
-    /**
-     * Encode a key-value pair for use in an authentication header.
-     *
-     * @param string $key
-     * @param string $val
-     * @return string
-     */
-    protected function authHeaderChunk($key, $val)
-    {
-        return urlencode($key) . '="' . urlencode($val) . '"';
-    }
-
-    /**
-     * Ask the Yammer server for a request token, which can be passed on
-     * to authorizeUrl() for the user to start the authentication process.
-     *
-     * @return array of oauth return data; should contain nice things
-     */
-    public function requestToken()
-    {
-        if ($this->token || $this->tokenSecret) {
-            // TRANS: Exeption thrown when a trust relationship has already been established.
-            throw new Exception(_m('Requesting a token, but already set up with a token.'));
-        }
-        $data = $this->fetchApi('oauth/request_token');
-        $arr = array();
-        parse_str($data, $arr);
-        return $arr;
-    }
-
-    /**
-     * Get a final access token from the verifier/PIN code provided to
-     * the user from Yammer's auth pages.
-     *
-     * @return array of oauth return data; should contain nice things
-     */
-    public function accessToken($verifier)
-    {
-        $this->verifier = $verifier;
-        $data = $this->fetchApi('oauth/access_token');
-        $this->verifier = null;
-        $arr = array();
-        parse_str($data, $arr);
-        return $arr;
-    }
-
-    /**
-     * Give the URL to send users to to authorize a new app setup.
-     *
-     * @param string $token as returned from accessToken()
-     * @return string URL
-     */
-    public function authorizeUrl($token)
-    {
-        return $this->apiBase . '/oauth/authorize?oauth_token=' . urlencode($token);
-    }
-
-    /**
-     * High-level API hit: fetch all messages in the network (up to 20 at a time).
-     * Return data is the full JSON array returned, including meta and references
-     * sections.
-     *
-     * The matching messages themselves will be in the 'messages' item within.
-     *
-     * @param array $options optional set of additional params for the request.
-     * @return array
-     *
-     * @throws Exception on low-level or HTTP error
-     */
-    public function messages($params=array())
-    {
-        return $this->api('messages', $params);
-    }
-
-    /**
-     * High-level API hit: fetch all users in the network (up to 50 at a time).
-     * Return data is the full JSON array returned, listing user items.
-     *
-     * The matching messages themselves will be in the 'users' item within.
-     *
-     * @param array $options optional set of additional params for the request.
-     * @return array of JSON-sourced user data arrays
-     *
-     * @throws Exception on low-level or HTTP error
-     */
-    public function users($params=array())
-    {
-        return $this->api('users', $params);
-    }
-
-    /**
-     * High-level API hit: fetch all groups in the network (up to 20 at a time).
-     * Return data is the full JSON array returned, listing user items.
-     *
-     * The matching messages themselves will be in the 'users' item within.
-     *
-     * @param array $options optional set of additional params for the request.
-     * @return array of JSON-sourced user data arrays
-     *
-     * @throws Exception on low-level or HTTP error
-     */
-    public function groups($params=array())
-    {
-        return $this->api('groups', $params);
-    }
-}
diff --git a/plugins/YammerImport/lib/snyammerclient.php b/plugins/YammerImport/lib/snyammerclient.php
new file mode 100644 (file)
index 0000000..a322157
--- /dev/null
@@ -0,0 +1,252 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Basic client class for Yammer's OAuth/JSON API.
+ *
+ * @package YammerImportPlugin
+ * @author Brion Vibber <brion@status.net>
+ */
+class SNYammerClient
+{
+    protected $apiBase = "https://www.yammer.com";
+    protected $consumerKey, $consumerSecret;
+    protected $token, $tokenSecret, $verifier;
+
+    public function __construct($consumerKey, $consumerSecret, $token=null, $tokenSecret=null)
+    {
+        $this->consumerKey = $consumerKey;
+        $this->consumerSecret = $consumerSecret;
+        $this->token = $token;
+        $this->tokenSecret = $tokenSecret;
+    }
+
+    /**
+     * Make an HTTP GET request with OAuth headers and return an HTTPResponse
+     * with the returned body and codes.
+     *
+     * @param string $url
+     * @return HTTPResponse
+     *
+     * @throws Exception on low-level network error
+     */
+    protected function httpGet($url)
+    {
+        $headers = array('Authorization: ' . $this->authHeader());
+
+        $client = HTTPClient::start();
+        return $client->get($url, $headers);
+    }
+
+    /**
+     * Make an HTTP GET request with OAuth headers and return the response body
+     * on success.
+     *
+     * @param string $url
+     * @return string
+     *
+     * @throws Exception on low-level network or HTTP error
+     */
+    public function fetchUrl($url)
+    {
+        $response = $this->httpGet($url);
+        if ($response->isOk()) {
+            return $response->getBody();
+        } else {
+            // TRANS: Exeption thrown when an external Yammer system gives an error.
+            // TRANS: %1$s is an HTTP error code, %2$s is the error message body.
+            throw new Exception(sprintf(_m('Yammer API returned HTTP code %1$s: %2$s'),
+                                $response->getStatus(),
+                                $response->getBody()));
+        }
+    }
+
+    /**
+     * Make an HTTP hit with OAuth headers and return the response body on success.
+     *
+     * @param string $path URL chunk for the API method
+     * @param array $params
+     * @return string
+     *
+     * @throws Exception on low-level network or HTTP error
+     */
+    protected function fetchApi($path, $params=array())
+    {
+        $url = $this->apiBase . '/' . $path;
+        if ($params) {
+            $url .= '?' . http_build_query($params, null, '&');
+        }
+        return $this->fetchUrl($url);
+    }
+
+    /**
+     * Hit the main Yammer API point and decode returned JSON data.
+     *
+     * @param string $method
+     * @param array $params
+     * @return array from JSON data
+     *
+     * @throws Exception for HTTP error or bad JSON return
+     */
+    public function api($method, $params=array())
+    {
+        $body = $this->fetchApi("api/v1/$method.json", $params);
+        $data = json_decode($body, true);
+        if ($data === null) {
+            common_log(LOG_ERR, "Invalid JSON response from Yammer API: " . $body);
+            // TRANS: Exeption thrown when an external Yammer system an invalid JSON response.
+            throw new Exception(_m('Invalid JSON response from Yammer API.'));
+        }
+        return $data;
+    }
+
+    /**
+     * Build an Authorization header value from the keys we have available.
+     */
+    protected function authHeader()
+    {
+        // token
+        // token_secret
+        $params = array('realm' => '',
+                        'oauth_consumer_key' => $this->consumerKey,
+                        'oauth_signature_method' => 'PLAINTEXT',
+                        'oauth_timestamp' => time(),
+                        'oauth_nonce' => time(),
+                        'oauth_version' => '1.0');
+        if ($this->token) {
+            $params['oauth_token'] = $this->token;
+        }
+        if ($this->tokenSecret) {
+            $params['oauth_signature'] = $this->consumerSecret . '&' . $this->tokenSecret;
+        } else {
+            $params['oauth_signature'] = $this->consumerSecret . '&';
+        }
+        if ($this->verifier) {
+            $params['oauth_verifier'] = $this->verifier;
+        }
+        $parts = array_map(array($this, 'authHeaderChunk'), array_keys($params), array_values($params));
+        return 'OAuth ' . implode(', ', $parts);
+    }
+
+    /**
+     * Encode a key-value pair for use in an authentication header.
+     *
+     * @param string $key
+     * @param string $val
+     * @return string
+     */
+    protected function authHeaderChunk($key, $val)
+    {
+        return urlencode($key) . '="' . urlencode($val) . '"';
+    }
+
+    /**
+     * Ask the Yammer server for a request token, which can be passed on
+     * to authorizeUrl() for the user to start the authentication process.
+     *
+     * @return array of oauth return data; should contain nice things
+     */
+    public function requestToken()
+    {
+        if ($this->token || $this->tokenSecret) {
+            // TRANS: Exeption thrown when a trust relationship has already been established.
+            throw new Exception(_m('Requesting a token, but already set up with a token.'));
+        }
+        $data = $this->fetchApi('oauth/request_token');
+        $arr = array();
+        parse_str($data, $arr);
+        return $arr;
+    }
+
+    /**
+     * Get a final access token from the verifier/PIN code provided to
+     * the user from Yammer's auth pages.
+     *
+     * @return array of oauth return data; should contain nice things
+     */
+    public function accessToken($verifier)
+    {
+        $this->verifier = $verifier;
+        $data = $this->fetchApi('oauth/access_token');
+        $this->verifier = null;
+        $arr = array();
+        parse_str($data, $arr);
+        return $arr;
+    }
+
+    /**
+     * Give the URL to send users to to authorize a new app setup.
+     *
+     * @param string $token as returned from accessToken()
+     * @return string URL
+     */
+    public function authorizeUrl($token)
+    {
+        return $this->apiBase . '/oauth/authorize?oauth_token=' . urlencode($token);
+    }
+
+    /**
+     * High-level API hit: fetch all messages in the network (up to 20 at a time).
+     * Return data is the full JSON array returned, including meta and references
+     * sections.
+     *
+     * The matching messages themselves will be in the 'messages' item within.
+     *
+     * @param array $options optional set of additional params for the request.
+     * @return array
+     *
+     * @throws Exception on low-level or HTTP error
+     */
+    public function messages($params=array())
+    {
+        return $this->api('messages', $params);
+    }
+
+    /**
+     * High-level API hit: fetch all users in the network (up to 50 at a time).
+     * Return data is the full JSON array returned, listing user items.
+     *
+     * The matching messages themselves will be in the 'users' item within.
+     *
+     * @param array $options optional set of additional params for the request.
+     * @return array of JSON-sourced user data arrays
+     *
+     * @throws Exception on low-level or HTTP error
+     */
+    public function users($params=array())
+    {
+        return $this->api('users', $params);
+    }
+
+    /**
+     * High-level API hit: fetch all groups in the network (up to 20 at a time).
+     * Return data is the full JSON array returned, listing user items.
+     *
+     * The matching messages themselves will be in the 'users' item within.
+     *
+     * @param array $options optional set of additional params for the request.
+     * @return array of JSON-sourced user data arrays
+     *
+     * @throws Exception on low-level or HTTP error
+     */
+    public function groups($params=array())
+    {
+        return $this->api('groups', $params);
+    }
+}
index f589753796384c3d7206a8462e890d35bc9b5f6d..1542b5909d63d48b5890bf54038e7906f340c746 100644 (file)
@@ -27,7 +27,7 @@ class YammerImporter
 {
     protected $client;
 
-    function __construct(SN_YammerClient $client)
+    function __construct(SNYammerClient $client)
     {
         $this->client = $client;
     }
index 5907ce0c326b6a9cac341ac071bc1e845a85f236..0da2fc9db4daa3c504ee06fce62663d2076ea293 100644 (file)
@@ -62,7 +62,7 @@ class YammerRunner
     {
         $this->state = $state;
 
-        $this->client = new SN_YammerClient(
+        $this->client = new SNYammerClient(
             common_config('yammer', 'consumer_key'),
             common_config('yammer', 'consumer_secret'),
             $this->state->oauth_token,