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/AbuseFilterPreAuthenticationProvider.php |
first commit
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php')
-rw-r--r-- | www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php new file mode 100644 index 00000000..046c4c30 --- /dev/null +++ b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php @@ -0,0 +1,46 @@ +<?php + +use MediaWiki\Auth\AbstractPreAuthenticationProvider; +use MediaWiki\Auth\AuthenticationRequest; + +class AbuseFilterPreAuthenticationProvider extends AbstractPreAuthenticationProvider { + public function testForAccountCreation( $user, $creator, array $reqs ) { + return $this->testUser( $user, $creator, false ); + } + + public function testUserForCreation( $user, $autocreate, array $options = [] ) { + // if this is not an autocreation, testForAccountCreation already handled it + if ( $autocreate ) { + return $this->testUser( $user, $user, true ); + } + return StatusValue::newGood(); + } + + /** + * @param User $user The user being created or autocreated + * @param User $creator The user who caused $user to be created (or $user itself on autocreation) + * @param bool $autocreate Is this an autocreation? + * @return StatusValue + */ + protected function testUser( $user, $creator, $autocreate ) { + if ( $user->getName() == wfMessage( 'abusefilter-blocker' )->inContentLanguage()->text() ) { + return StatusValue::newFatal( 'abusefilter-accountreserved' ); + } + + $vars = new AbuseFilterVariableHolder; + + // generateUserVars records $creator->getName() which would be the IP for unregistered users + if ( $creator->isLoggedIn() ) { + $vars->addHolders( AbuseFilter::generateUserVars( $creator ) ); + } + + $vars->setVar( 'ACTION', $autocreate ? 'autocreateaccount' : 'createaccount' ); + $vars->setVar( 'ACCOUNTNAME', $user->getName() ); + + // pass creator in explicitly to prevent recording the current user on autocreation - T135360 + $status = AbuseFilter::filterAction( $vars, SpecialPage::getTitleFor( 'Userlogin' ), + 'default', $creator ); + + return $status->getStatusValue(); + } +} |