]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/omb.php
Fix for cross site OMB posting problem
[quix0rs-gnu-social.git] / lib / omb.php
index b9d0eef64e6291e69e38d505590acd00a623f45c..17132a594f6ec20ea2e079270d9a791895297f2a 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, Control Yourself, Inc.
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, 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
@@ -17,9 +17,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('LACONICA')) {
-    exit(1);
-}
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
 require_once INSTALLDIR.'/lib/oauthstore.php';
 require_once 'OAuth.php';
@@ -31,11 +29,9 @@ require_once 'Auth/Yadis/Yadis.php';
 
 function omb_oauth_consumer()
 {
-    static $con = null;
-    if (is_null($con)) {
-        $con = new OAuthConsumer(common_root_url(), '');
-    }
-    return $con;
+    // Don't try to make this static. Leads to issues in
+    // multi-site setups - Z
+    return new OAuthConsumer(common_root_url(), '');
 }
 
 function omb_oauth_server()
@@ -52,7 +48,7 @@ function omb_oauth_datastore()
 {
     static $store = null;
     if (is_null($store)) {
-        $store = new LaconicaDataStore();
+        $store = new StatusNetOAuthDataStore();
     }
     return $store;
 }
@@ -69,7 +65,14 @@ function omb_hmac_sha1()
 function omb_broadcast_notice($notice)
 {
 
-    $omb_notice = notice_to_omb_notice($notice);
+    try {
+        $omb_notice = notice_to_omb_notice($notice);
+    } catch (Exception $e) {
+        // @fixme we should clean up or highlight the problem item
+        common_log(LOG_ERR, 'Invalid OMB outgoing notice for notice ' . $notice->id);
+        common_log(LOG_ERR, 'Error status '.$e);
+        return true;
+    }
 
     /* Get remote users subscribed to this profile. */
     $rp = new Remote_profile();
@@ -89,7 +92,7 @@ function omb_broadcast_notice($notice)
         common_debug('Posting to ' . $rp->postnoticeurl, __FILE__);
 
         /* Post notice. */
-        $service = new Laconica_OMB_Service_Consumer(
+        $service = new StatusNet_OMB_Service_Consumer(
                      array(OMB_ENDPOINT_POSTNOTICE => $rp->postnoticeurl));
         try {
             $service->setToken($rp->token, $rp->secret);
@@ -104,7 +107,7 @@ function omb_broadcast_notice($notice)
         common_debug('Finished to ' . $rp->postnoticeurl, __FILE__);
     }
 
-    return;
+    return true;
 }
 
 function omb_broadcast_profile($profile)
@@ -137,7 +140,7 @@ function omb_broadcast_profile($profile)
         common_debug('Posting to ' . $rp->updateprofileurl, __FILE__);
 
         /* Update profile. */
-        $service = new Laconica_OMB_Service_Consumer(
+        $service = new StatusNet_OMB_Service_Consumer(
                      array(OMB_ENDPOINT_UPDATEPROFILE => $rp->updateprofileurl));
         try {
             $service->setToken($rp->token, $rp->secret);
@@ -155,13 +158,14 @@ function omb_broadcast_profile($profile)
     return;
 }
 
-class Laconica_OMB_Service_Consumer extends OMB_Service_Consumer {
+class StatusNet_OMB_Service_Consumer extends OMB_Service_Consumer {
     public function __construct($urls)
     {
         $this->services       = $urls;
         $this->datastore      = omb_oauth_datastore();
         $this->oauth_consumer = omb_oauth_consumer();
         $this->fetcher        = Auth_Yadis_Yadis::getHTTPFetcher();
+        $this->fetcher->timeout = intval(common_config('omb', 'timeout'));
     }
 
 }