]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/apiaccountregister.php
Try to get mime data before hashing (cpu intensive)
[quix0rs-gnu-social.git] / actions / apiaccountregister.php
index 9ce7bcfb685e236229854f9372172fca42784698..4a785998292b0c13c260f61620ab65ddedc43d04 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-        
 /**
  * StatusNet, the distributed open-source microblogging tool
  *
@@ -54,7 +53,7 @@ class ApiAccountRegisterAction extends ApiAction
      *
      * @return boolean success flag
      */
-    protected function prepare($args)
+    protected function prepare(array $args=array())
     {
         parent::prepare($args);
 
@@ -102,7 +101,7 @@ class ApiAccountRegisterAction extends ApiAction
         }
 
         if (!empty($this->code)) {
-            $this->invite = Invitation::staticGet('code', $this->code);
+            $this->invite = Invitation::getKV('code', $this->code);
             if (empty($this->invite)) {
             // TRANS: Client error displayed when trying to register to an invite-only site without a valid invitation.
                    $this->clientError(_('Sorry, invalid invitation code.'), 401);
@@ -114,22 +113,17 @@ class ApiAccountRegisterAction extends ApiAction
 
         // Input scrubbing
         try {
-            $nickname = Nickname::normalize($nickname);
+            $nickname = Nickname::normalize($nickname, true);
         } catch (NicknameException $e) {
             // clientError handles Api exceptions with various formats and stuff
-               $this->clientError(_('Not a valid nickname.'), 400);
+               $this->clientError($e->getMessage(), $e->getCode());
         }
+
         $email = common_canonical_email($email);
 
            if ($email && !Validate::email($email, common_config('email', 'check_domain'))) {
             // TRANS: Form validation error displayed when trying to register without a valid e-mail address.
                $this->clientError(_('Not a valid email address.'), 400);
-        } else if ($this->nicknameExists($nickname)) {
-            // TRANS: Form validation error displayed when trying to register with an existing nickname.
-               $this->clientError(_('Nickname already in use. Try another one.'), 400);
-        } else if (!User::allowed_nickname($nickname)) {
-            // TRANS: Form validation error displayed when trying to register with an invalid nickname.
-               $this->clientError(_('Not a valid nickname.'), 400);
         } else if ($this->emailExists($email)) {
             // TRANS: Form validation error displayed when trying to register with an already registered e-mail address.
                $this->clientError(_('Email address already exists.'), 400);
@@ -137,9 +131,6 @@ class ApiAccountRegisterAction extends ApiAction
                    !common_valid_http_url($homepage)) {
             // TRANS: Form validation error displayed when trying to register with an invalid homepage URL.
                $this->clientError(_('Homepage is not a valid URL.'), 400);
-        } else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
-            // TRANS: Form validation error displayed when trying to register with a too long full name.
-               $this->clientError(_('Full name is too long (maximum 255 characters).'), 400);
         } else if (Profile::bioTooLong($bio)) {
             // TRANS: Form validation error on registration page when providing too long a bio text.
             // TRANS: %d is the maximum number of characters for bio; used for plural.
@@ -147,9 +138,6 @@ class ApiAccountRegisterAction extends ApiAction
                                        'Bio is too long (maximum %d characters).',
                                        Profile::maxBio()),
                                        Profile::maxBio()), 400);
-        } else if (!is_null($location) && mb_strlen($location) > 255) {
-            // TRANS: Form validation error displayed when trying to register with a too long location.
-               $this->clientError(_('Location is too long (maximum 255 characters).'), 400);
         } else if (strlen($password) < 6) {
             // TRANS: Form validation error displayed when trying to register with too short a password.
                $this->clientError(_('Password must be 6 or more characters.'), 400);
@@ -157,50 +145,31 @@ class ApiAccountRegisterAction extends ApiAction
             // TRANS: Form validation error displayed when trying to register with non-matching passwords.
                $this->clientError(_('Passwords do not match.'), 400);
         } else {
-           
-               // annoy spammers
-               sleep(7);
-           
-               if ($user = User::register(array('nickname' => $nickname,
-                                                       'password' => $password,
-                                                       'email' => $email,
-                                                       'fullname' => $fullname,
-                                                       'homepage' => $homepage,
-                                                       'bio' => $bio,
-                                                       'location' => $location,
-                                                       'code' => $code))) {
-                   if (!$user) {
-                       // TRANS: Form validation error displayed when trying to register with an invalid username or password.
-                       $this->clientError(_('Invalid username or password.'), 400);
-                   }
-
-                   Event::handle('EndRegistrationTry', array($this));
-
-                   $this->initDocument('json');
-                   $this->showJsonObjects($this->twitterUserArray($user->getProfile()));
-                   $this->endDocument('json');
-
-               } else {
-                   // TRANS: Form validation error displayed when trying to register with an invalid username or password.
-                       $this->clientError(_('Invalid username or password.'), 400);
-               }                   
-        } 
-    }
-      
 
-    /**
-     * Does the given nickname already exist?
-     *
-     * Checks a canonical nickname against the database.
-     *
-     * @param string $nickname nickname to check
-     *
-     * @return boolean true if the nickname already exists
-     */
-    function nicknameExists($nickname)
-    {
-        $user = User::staticGet('nickname', $nickname);
-        return is_object($user);
+            // annoy spammers
+            sleep(7);
+            
+                       if (Event::handle('APIStartRegistrationTry', array($this))) { 
+                               try {
+                                       $user = User::register(array('nickname' => $nickname,
+                                                                                                               'password' => $password,
+                                                                                                               'email' => $email,
+                                                                                                               'fullname' => $fullname,
+                                                                                                               'homepage' => $homepage,
+                                                                                                               'bio' => $bio,
+                                                                                                               'location' => $location,
+                                                                                                               'code' => $this->code));
+                                       Event::handle('EndRegistrationTry', array($this));
+
+                                       $this->initDocument('json');
+                                       $this->showJsonObjects($this->twitterUserArray($user->getProfile()));
+                                       $this->endDocument('json');
+
+                               } catch (Exception $e) {
+                                       $this->clientError($e->getMessage(), 400);
+                               }                       
+                       }
+        }
     }
 
     /**
@@ -218,7 +187,7 @@ class ApiAccountRegisterAction extends ApiAction
         if (!$email || strlen($email) == 0) {
             return false;
         }
-        $user = User::staticGet('email', $email);
+        $user = User::getKV('email', $email);
         return is_object($user);
     }