Merge "Fix positioning of jQuery.tipsy tooltip arrows"
[lhc/web/wiklou.git] / includes / password / PasswordFactory.php
index 48d6866..f80e158 100644 (file)
@@ -68,6 +68,15 @@ final class PasswordFactory {
                $this->default = $type;
        }
 
+       /**
+        * Get the default password type
+        *
+        * @return string
+        */
+       public function getDefaultType() {
+               return $this->default;
+       }
+
        /**
         * Initialize the internal static variables using the global variables
         *
@@ -179,4 +188,37 @@ final class PasswordFactory {
                        return $password->needsUpdate();
                }
        }
+
+       /**
+        * Generate a random string suitable for a password
+        *
+        * @param int $minLength Minimum length of password to generate
+        * @return string
+        */
+       public static function generateRandomPasswordString( $minLength = 10 ) {
+               // Decide the final password length based on our min password length,
+               // stopping at a minimum of 10 chars.
+               $length = max( 10, $minLength );
+               // Multiply by 1.25 to get the number of hex characters we need
+               // Generate random hex chars
+               $hex = MWCryptRand::generateHex( ceil( $length * 1.25 ) );
+               // Convert from base 16 to base 32 to get a proper password like string
+               return substr( Wikimedia\base_convert( $hex, 16, 32, $length ), -$length );
+       }
+
+       /**
+        * Create an InvalidPassword
+        *
+        * @return InvalidPassword
+        */
+       public static function newInvalidPassword() {
+               static $password = null;
+
+               if ( $password === null ) {
+                       $factory = new self();
+                       $password = new InvalidPassword( $factory, array( 'type' => '' ), null );
+               }
+
+               return $password;
+       }
 }