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