]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - extensions/TitleBlacklist/TitleBlacklistPreAuthenticationProvider.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / extensions / TitleBlacklist / TitleBlacklistPreAuthenticationProvider.php
diff --git a/extensions/TitleBlacklist/TitleBlacklistPreAuthenticationProvider.php b/extensions/TitleBlacklist/TitleBlacklistPreAuthenticationProvider.php
new file mode 100644 (file)
index 0000000..b2371ca
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+use MediaWiki\Auth\AbstractPreAuthenticationProvider;
+use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\Auth\AuthManager;
+
+class TitleBlacklistPreAuthenticationProvider extends AbstractPreAuthenticationProvider {
+       protected $blockAutoAccountCreation;
+
+       public function __construct( $params = [] ) {
+               global $wgTitleBlacklistBlockAutoAccountCreation;
+
+               $params += [
+                       'blockAutoAccountCreation' => $wgTitleBlacklistBlockAutoAccountCreation
+               ];
+
+               $this->blockAutoAccountCreation = (bool)$params['blockAutoAccountCreation'];
+       }
+
+       public function getAuthenticationRequests( $action, array $options ) {
+               $needOverrideOption = false;
+               switch ( $action ) {
+                       case AuthManager::ACTION_CREATE:
+                               $user = User::newFromName( $options['username'] ) ?: new User();
+                               $needOverrideOption = TitleBlacklist::userCanOverride( $user, 'new-account' );
+                               break;
+               }
+
+               return $needOverrideOption ? [ new TitleBlacklistAuthenticationRequest() ] : [];
+       }
+
+       public function testForAccountCreation( $user, $creator, array $reqs ) {
+               /** @var TitleBlacklistAuthenticationRequest $req */
+               $req = AuthenticationRequest::getRequestByClass( $reqs,
+                       TitleBlacklistAuthenticationRequest::class );
+               $override = $req && $req->ignoreTitleBlacklist;
+               return TitleBlacklistHooks::testUserName( $user->getName(), $creator, $override, true );
+       }
+
+       public function testUserForCreation( $user, $autocreate, array $options = [] ) {
+               $sv = StatusValue::newGood();
+               $creator = RequestContext::getMain()->getUser();
+
+               if ( !$autocreate && empty( $options['creating'] ) || $this->blockAutoAccountCreation ) {
+                       $sv->merge( TitleBlacklistHooks::testUserName(
+                               $user->getName(), $creator, true, (bool)$autocreate
+                       ) );
+               }
+               return $sv;
+       }
+}