/**
  * Can be used to cancel user account creation
  *
  * @param $user User
  * @param $message string
  * @return bool true to continue, false to abort user creation
  */
 public static function asAbortNewAccountHook($user, &$message)
 {
     global $wgAntiSpoofAccounts, $wgUser, $wgRequest;
     if (!$wgAntiSpoofAccounts) {
         $mode = 'LOGGING ';
         $active = false;
     } elseif ($wgRequest->getCheck('wpIgnoreAntiSpoof') && $wgUser->isAllowed('override-antispoof')) {
         $mode = 'OVERRIDE ';
         $active = false;
     } else {
         $mode = '';
         $active = true;
     }
     $name = $user->getName();
     $spoof = new CentralAuthSpoofUser($name);
     if ($spoof->isLegal()) {
         $normalized = $spoof->getNormalized();
         $conflicts = $spoof->getConflicts();
         if (empty($conflicts)) {
             wfDebugLog('antispoof', "{$mode}PASS new account '{$name}' [{$normalized}]");
         } else {
             wfDebugLog('antispoof', "{$mode}CONFLICT new account '{$name}' [{$normalized}] spoofs " . implode(',', $conflicts));
             if ($active) {
                 $numConflicts = count($conflicts);
                 $message = wfMessage('antispoof-conflict-top', $name)->numParams($numConflicts)->escaped();
                 $message .= '<ul>';
                 foreach ($conflicts as $simUser) {
                     $message .= '<li>' . wfMessage('antispoof-conflict-item', $simUser)->escaped() . '</li>';
                 }
                 $message .= '</ul>' . wfMessage('antispoof-conflict-bottom')->escaped();
                 return false;
             }
         }
     } else {
         $error = $spoof->getError();
         wfDebugLog('antispoof', "{$mode}ILLEGAL new account '{$name}' {$error}");
         if ($active) {
             $message = wfMessage('antispoof-name-illegal', $name, $error)->escaped();
             return false;
         }
     }
     return true;
 }