diff options
Diffstat (limited to 'includes/api/ApiBlock.php')
-rw-r--r-- | includes/api/ApiBlock.php | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/includes/api/ApiBlock.php b/includes/api/ApiBlock.php index c879b35d..975153ac 100644 --- a/includes/api/ApiBlock.php +++ b/includes/api/ApiBlock.php @@ -25,17 +25,13 @@ */ /** -* API module that facilitates the blocking of users. Requires API write mode -* to be enabled. -* + * API module that facilitates the blocking of users. Requires API write mode + * to be enabled. + * * @ingroup API */ class ApiBlock extends ApiBase { - public function __construct( $main, $action ) { - parent::__construct( $main, $action ); - } - /** * Blocks the user specified in the parameters for the given expiry, with the * given reason, and with all other settings provided in the params. If the block @@ -46,15 +42,10 @@ class ApiBlock extends ApiBase { $user = $this->getUser(); $params = $this->extractRequestParams(); - if ( $params['gettoken'] ) { - $res['blocktoken'] = $user->getEditToken(); - $this->getResult()->addValue( null, $this->getModuleName(), $res ); - return; - } - if ( !$user->isAllowed( 'block' ) ) { $this->dieUsageMsg( 'cantblock' ); } + # bug 15810: blocked admins should have limited access here if ( $user->isBlocked() ) { $status = SpecialBlock::checkUnblockSelf( $params['user'], $user ); @@ -62,6 +53,13 @@ class ApiBlock extends ApiBase { $this->dieUsageMsg( array( $status ) ); } } + + $target = User::newFromName( $params['user'] ); + // Bug 38633 - if the target is a user (not an IP address), but it doesn't exist or is unusable, error. + if ( $target instanceof User && ( $target->isAnon() /* doesn't exist */ || !User::isUsableName( $target->getName() ) ) ) { + $this->dieUsageMsg( array( 'nosuchuser', $params['user'] ) ); + } + if ( $params['hidename'] && !$user->isAllowed( 'hideuser' ) ) { $this->dieUsageMsg( 'canthide' ); } @@ -70,6 +68,7 @@ class ApiBlock extends ApiBase { } $data = array( + 'PreviousTarget' => $params['user'], 'Target' => $params['user'], 'Reason' => array( $params['reason'], @@ -83,7 +82,7 @@ class ApiBlock extends ApiBase { 'DisableEmail' => $params['noemail'], 'HideUser' => $params['hidename'], 'DisableUTEdit' => !$params['allowusertalk'], - 'AlreadyBlocked' => $params['reblock'], + 'Reblock' => $params['reblock'], 'Watch' => $params['watchuser'], 'Confirm' => true, ); @@ -99,7 +98,7 @@ class ApiBlock extends ApiBase { $res['userID'] = $target instanceof User ? $target->getId() : 0; $block = Block::newFromTarget( $target ); - if( $block instanceof Block ){ + if ( $block instanceof Block ) { $res['expiry'] = $block->mExpiry == $this->getDB()->getInfinity() ? 'infinite' : wfTimestamp( TS_ISO_8601, $block->mExpiry ); @@ -151,10 +150,6 @@ class ApiBlock extends ApiBase { ApiBase::PARAM_REQUIRED => true ), 'token' => null, - 'gettoken' => array( - ApiBase::PARAM_DFLT => false, - ApiBase::PARAM_DEPRECATED => true, - ), 'expiry' => 'never', 'reason' => '', 'anononly' => false, @@ -172,13 +167,12 @@ class ApiBlock extends ApiBase { return array( 'user' => 'Username, IP address or IP range you want to block', 'token' => 'A block token previously obtained through prop=info', - 'gettoken' => 'If set, a block token will be returned, and no other action will be taken', 'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.', 'reason' => 'Reason for block', 'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)', 'nocreate' => 'Prevent account creation', 'autoblock' => 'Automatically block the last used IP address, and any subsequent IP addresses they try to login from', - 'noemail' => 'Prevent user from sending e-mail through the wiki. (Requires the "blockemail" right.)', + 'noemail' => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)', 'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)', 'allowusertalk' => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)', 'reblock' => 'If the user is already blocked, overwrite the existing block', @@ -189,10 +183,6 @@ class ApiBlock extends ApiBase { public function getResultProperties() { return array( '' => array( - 'blocktoken' => array( - ApiBase::PROP_TYPE => 'string', - ApiBase::PROP_NULLABLE => true - ), 'user' => array( ApiBase::PROP_TYPE => 'string', ApiBase::PROP_NULLABLE => true @@ -256,8 +246,4 @@ class ApiBlock extends ApiBase { public function getHelpUrls() { return 'https://www.mediawiki.org/wiki/API:Block'; } - - public function getVersion() { - return __CLASS__ . ': $Id$'; - } } |