afPermManager = $afPermManager; } /** * @codeCoverageIgnore Merely declarative * @inheritDoc */ public function mustBePosted() { return true; } /** * @codeCoverageIgnore Merely declarative * @inheritDoc */ public function isWriteMode() { return true; } /** * @codeCoverageIgnore Merely declarative * @inheritDoc */ public function needsToken() { return 'csrf'; } /** * @inheritDoc */ public function execute() { $user = $this->getUser(); if ( !$this->afPermManager->canSeePrivateDetails( $user ) ) { $this->dieWithError( 'abusefilter-log-cannot-see-privatedetails' ); } $params = $this->extractRequestParams(); if ( !SpecialAbuseLog::checkPrivateDetailsAccessReason( $params['reason'] ) ) { // Double check, in case we add some extra validation $this->dieWithError( 'abusefilter-noreason' ); } $status = SpecialAbuseLog::getPrivateDetailsRow( $user, $params['logid'] ); if ( !$status->isGood() ) { $this->dieStatus( $status ); } $row = $status->getValue(); // Log accessing private details if ( $this->getConfig()->get( 'AbuseFilterLogPrivateDetailsAccess' ) ) { SpecialAbuseLog::addPrivateDetailsAccessLogEntry( $params['logid'], $params['reason'], $user ); } $result = [ 'log-id' => $params['logid'], 'user' => $row->afl_user_text, 'filter-id' => (int)$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 ); } /** * @codeCoverageIgnore Merely declarative * @inheritDoc */ public function getAllowedParams() { return [ 'logid' => [ ParamValidator::PARAM_TYPE => 'integer' ], 'reason' => [ ParamValidator::PARAM_TYPE => 'string', ParamValidator::PARAM_REQUIRED => $this->getConfig()->get( 'AbuseFilterPrivateDetailsForceReason' ), ] ]; } /** * @codeCoverageIgnore Merely declarative * @inheritDoc */ protected function getExamplesMessages() { return [ 'action=abuselogprivatedetails&logid=1&reason=example&token=ABC123' => 'apihelp-abuselogprivatedetails-example-1' ]; } }