summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php')
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php46
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();
+ }
+}