diff options
author | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
commit | fc7369835258467bf97eb64f184b93691f9a9fd5 (patch) | |
tree | daabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php |
first commit
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php')
-rw-r--r-- | www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php new file mode 100644 index 00000000..252c153d --- /dev/null +++ b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php @@ -0,0 +1,94 @@ +<?php + +class ApiAbuseFilterCheckMatch extends ApiBase { + public function execute() { + $params = $this->extractRequestParams(); + $this->requireOnlyOneParameter( $params, 'vars', 'rcid', 'logid' ); + + // "Anti-DoS" + if ( !$this->getUser()->isAllowed( 'abusefilter-modify' ) ) { + $this->dieWithError( 'apierror-abusefilter-canttest', 'permissiondenied' ); + } + + $vars = null; + if ( $params['vars'] ) { + $vars = new AbuseFilterVariableHolder; + $pairs = FormatJson::decode( $params['vars'], true ); + foreach ( $pairs as $name => $value ) { + $vars->setVar( $name, $value ); + } + } elseif ( $params['rcid'] ) { + $dbr = wfGetDB( DB_REPLICA ); + $rcQuery = RecentChange::getQueryInfo(); + $row = $dbr->selectRow( + $rcQuery['tables'], + $rcQuery['fields'], + [ 'rc_id' => $params['rcid'] ], + __METHOD__, + [], + $rcQuery['joins'] + ); + + if ( !$row ) { + $this->dieWithError( [ 'apierror-nosuchrcid', $params['rcid'] ] ); + } + + $vars = AbuseFilter::getVarsFromRCRow( $row ); + } elseif ( $params['logid'] ) { + $dbr = wfGetDB( DB_REPLICA ); + $row = $dbr->selectRow( + 'abuse_filter_log', + 'afl_var_dump', + [ 'afl_id' => $params['logid'] ], + __METHOD__ + ); + + if ( !$row ) { + $this->dieWithError( [ 'apierror-abusefilter-nosuchlogid', $params['logid'] ], 'nosuchlogid' ); + } + + $vars = AbuseFilter::loadVarDump( $row->afl_var_dump ); + } + + if ( AbuseFilter::checkSyntax( $params[ 'filter' ] ) !== true ) { + $this->dieWithError( 'apierror-abusefilter-badsyntax', 'badsyntax' ); + } + + $result = [ + ApiResult::META_BC_BOOLS => [ 'result' ], + 'result' => AbuseFilter::checkConditions( $params['filter'], $vars ), + ]; + + $this->getResult()->addValue( + null, + $this->getModuleName(), + $result + ); + } + + public function getAllowedParams() { + return [ + 'filter' => [ + ApiBase::PARAM_REQUIRED => true, + ], + 'vars' => null, + 'rcid' => [ + ApiBase::PARAM_TYPE => 'integer' + ], + 'logid' => [ + ApiBase::PARAM_TYPE => 'integer' + ], + ]; + } + + /** + * @see ApiBase::getExamplesMessages() + * @return array + */ + protected function getExamplesMessages() { + return [ + 'action=abusefiltercheckmatch&filter=!("autoconfirmed"%20in%20user_groups)&rcid=15' + => 'apihelp-abusefiltercheckmatch-example-1', + ]; + } +} |