summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2009-11-02 06:56:31 -0800
committerBrion Vibber <brion@pobox.com>2009-11-02 07:51:29 -0800
commitb22fc5b74aecd505d4e2df01258171fc65d312cf (patch)
treeea8cf7eb0d0df0a449b760778bc796d476fb4507 /plugins
parentd8e2d76ba93557f8c12f966b5d0afccf9fbdc83b (diff)
Revert "Rebuilt HTTPClient class as an extension of PEAR HTTP_Request2 package, adding redirect handling and convenience functions."
Going to restructure a little more before finalizing this... This reverts commit fa37967858c3c29000797e510e5f98aca8ab558f.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/BlogspamNetPlugin.php17
-rw-r--r--plugins/LinkbackPlugin.php36
-rw-r--r--plugins/SimpleUrl/SimpleUrlPlugin.php11
-rwxr-xr-xplugins/TwitterBridge/daemons/synctwitterfriends.php4
-rwxr-xr-xplugins/TwitterBridge/daemons/twitterstatusfetcher.php45
-rw-r--r--plugins/TwitterBridge/twitter.php2
-rw-r--r--plugins/TwitterBridge/twitterauthorization.php2
-rw-r--r--plugins/TwitterBridge/twitterbasicauthclient.php66
-rw-r--r--plugins/WikiHashtagsPlugin.php12
9 files changed, 122 insertions, 73 deletions
diff --git a/plugins/BlogspamNetPlugin.php b/plugins/BlogspamNetPlugin.php
index 3bdc73556..c14569746 100644
--- a/plugins/BlogspamNetPlugin.php
+++ b/plugins/BlogspamNetPlugin.php
@@ -22,7 +22,6 @@
* @category Plugin
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
- * @author Brion Vibber <brion@status.net>
* @copyright 2009 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/
@@ -70,14 +69,14 @@ class BlogspamNetPlugin extends Plugin
{
$args = $this->testArgs($notice);
common_debug("Blogspamnet args = " . print_r($args, TRUE));
- $requestBody = xmlrpc_encode_request('testComment', array($args));
-
- $request = new HTTPClient($this->baseUrl, HTTP_Request2::METHOD_POST);
- $request->addHeader('Content-Type: text/xml');
- $request->setBody($requestBody);
- $httpResponse = $request->send();
-
- $response = xmlrpc_decode($httpResponse->getBody());
+ $request = xmlrpc_encode_request('testComment', array($args));
+ $context = stream_context_create(array('http' => array('method' => "POST",
+ 'header' =>
+ "Content-Type: text/xml\r\n".
+ "User-Agent: " . $this->userAgent(),
+ 'content' => $request)));
+ $file = file_get_contents($this->baseUrl, false, $context);
+ $response = xmlrpc_decode($file);
if (xmlrpc_is_fault($response)) {
throw new ServerException("$response[faultString] ($response[faultCode])", 500);
} else {
diff --git a/plugins/LinkbackPlugin.php b/plugins/LinkbackPlugin.php
index 0513687e9..60f7a60c7 100644
--- a/plugins/LinkbackPlugin.php
+++ b/plugins/LinkbackPlugin.php
@@ -129,25 +129,27 @@ class LinkbackPlugin extends Plugin
}
}
- $request = new HTTPClient($endpoint, 'POST');
- $request->setHeader('User-Agent', $this->userAgent());
- $request->setHeader('Content-Type', 'text/xml');
- $request->setBody(xmlrpc_encode_request('pingback.ping', $args));
- try {
- $response = $request->send();
- } catch (HTTP_Request2_Exception $e) {
+ $request = xmlrpc_encode_request('pingback.ping', $args);
+ $context = stream_context_create(array('http' => array('method' => "POST",
+ 'header' =>
+ "Content-Type: text/xml\r\n".
+ "User-Agent: " . $this->userAgent(),
+ 'content' => $request)));
+ $file = file_get_contents($endpoint, false, $context);
+ if (!$file) {
common_log(LOG_WARNING,
- "Pingback request failed for '$url' ($endpoint)");
- }
- $response = xmlrpc_decode($response->getBody());
- if (xmlrpc_is_fault($response)) {
- common_log(LOG_WARNING,
- "Pingback error for '$url' ($endpoint): ".
- "$response[faultString] ($response[faultCode])");
+ "Pingback request failed for '$url' ($endpoint)");
} else {
- common_log(LOG_INFO,
- "Pingback success for '$url' ($endpoint): ".
- "'$response'");
+ $response = xmlrpc_decode($file);
+ if (xmlrpc_is_fault($response)) {
+ common_log(LOG_WARNING,
+ "Pingback error for '$url' ($endpoint): ".
+ "$response[faultString] ($response[faultCode])");
+ } else {
+ common_log(LOG_INFO,
+ "Pingback success for '$url' ($endpoint): ".
+ "'$response'");
+ }
}
}
diff --git a/plugins/SimpleUrl/SimpleUrlPlugin.php b/plugins/SimpleUrl/SimpleUrlPlugin.php
index d59d63e47..82d772048 100644
--- a/plugins/SimpleUrl/SimpleUrlPlugin.php
+++ b/plugins/SimpleUrl/SimpleUrlPlugin.php
@@ -65,6 +65,15 @@ class SimpleUrlPlugin extends Plugin
class SimpleUrl extends ShortUrlApi
{
protected function shorten_imp($url) {
- return $this->http_get($url);
+ $curlh = curl_init();
+ curl_setopt($curlh, CURLOPT_CONNECTTIMEOUT, 20); // # seconds to wait
+ curl_setopt($curlh, CURLOPT_USERAGENT, 'StatusNet');
+ curl_setopt($curlh, CURLOPT_RETURNTRANSFER, true);
+
+ curl_setopt($curlh, CURLOPT_URL, $this->service_url.urlencode($url));
+ $short_url = curl_exec($curlh);
+
+ curl_close($curlh);
+ return $short_url;
}
}
diff --git a/plugins/TwitterBridge/daemons/synctwitterfriends.php b/plugins/TwitterBridge/daemons/synctwitterfriends.php
index 671e3c7af..ed2bf48a2 100755
--- a/plugins/TwitterBridge/daemons/synctwitterfriends.php
+++ b/plugins/TwitterBridge/daemons/synctwitterfriends.php
@@ -152,8 +152,8 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
$friends_ids = $client->friendsIds();
} catch (Exception $e) {
common_log(LOG_WARNING, $this->name() .
- ' - error getting friend ids: ' .
- $e->getMessage());
+ ' - cURL error getting friend ids ' .
+ $e->getCode() . ' - ' . $e->getMessage());
return $friends;
}
diff --git a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
index 6c91b2860..81bbbc7c5 100755
--- a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
+++ b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
@@ -109,16 +109,12 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$flink->find();
$flinks = array();
- common_log(LOG_INFO, "hello");
while ($flink->fetch()) {
if (($flink->noticesync & FOREIGN_NOTICE_RECV) ==
FOREIGN_NOTICE_RECV) {
$flinks[] = clone($flink);
- common_log(LOG_INFO, "sync: foreign id $flink->foreign_id");
- } else {
- common_log(LOG_INFO, "nothing to sync");
}
}
@@ -519,34 +515,31 @@ class TwitterStatusFetcher extends ParallelizingDaemon
return $id;
}
- /**
- * Fetch a remote avatar image and save to local storage.
- *
- * @param string $url avatar source URL
- * @param string $filename bare local filename for download
- * @return bool true on success, false on failure
- */
function fetchAvatar($url, $filename)
{
- common_debug($this->name() . " - Fetching Twitter avatar: $url");
+ $avatarfile = Avatar::path($filename);
- $request = new HTTPClient($url, 'GET', array(
- 'follow_redirects' => true,
- ));
- $data = $request->get();
- if ($data) {
- $avatarfile = Avatar::path($filename);
- $ok = file_put_contents($avatarfile, $data);
- if (!$ok) {
- common_log(LOG_WARNING, $this->name() .
- " - Couldn't open file $filename");
- return false;
- }
- } else {
+ $out = fopen($avatarfile, 'wb');
+ if (!$out) {
+ common_log(LOG_WARNING, $this->name() .
+ " - Couldn't open file $filename");
return false;
}
- return true;
+ common_debug($this->name() . " - Fetching Twitter avatar: $url");
+
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_FILE, $out);
+ curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
+ $result = curl_exec($ch);
+ curl_close($ch);
+
+ fclose($out);
+
+ return $result;
}
}
diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php
index 3c6803e49..1a5248a9b 100644
--- a/plugins/TwitterBridge/twitter.php
+++ b/plugins/TwitterBridge/twitter.php
@@ -215,7 +215,7 @@ function broadcast_basicauth($notice, $flink)
try {
$status = $client->statusesUpdate($statustxt);
- } catch (HTTP_Request2_Exception $e) {
+ } catch (BasicAuthCurlException $e) {
return process_error($e, $flink);
}
diff --git a/plugins/TwitterBridge/twitterauthorization.php b/plugins/TwitterBridge/twitterauthorization.php
index f1daefab1..2a93ff13e 100644
--- a/plugins/TwitterBridge/twitterauthorization.php
+++ b/plugins/TwitterBridge/twitterauthorization.php
@@ -125,7 +125,7 @@ class TwitterauthorizationAction extends Action
$auth_link = $client->getAuthorizeLink($req_tok);
- } catch (OAuthClientException $e) {
+ } catch (TwitterOAuthClientException $e) {
$msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s',
$e->getCode(), $e->getMessage());
$this->serverError(_('Couldn\'t link your Twitter account.'));
diff --git a/plugins/TwitterBridge/twitterbasicauthclient.php b/plugins/TwitterBridge/twitterbasicauthclient.php
index e4cae7373..1040d72fb 100644
--- a/plugins/TwitterBridge/twitterbasicauthclient.php
+++ b/plugins/TwitterBridge/twitterbasicauthclient.php
@@ -32,6 +32,26 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
}
/**
+ * Exception wrapper for cURL errors
+ *
+ * @category Integration
+ * @package StatusNet
+ * @author Adrian Lang <mail@adrianlang.de>
+ * @author Brenda Wallace <shiny@cpan.org>
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @author Dan Moore <dan@moore.cx>
+ * @author Evan Prodromou <evan@status.net>
+ * @author mEDI <medi@milaro.net>
+ * @author Sarven Capadisli <csarven@status.net>
+ * @author Zach Copley <zach@status.net> * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ */
+class BasicAuthCurlException extends Exception
+{
+}
+
+/**
* Class for talking to the Twitter API with HTTP Basic Auth.
*
* @category Integration
@@ -178,27 +198,45 @@ class TwitterBasicAuthClient
*/
function httpRequest($url, $params = null, $auth = true)
{
- $request = new HTTPClient($url, 'GET', array(
- 'follow_redirects' => true,
- 'connect_timeout' => 120,
- 'timeout' => 120,
- 'ssl_verifypeer' => false,
- ));
-
- // Twitter is strict about accepting invalid "Expect" headers
- $request->setHeader('Expect', '');
+ $options = array(
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_FAILONERROR => true,
+ CURLOPT_HEADER => false,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_USERAGENT => 'StatusNet',
+ CURLOPT_CONNECTTIMEOUT => 120,
+ CURLOPT_TIMEOUT => 120,
+ CURLOPT_HTTPAUTH => CURLAUTH_ANY,
+ CURLOPT_SSL_VERIFYPEER => false,
+
+ // Twitter is strict about accepting invalid "Expect" headers
+
+ CURLOPT_HTTPHEADER => array('Expect:')
+ );
if (isset($params)) {
- $request->setMethod('POST');
- $request->addPostParameter($params);
+ $options[CURLOPT_POST] = true;
+ $options[CURLOPT_POSTFIELDS] = $params;
}
if ($auth) {
- $request->setAuth($this->screen_name, $this->password);
+ $options[CURLOPT_USERPWD] = $this->screen_name .
+ ':' . $this->password;
}
- $response = $request->send();
- return $response->getBody();
+ $ch = curl_init($url);
+ curl_setopt_array($ch, $options);
+ $response = curl_exec($ch);
+
+ if ($response === false) {
+ $msg = curl_error($ch);
+ $code = curl_errno($ch);
+ throw new BasicAuthCurlException($msg, $code);
+ }
+
+ curl_close($ch);
+
+ return $response;
}
}
diff --git a/plugins/WikiHashtagsPlugin.php b/plugins/WikiHashtagsPlugin.php
index a9e675f5c..0c5649aa4 100644
--- a/plugins/WikiHashtagsPlugin.php
+++ b/plugins/WikiHashtagsPlugin.php
@@ -68,8 +68,10 @@ class WikiHashtagsPlugin extends Plugin
$editurl = sprintf('http://hashtags.wikia.com/index.php?title=%s&action=edit',
urlencode($tag));
- $request = new HTTPClient($url);
- $html = $request->get();
+ $context = stream_context_create(array('http' => array('method' => "GET",
+ 'header' =>
+ "User-Agent: " . $this->userAgent())));
+ $html = @file_get_contents($url, false, $context);
$action->elementStart('div', array('id' => 'wikihashtags', 'class' => 'section'));
@@ -98,4 +100,10 @@ class WikiHashtagsPlugin extends Plugin
return true;
}
+
+ function userAgent()
+ {
+ return 'WikiHashtagsPlugin/'.WIKIHASHTAGSPLUGIN_VERSION .
+ ' StatusNet/' . STATUSNET_VERSION;
+ }
}