Yurik has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/130330

Change subject: Added an ability to login into the zero config server
......................................................................

Added an ability to login into the zero config server

Change-Id: Ic91c135c5c48c48041700432da47011de7c6666f
---
M ZeroRatedMobileAccess.php
M includes/CarrierConfigStore.php
2 files changed, 66 insertions(+), 20 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ZeroRatedMobileAccess 
refs/changes/30/130330/1

diff --git a/ZeroRatedMobileAccess.php b/ZeroRatedMobileAccess.php
index 511f6ee..7b5e692 100644
--- a/ZeroRatedMobileAccess.php
+++ b/ZeroRatedMobileAccess.php
@@ -107,6 +107,8 @@
 
 $wgEnableZeroRatedMobileAccessTesting = false;
 $wgZeroRatedMobileAccessApiUri = false;
+$wgZeroRatedMobileAccessApiUserName = false;
+$wgZeroRatedMobileAccessApiPassword = false;
 $wgZeroRatedMobileAccessDisableCache = false;
 $wgZeroRatedMobileAccessEnableZeroConfigPages = false;
 $wgZeroRatedMobileAccessEnableESI = false;
diff --git a/includes/CarrierConfigStore.php b/includes/CarrierConfigStore.php
index 7ff9bde..3f9a45c 100644
--- a/includes/CarrierConfigStore.php
+++ b/includes/CarrierConfigStore.php
@@ -3,6 +3,7 @@
 namespace Extensions\ZeroRatedMobileAccess;
 use FormatJson;
 use Http;
+use MWHttpRequest;
 use ObjectCache;
 use stdClass;
 
@@ -132,20 +133,23 @@
                                'format' => 'json',
                                'titles' => $articleName,
                        );
-                       $pageInfo = $this->getPageFromApi( $query );
-                       if ( $pageInfo !== false ) {
-                               $revId = array_key_exists ( 'flagged', 
$pageInfo ) ?
-                                       $pageInfo['flagged']['stable_revid'] :
-                                       $pageInfo['lastrevid'];
+                       $req = $this->initApiRequestObj();
+                       if ( $req !== false ) {
+                               $pageInfo = $this->getPageFromApi( $req, $query 
);
+                               if ( $pageInfo !== false ) {
+                                       $revId = array_key_exists ( 'flagged', 
$pageInfo ) ?
+                                               
$pageInfo['flagged']['stable_revid'] :
+                                               $pageInfo['lastrevid'];
 
-                               $query = array(
-                                       'action' => 'query',
-                                       'prop' => 'revisions',
-                                       'rvprop' => 'content',
-                                       'format' => 'json',
-                                       'revids' => $revId,
-                               );
-                               $pageInfo = $this->getPageFromApi( $query );
+                                       $query = array(
+                                               'action' => 'query',
+                                               'prop' => 'revisions',
+                                               'rvprop' => 'content',
+                                               'format' => 'json',
+                                               'revids' => $revId,
+                                       );
+                                       $pageInfo = $this->getPageFromApi( 
$req, $query );
+                               }
                        }
                }
                wfProfileOut( __METHOD__ );
@@ -162,20 +166,60 @@
                );
        }
 
-       /** Given a legal set of API parameters, return page from API
-        * @param array $query
-        * @return bool|mixed
+       /** Init HTTP request object to make requests to the API, and login
+        * @return bool|\CurlHttpRequest|\PhpHttpRequest
         */
-       private function getPageFromApi( $query )
-       {
+       private function initApiRequestObj() {
                global $wgZeroRatedMobileAccessApiUri;
                if ( $wgZeroRatedMobileAccessApiUri === false ) {
                        wfLogWarning( '$wgZeroRatedMobileAccessApiUri is not 
set' );
                        return false;
                }
-               $apiUri = wfAppendQuery( $wgZeroRatedMobileAccessApiUri, $query 
);
-               $revInfo = json_decode( $this->http->get( $apiUri, 
self::LOCK_TIMEOUT * 0.8 ), true );
+               $apiUri = wfAppendQuery( $wgZeroRatedMobileAccessApiUri, array(
+                       'action' => 'login',
+                       'format' => 'json',
+               ) );
+               $options = array(
+                       'timeout' => self::LOCK_TIMEOUT * 0.4,
+                       'connectTimeout' => 'default',
+                       'method' => 'POST',
+               );
+               $req = MWHttpRequest::factory( $apiUri, $options );
 
+               global $wgZeroRatedMobileAccessApiUserName, 
$wgZeroRatedMobileAccessApiPassword;
+               if ( $wgZeroRatedMobileAccessApiUserName !== false && 
$wgZeroRatedMobileAccessApiPassword !== false ) {
+                       $postData = array(
+                               'lgname' => $wgZeroRatedMobileAccessApiUserName,
+                               'lgpassword' => 
$wgZeroRatedMobileAccessApiPassword,
+                       );
+                       $req->setData( $postData );
+                       $status = $req->execute();
+
+                       if ( $status->isOK() ) {
+                               $res = json_decode( $req->getContent(), true );
+                               if ( isset( $res['login']['token'] ) ) {
+                                       $postData['lgtoken'] = 
$res['login']['token'];
+                                       $req->setData( $postData );
+                                       $req->execute();
+                                       // Ignore "OK"/"Failed" state - in case 
login failed, we still attempt to get data
+                               }
+                       }
+               }
+               return $req;
+       }
+
+       /** Given a legal set of API parameters, return page from API
+        * @param \CurlHttpRequest|\PhpHttpRequest $req
+        * @param array $query
+        * @return bool|mixed
+        */
+       private function getPageFromApi( $req, $query ) {
+               $req->setData( $query );
+               $status = $req->execute();
+               if ( !$status->isOK() ) {
+                       return false;
+               }
+               $revInfo = json_decode( $req->getContent(), true );
                if ( !isset( $revInfo['query']['pages'] ) ) {
                        return false;
                }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic91c135c5c48c48041700432da47011de7c6666f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ZeroRatedMobileAccess
Gerrit-Branch: master
Gerrit-Owner: Yurik <yu...@wikimedia.org>

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

Reply via email to