FastLizard4 has submitted this change and it was merged.

Change subject: Update twitteroauth for API v1.1, minor fixes
......................................................................


Update twitteroauth for API v1.1, minor fixes

Recently Twitter discontinued version 1.0 of its API in favor of version 1.1. 
This commit introduces
the patches made at https://github.com/abraham/twitteroauth to allow tweeting 
again.

In patchset 2, minor edits were made to CommunityTwitter_body.php to improve 
functionality. Proper
deletion POSTs and deleted tweet splicing were introduced, along with better 
handling of form URLs.

Change-Id: Ie7f2aa7a5875c1e9636f40156d314d6d4c420d0e
---
M CommunityTwitter_body.php
M includes/OAuth.php
M includes/TWITTEROAUTH-LICENSE
M includes/twitteroauth.php
4 files changed, 30 insertions(+), 28 deletions(-)

Approvals:
  FastLizard4: Verified; Looks good to me, approved
  RAN1: Verified; Looks good to me, but someone else must approve



diff --git a/CommunityTwitter_body.php b/CommunityTwitter_body.php
index 6a20363..257cbd5 100755
--- a/CommunityTwitter_body.php
+++ b/CommunityTwitter_body.php
@@ -141,7 +141,7 @@
                                if 
(!communitytwitter::checkConnections($connections)) {
                                        $wgOut->addHTML("<strong 
class=\"ct-error\">".wfMsg("communitytwitter-connection-failure")."</strong>");
                                } else {
-                       
+
                                        // Get Twitter timeline from default 
account
                                        $timeline = 
$connections[$ctDefaultAccount]->get("statuses/user_timeline", 
array("include_rts" => "true"));
                                        $twitterStatuses = 
array_values(array_filter(array_map(array("CommunityTwitter", "getOwnTweets"), 
$timeline)));
@@ -203,17 +203,17 @@
                                                                        
$currTimeline = array_values(array_filter(array_map(array("CommunityTwitter", 
"getOwnTweets"), $currTimeline)));
                                                                        $hashId 
= communitytwitter::hashIds($twitterStatuses, $currTimeline);
                                                                        if 
(array_key_exists($wgRequest->getText("deleteId"), $hashId)) {
-                                                                               
$responses[$appName] = $connections[$appName]->post("statuses/destroy", 
array("id" => $hashId[$wgRequest->getText("deleteId")]));
+                                                                               
$responses[$appName] = $connections[$appName]->post("statuses/destroy/" . 
$hashId[$wgRequest->getText("deleteId")]);
                                                                        }
                                                                }
 
                                                                // Delete Tweet 
via OAuth
-                                                               
$responses[$ctDefaultAccount] = 
$connections[$ctDefaultAccount]->post("statuses/destroy", array("id" => 
$wgRequest->getText("deleteId")));
+                                                               
$responses[$ctDefaultAccount] = 
$connections[$ctDefaultAccount]->post("statuses/destroy/" . 
$wgRequest->getText("deleteId"));
 
                                                                if 
(communitytwitter::checkResponses($responses)) {
                                                                        
$wgOut->addHTML("<strong 
class=\"ct-success\">".wfMsg("communitytwitter-deletion-success")."</strong>\n");
                                                                        // 
Update timeline array to display updated "your last tweets" section
-                                                                       
unset($twitterStatuses[$i]);
+                                                                       
array_splice($twitterStatuses, $i, 1);
                                                                } else {
                                                                        
$wgOut->addHTML("<strong 
class=\"ct-error\">".wfMsg("communitytwitter-unknown-error-request")."</strong>\n");
                                                                }
@@ -241,13 +241,13 @@
                                        } else {
                                                // Tweet textarea; javascript 
ResourceLoader module enables an updating counter with button disabling if 
tweet is too long (for convenience, Twitter won't allow a >140 char post 
anyways)
                                                $wgOut->addModules( 
'ext.CommunityTwitter.updatecount' );
-                                               $wgOut->addHTML("<form 
action=\"".$wgScriptPath."/../wiki/Special:CommunityTwitter\" method=\"post\" 
id=\"status_update_form\">\n".
+                                               $wgOut->addHTML("<form 
action=\"".$wgOut->getTitle()->getLinkURL()."\" method=\"post\" 
id=\"status_update_form\">\n".
                                                                                
"<span class=\"ct-tweet\">".wfMsg("communitytwitter-remaining-chars").": 
<strong id=\"stringlength\">140</strong><br/>\n".
                                                                                
"<textarea tabindex=\"1\" autocomplete=\"off\" accesskey=\"u\" name=\"status\" 
id=\"status\" rows=\"2\" cols=\"40\" class=\"ct-tweet-input\"></textarea>\n".
                                                                                
"<br/><input type=\"submit\" id=\"tweetbutton\" value=\"  Tweet   \"></span>\n".
                                                                                
"</form><br /><br /><br /><br /><br /><br />\n".
                                                                                
"<span class=\"ct-tweet\">".
-                                                                               
"<form action=\"".$wgScriptPath."/../wiki/Special:CommunityTwitter\" 
method=\"post\">Tweet-ID: <input type=\"text\" name=\"tweetid\" />".
+                                                                               
"<form action=\"".$wgOut->getTitle()->getLinkURL()."\" 
method=\"post\">Tweet-ID: <input type=\"text\" name=\"tweetid\" />".
                                                                                
"<br /><a 
href=\"javascript:alert('".wfMsg("communitytwitter-id-help-text")."')\">".
                                                                                
wfMsg("communitytwitter-id-help-link")."</a> <input type=\"submit\" 
value=\"Retweet\"></form></span>");
                                        }
@@ -257,8 +257,8 @@
                                        // Display users' last tweets to give 
him the opportunity to delete his own tweets
                                        if (count($twitterStatuses) > 0) {
                                                for ($i=0; $i < 
min(5,count($twitterStatuses)); $i++) {
-                                                               if 
($twitterStatuses[$i]->text != "") {
-                                                               
$wgOut->addHTML("<form 
action=\"".$wgScriptPath."/../wiki/Special:CommunityTwitter\" 
method=\"post\"><input type=\"hidden\" name=\"deleteId\" 
value=\"".($twitterStatuses[$i]->id_str)."\" /><li>[<input class=\"submit\" 
type=\"submit\" value=\"".wfMsg("communitytwitter-delete-tweet-link-name")."\" 
title=\"".wfMsg("communitytwitter-delete-tweet-title-tag")."\" />] 
".$twitterStatuses[$i]->text."</li></form>\n");
+                                                               if 
(isset($twitterStatuses[$i]) && $twitterStatuses[$i]->text != "") {
+                                                               
$wgOut->addHTML("<form action=\"".$wgOut->getTitle()->getLinkURL()."\" 
method=\"post\"><input type=\"hidden\" name=\"deleteId\" 
value=\"".($twitterStatuses[$i]->id_str)."\" /><li>[<input class=\"submit\" 
type=\"submit\" value=\"".wfMsg("communitytwitter-delete-tweet-link-name")."\" 
title=\"".wfMsg("communitytwitter-delete-tweet-title-tag")."\" />] 
".$twitterStatuses[$i]->text."</li></form>\n");
                                                        }
                                                }
                                        } else {
diff --git a/includes/OAuth.php b/includes/OAuth.php
index 22f8816..4570013 100644
--- a/includes/OAuth.php
+++ b/includes/OAuth.php
@@ -3,8 +3,10 @@
 
 /* Generic exception class
  */
-class OAuthException extends Exception {
-  // pass
+if (!class_exists('OAuthException')) {
+  class OAuthException extends Exception {
+    // pass
+  }
 }
 
 class OAuthConsumer {
@@ -90,9 +92,9 @@
 }
 
 /**
- * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as 
defined in [RFC2104]
- * where the Signature Base String is the text and the key is the concatenated 
values (each first
- * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, 
separated by an '&'
+ * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as 
defined in [RFC2104] 
+ * where the Signature Base String is the text and the key is the concatenated 
values (each first 
+ * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, 
separated by an '&' 
  * character (ASCII code 38) even if empty.
  *   - Chapter 9.2 ("HMAC-SHA1")
  */
@@ -118,7 +120,7 @@
 }
 
 /**
- * The PLAINTEXT method does not provide any security protection and SHOULD 
only be used
+ * The PLAINTEXT method does not provide any security protection and SHOULD 
only be used 
  * over a secure channel such as HTTPS. It does not use the Signature Base 
String.
  *   - Chapter 9.4 ("PLAINTEXT")
  */
@@ -128,8 +130,8 @@
   }
 
   /**
-   * oauth_signature is set to the concatenated encoded values of the Consumer 
Secret and
-   * Token Secret, separated by a '&' character (ASCII code 38), even if 
either secret is
+   * oauth_signature is set to the concatenated encoded values of the Consumer 
Secret and 
+   * Token Secret, separated by a '&' character (ASCII code 38), even if 
either secret is 
    * empty. The result MUST be encoded again.
    *   - Chapter 9.4.1 ("Generating Signatures")
    *
@@ -151,10 +153,10 @@
 }
 
 /**
- * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature 
algorithm as defined in
- * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the 
hash function for
- * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA 
public key in a
- * verified way to the Service Provider, in a manner which is beyond the scope 
of this
+ * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature 
algorithm as defined in 
+ * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the 
hash function for 
+ * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA 
public key in a 
+ * verified way to the Service Provider, in a manner which is beyond the scope 
of this 
  * specification.
  *   - Chapter 9.3 ("RSA-SHA1")
  */
@@ -556,7 +558,7 @@
   private function get_version(&$request) {
     $version = $request->get_parameter("oauth_version");
     if (!$version) {
-      // Service Providers MUST assume the protocol version to be 1.0 if this 
parameter is not present.
+      // Service Providers MUST assume the protocol version to be 1.0 if this 
parameter is not present. 
       // Chapter 7.0 ("Accessing Protected Ressources")
       $version = '1.0';
     }
@@ -656,7 +658,7 @@
       throw new OAuthException(
         'Missing timestamp parameter. The parameter is required'
       );
-
+    
     // verify that timestamp is recentish
     $now = time();
     if (abs($now - $timestamp) > $this->timestamp_threshold) {
diff --git a/includes/TWITTEROAUTH-LICENSE b/includes/TWITTEROAUTH-LICENSE
index e60f470..3a631e0 100644
--- a/includes/TWITTEROAUTH-LICENSE
+++ b/includes/TWITTEROAUTH-LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2009 Abraham Williams - http://abrah.am - abra...@poseurte.ch
+Copyright (c) 2009 Abraham Williams - http://abrah.am - abra...@abrah.am
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
diff --git a/includes/twitteroauth.php b/includes/twitteroauth.php
index 1603ed3..3fb5052 100644
--- a/includes/twitteroauth.php
+++ b/includes/twitteroauth.php
@@ -18,11 +18,11 @@
   /* Contains the last API call. */
   public $url;
   /* Set up the API root URL. */
-  public $host = "https://api.twitter.com/1/";;
+  public $host = "https://api.twitter.com/1.1/";;
   /* Set timeout default. */
   public $timeout = 30;
   /* Set connect timeout. */
-  public $connecttimeout = 30;
+  public $connecttimeout = 30; 
   /* Verify SSL Cert. */
   public $ssl_verifypeer = FALSE;
   /* Respons format. */
@@ -74,7 +74,7 @@
    */
   function getRequestToken($oauth_callback) {
     $parameters = array();
-    $parameters['oauth_callback'] = $oauth_callback;
+    $parameters['oauth_callback'] = $oauth_callback; 
     $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', 
$parameters);
     $token = OAuthUtil::parse_parameters($request);
     $this->token = new OAuthConsumer($token['oauth_token'], 
$token['oauth_token_secret']);
@@ -123,7 +123,7 @@
    *                "user_id" => "9436992",
    *                "screen_name" => "abraham",
    *                "x_auth_expires" => "0")
-   */
+   */  
   function getXAuthToken($username, $password) {
     $parameters = array();
     $parameters['x_auth_username'] = $username;
@@ -145,7 +145,7 @@
     }
     return $response;
   }
-
+  
   /**
    * POST wrapper for oAuthRequest.
    */

-- 
To view, visit https://gerrit.wikimedia.org/r/70029
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie7f2aa7a5875c1e9636f40156d314d6d4c420d0e
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/CommunityTwitter
Gerrit-Branch: master
Gerrit-Owner: RAN1 <r...@fastlizard4.org>
Gerrit-Reviewer: Basti2342 <ba...@randomprojects.de>
Gerrit-Reviewer: FastLizard4 <fastlizard4-git-comm...@fastlizard4.org>
Gerrit-Reviewer: RAN1 <r...@fastlizard4.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to