mediawiki-extensions-AbuseF.../includes/api/ApiAbuseLogPrivateDetails.php
Daimona Eaytoy c34181e548 Add a new API module to retrieve private details from AbuseLog
Follow-up of Iaca492371f48fecf543268c179a651841ed12c3f. This patch adds
the new module, plus some technical changes to private details-related
methods and globals.

Bug: T210329
Depends-On: I613dbadb8f75c8c4116a362607563a436a73d321
Change-Id: I3c45b74c36c191083df184ed57416067a75f6591
2019-08-09 21:10:28 +00:00

109 lines
2.8 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*/
/**
* API module to allow accessing private details (the user's IP) from AbuseLog entries
*
* @ingroup API
* @ingroup Extensions
*/
class ApiAbuseLogPrivateDetails extends ApiBase {
/**
* @inheritDoc
*/
public function mustBePosted() {
return true;
}
/**
* @inheritDoc
*/
public function isWriteMode() {
return true;
}
/**
* @inheritDoc
*/
public function needsToken() {
return 'csrf';
}
/**
* @inheritDoc
*/
public function execute() {
if ( !SpecialAbuseLog::canSeePrivateDetails() ) {
$this->dieWithError( 'abusefilter-log-cannot-see-private-details' );
}
$params = $this->extractRequestParams();
if ( !SpecialAbuseLog::checkPrivateDetailsAccessReason( $params['reason'] ) ) {
// Double check, in case we add some extra validation
$this->dieWithError( 'abusefilter-noreason' );
}
$status = SpecialAbuseLog::getPrivateDetailsRow( $params['logid'] );
if ( !$status->isGood() ) {
$this->dieWithError( $status->getErrors()[0] );
}
$row = $status->getValue();
// Log accessing private details
if ( $this->getConfig()->get( 'AbuseFilterLogPrivateDetailsAccess' ) ) {
SpecialAbuseLog::addPrivateDetailsAccessLogEntry(
$params['logid'],
$params['reason'],
$this->getUser()
);
}
$result = [
'log-id' => $params['logid'],
'user' => $row->afl_user_text,
'filter-id' => $row->af_id,
'filter-description' => $row->af_public_comments,
'ip-address' => $row->afl_ip !== '' ? $row->afl_ip : null
];
$this->getResult()->addValue( null, $this->getModuleName(), $result );
}
/**
* @inheritDoc
*/
public function getAllowedParams() {
return [
'logid' => [
ApiBase::PARAM_TYPE => 'integer'
],
'reason' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => $this->getConfig()->get( 'AbuseFilterPrivateDetailsForceReason' ),
]
];
}
/**
* @inheritDoc
*/
protected function getExamplesMessages() {
return [
'action=abuselogprivatedetails&logid=1&reason=example&token=ABC123'
=> 'apihelp-abuselogprivatedetails-example-1'
];
}
}