Add a hook to validate account creation fields.
authorAndrew Bogott <abogott@wikimedia.org>
Sat, 9 Nov 2013 20:21:02 +0000 (20:21 +0000)
committerAndrew Bogott <abogott@wikimedia.org>
Sat, 9 Nov 2013 20:24:38 +0000 (20:24 +0000)
This is a step on the way to fixing bug 56847.

Change-Id: Id330a8ac041ddea086f192a90ddc962077453333

docs/hooks.txt
includes/specials/SpecialUserlogin.php
languages/messages/MessagesEn.php

index 7bd725a..700f765 100644 (file)
@@ -295,6 +295,10 @@ $article: Article object
 $user: the User object that was created. (Parameter added in 1.7)
 $byEmail: true when account was created "by email" (added in 1.12)
 
+'ValidateNewUser': Before user account is created, check account settings
+$user: the User object to be created.
+$&error: Error message, if any, returned by failed validation
+
 'AfterFinalPageOutput': At the end of OutputPage::output() but before final
 ob_end_flush() which will send the buffered output to the client. This allows
 for last-minute modification of the output within the buffer by using
index f40966c..c8944d2 100644 (file)
@@ -409,6 +409,16 @@ class LoginForm extends SpecialPage {
                        return Status::newFatal( 'userexists' );
                }
 
+               $validateError = '';
+               // Make sure that our extensions like the input for this user
+               if ( !wfRunHooks( 'ValidateNewUser', array( $u, &$validateError ) ) ) {
+                       wfDebug( "New user failed hook validation.\n" );
+                       if ( !$validateError ) {
+                           return Status::newFatal( 'newuserfailedvalidation' );
+                       }
+                       return Status::newFatal( $validateError );
+               }
+
                if ( $this->mCreateaccountMail ) {
                        # do not force a password for account creation by email
                        # set invalid password, it will be replaced later by a random generated password
index 39f0b8a..5614015 100644 (file)
@@ -1169,6 +1169,7 @@ Use the form below to log in as another user.',
 'badretype'                       => 'The passwords you entered do not match.',
 'userexists'                      => 'Username entered already in use.
 Please choose a different name.',
+'newuserfailedvalidation'         => 'Your new account settings are invalid.',
 'loginerror'                      => 'Login error',
 'createacct-error'                => 'Account creation error',
 'createaccounterror'              => 'Could not create account: $1',