From 659a0b29128eb7caeaf13f2616a1c11d8ab8831b Mon Sep 17 00:00:00 2001 From: Sam Reed Date: Sat, 10 Apr 2010 13:33:24 +0000 Subject: [PATCH] Refactor getTokenSalt to use caching getUser/getTitle in ApiRollback and ApiUserrights --- includes/api/ApiRollback.php | 44 ++++++++++++++++++++++++---------- includes/api/ApiUserrights.php | 17 +++++++++---- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/includes/api/ApiRollback.php b/includes/api/ApiRollback.php index 920f5648ff..27ce389a4d 100644 --- a/includes/api/ApiRollback.php +++ b/includes/api/ApiRollback.php @@ -36,27 +36,27 @@ class ApiRollback extends ApiBase { parent::__construct( $main, $action ); } - private $mTitleObj = null; + private $mTitleObj = null, $mUser = null; public function execute() { $params = $this->extractRequestParams(); // User and title already validated in call to getTokenSalt from Main - - $articleObj = new Article( $this->mTitleObj ); + $titleObj = $this->getTitle(); + $articleObj = new Article( $titleObj ); $summary = ( isset( $params['summary'] ) ? $params['summary'] : '' ); $details = null; - $retval = $articleObj->doRollback( $this->username, $summary, $params['token'], $params['markbot'], $details ); + $retval = $articleObj->doRollback( $this->getUser(), $summary, $params['token'], $params['markbot'], $details ); if ( $retval ) { // We don't care about multiple errors, just report one of them $this->dieUsageMsg( reset( $retval ) ); } - $this->setWatch( $params['watchlist'], $this->mTitleObj ); + $this->setWatch( $params['watchlist'], $titleObj ); $info = array( - 'title' => $this->mTitleObj->getPrefixedText(), + 'title' => $titleObj->getPrefixedText(), 'pageid' => intval( $details['current']->getPage() ), 'summary' => $details['summary'], 'revid' => intval( $details['newid'] ), @@ -123,25 +123,43 @@ class ApiRollback extends ApiBase { } public function getTokenSalt() { + return array( $this->getTitle()->getPrefixedText(), $this->getUser() ); + } + + private function getUser() { + if ( $this->mUser !== null ) { + return $this->mUser; + } + $params = $this->extractRequestParams(); - + if ( !isset( $params['user'] ) ) { $this->dieUsageMsg( array( 'missingparam', 'user' ) ); } // We need to be able to revert IPs, but getCanonicalName rejects them - $this->username = User::isIP( $params['user'] ) + $this->mUser = User::isIP( $params['user'] ) ? $params['user'] : User::getCanonicalName( $params['user'] ); - if ( !$this->username ) { + if ( !$this->mUser ) { $this->dieUsageMsg( array( 'invaliduser', $params['user'] ) ); } - + + return $this->mUser; + } + + private function getTitle() { + if ( $this->mTitleObj !== null ) { + return $this->mTitleObj; + } + + $params = $this->extractRequestParams(); if ( !isset( $params['title'] ) ) { - $this->dieUsageMsg( array( 'missingparam', 'title' ) ); + $this->dieUsageMsg( array( 'missingparam', 'title' ) ); } - + $this->mTitleObj = Title::newFromText( $params['title'] ); + if ( !$this->mTitleObj ) { $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) ); } @@ -149,7 +167,7 @@ class ApiRollback extends ApiBase { $this->dieUsageMsg( array( 'notanarticle' ) ); } - return array( $this->mTitleObj->getPrefixedText(), $this->username ); + return $this->mTitleObj; } protected function getExamples() { diff --git a/includes/api/ApiUserrights.php b/includes/api/ApiUserrights.php index 25254d70a8..a379b8eeb8 100644 --- a/includes/api/ApiUserrights.php +++ b/includes/api/ApiUserrights.php @@ -36,12 +36,12 @@ class ApiUserrights extends ApiBase { parent::__construct( $main, $action ); } + private $mUser = null; + public function execute() { $params = $this->extractRequestParams(); - // User already validated in call to getTokenSalt from Main - $form = new UserrightsPage; - $user = $form->fetchUser( $params['user'] ); + $user = $this->getUser(); $r['user'] = $user->getName(); list( $r['added'], $r['removed'] ) = @@ -103,6 +103,14 @@ class ApiUserrights extends ApiBase { } public function getTokenSalt() { + return $this->getUser()->getName(); + } + + private function getUser() { + if ( $this->mUser !== null ) { + return $this->mUser; + } + $params = $this->extractRequestParams(); if ( is_null( $params['user'] ) ) { $this->dieUsageMsg( array( 'missingparam', 'user' ) ); @@ -115,7 +123,8 @@ class ApiUserrights extends ApiBase { (array)$user->getMessageKey(), $user->getMessageArgs() ) ); } - return $user->getName(); + $this->mUser = $user; + return $user; } protected function getExamples() { -- 2.20.1