Umherirrender has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/389519 )

Change subject: Archive the SecurePasswords extension
......................................................................

Archive the SecurePasswords extension

Empty the repo to avoid search results on old code.

Bug: T178768
Change-Id: I45ad9cf7451dabd679bfc82eda46e30e38a5e464
---
A ARCHIVED
D CODE_OF_CONDUCT.md
D ExtSecurePasswords.php
D Gruntfile.js
D SecurePasswords.i18n.php
D SecurePasswords.php
D i18n/ar.json
D i18n/arz.json
D i18n/ast.json
D i18n/be-tarask.json
D i18n/br.json
D i18n/bs.json
D i18n/ca.json
D i18n/cs.json
D i18n/de-formal.json
D i18n/de.json
D i18n/diq.json
D i18n/dsb.json
D i18n/el.json
D i18n/en.json
D i18n/eo.json
D i18n/es.json
D i18n/eu.json
D i18n/fa.json
D i18n/fi.json
D i18n/fr.json
D i18n/frp.json
D i18n/gl.json
D i18n/gsw.json
D i18n/he.json
D i18n/hsb.json
D i18n/hu.json
D i18n/ia.json
D i18n/id.json
D i18n/it.json
D i18n/ja.json
D i18n/ka.json
D i18n/km.json
D i18n/ko.json
D i18n/ksh.json
D i18n/lb.json
D i18n/mk.json
D i18n/ml.json
D i18n/nah.json
D i18n/nb.json
D i18n/nl.json
D i18n/nn.json
D i18n/oc.json
D i18n/pl.json
D i18n/pms.json
D i18n/pt-br.json
D i18n/pt.json
D i18n/qqq.json
D i18n/ro.json
D i18n/roa-tara.json
D i18n/ru.json
D i18n/si.json
D i18n/sk.json
D i18n/sr-ec.json
D i18n/sr-el.json
D i18n/stq.json
D i18n/sv.json
D i18n/sw.json
D i18n/te.json
D i18n/tl.json
D i18n/tr.json
D i18n/uk.json
D i18n/vep.json
D i18n/vi.json
D i18n/vo.json
D i18n/zh-hans.json
D i18n/zh-hant.json
D package.json
D password_history.sql
D securepasswords_uninstall.sql
D user.patch.user_newpassword.sql
D user.patch.user_password.sql
77 files changed, 2 insertions(+), 1,774 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/SecurePasswords 
refs/changes/19/389519/1

diff --git a/ARCHIVED b/ARCHIVED
new file mode 100644
index 0000000..575776f
--- /dev/null
+++ b/ARCHIVED
@@ -0,0 +1,2 @@
+This extension is unmaintained and has been archived.
+See <https://phabricator.wikimedia.org/T178768> for more information.
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index d8e5d08..0000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1 +0,0 @@
-The development of this software is covered by a [Code of 
Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct).
diff --git a/ExtSecurePasswords.php b/ExtSecurePasswords.php
deleted file mode 100644
index 3b7b16e..0000000
--- a/ExtSecurePasswords.php
+++ /dev/null
@@ -1,499 +0,0 @@
-<?php
-/**
- * ExtSecurePasswords class
- * Supports SecurePasswords version 3, as well as backwards compatibility with 
versions 1 and 2
- * See http://www.mediawiki.org/wiki/Extension:SecurePasswords for details
- * Code is released under the GNU GPL version 2 or (at your discretion) any 
later version
- */
-if ( !defined( 'MEDIAWIKI' ) ) {
-       echo "Not an entry point!\n";
-       die( 1 );
-}
-
-class ExtSecurePasswords {
-       public static function LoadExtensionSchemaUpdates( DatabaseUpdater 
$updater ) {
-               $dir = dirname( __FILE__ );
-               $updater->addExtensionUpdate( array( 'modifyField', 'user', 
'user_password', $dir . '/user.patch.user_password.sql', true ) );
-               $updater->addExtensionUpdate( array( 'modifyField', 'user', 
'user_newpassword', $dir . '/user.patch.user_newpassword.sql', true ) );
-               $updater->addExtensionTable( 'password_history', $dir . 
'/password_history.sql', true );
-               $updater->addExtensionTable( 'securepasswords_uninstall', $dir 
. '/securepasswords_uninstall.sql', true );
-               return true;
-       }
-
-       public static function UserCryptPassword( $password, &$salt, 
$wgPasswordSalt, &$hash ) {
-               global $wgSecurePasswordsRounds, $wgSecurePasswordsAutoRounds, 
$wgSecurePasswordsAutoRoundsThreshold;
-               global $wgSecurePasswordsEncryptPasswords, 
$wgSecurePasswordsSecretKey, $wgSecurePasswordsUninstall;
-               global $wgSecurePasswordsTrialMode, $wgUser;
-
-               static $recursionGuard = false;
-
-               if ( $wgSecurePasswordsUninstall || $recursionGuard ) {
-                       // do not generate new SecurePasswords hashes if we are 
uninstalling
-                       // or if we're re-entering this function due to calling 
User::crypt()
-                       return true;
-               }
-
-               $salt = substr( str_replace( '+', '.', base64_encode( 
MWCryptRand::generate( 16, true ) ) ), 0, 22 );
-               $hash = 'S3:';
-               $rounds = $wgSecurePasswordsRounds;
-               $user = RequestContext::getMain()->getUser();
-
-               if ( $wgSecurePasswordsAutoRounds ) {
-                       while ( true ) {
-                               $str = '$2y$' . $rounds . '$' . $salt;
-                               $start = microtime( true );
-                               crypt( 'benchmarkingpassword', $str );
-                               $end = microtime( true );
-
-                               if ( $end - $start >= 
$wgSecurePasswordsAutoRoundsThreshold || $rounds == 31 ) {
-                                       break;
-                               }
-
-                               $rounds++;
-                       }
-               }
-
-               $saltstr = '$2y$' . $rounds . '$' . $salt;
-               $hashstr = substr( crypt( $password, $saltstr ), strlen( '$2y$' 
. $rounds . '$' ) );
-
-               // generate hash options
-               $hashstr = 'G' . time() . ':R' . $rounds . ':H' . $hashstr;
-
-               if ( $wgSecurePasswordsEncryptPasswords ) {
-                       $iv = MWCryptRand::generate( 16, true );
-                       $hash .= 'E' . base64_encode( $iv ) . ':' . 
self::encrypt( $hashstr, $wgSecurePasswordsSecretKey, $iv );
-               } else {
-                       $hash .= $hashstr;
-               }
-
-               if ( $wgSecurePasswordsTrialMode ) {
-                       // stash away the default mediawiki hash for easier 
uninstallation
-                       $recursionGuard = true;
-                       // User::crypt() calls the UserCryptPassword hook, 
hence recursion guards
-                       $defaultHash = User::crypt( $password );
-                       $recursionGuard = false;
-
-                       $dbw = wfGetDB( DB_MASTER );
-                       $exists = $dbw->selectField( 
'securepasswords_uninstall', '1', array( 'su_user' => $wgUser->getId() ), 
'ExtSecurePasswords::UserCryptPassword' );
-                       if ( $exists ) {
-                               $dbw->update( 'securepasswords_uninstall', 
array( 'su_password' => $defaultHash ), array( 'su_user' => $wgUser->getId() ), 
'ExtSecurePasswords::UserCryptPassword' );
-                       } else {
-                               $dbw->insert( 'securepasswords_uninstall', 
array( 'su_user' => $wgUser->getId(), 'su_password' => $defaultHash ), 
'ExtSecurePasswords::UserCryptPassword' );
-                       }
-               }
-
-               // use our hash instead of mediawiki default
-               return false;
-       }
-
-       public static function UserComparePasswords( $hash, $password, $userId, 
&$result ) {
-               $bits = explode( ':', $hash, 2 );
-
-               switch ( $bits[0] ) {
-                       // the self::compareX functions modify $result 
accordingly
-                       case 'SP': // SecurePasswords v1
-                               self::compare1( $hash, $password, $userId, 
$result );
-                               break;
-                       case 'S2': // SecurePasswords v2
-                               self::compare2( $hash, $password, $userId, 
$result );
-                               break;
-                       case 'S3': // SecurePasswords v3
-                               self::compare3( $hash, $password, $userId, 
$result );
-                               break;
-                       default: // something else, pass off to MW to handle
-                               return true;
-               }
-
-               return false;
-       }
-
-       public static function isValidPassword( $password, &$result, $user ) {
-               global $wgValidPasswords, $wgSecurePasswordsSpecialChars, 
$wgSecurePasswordsAdditionalDictionary, $wgSecurePasswordsUninstall;
-               global $wgLang, $wgContLang;
-
-               if ( $wgSecurePasswordsUninstall ) {
-                       return true; // do not generate new SecurePasswords 
hashes if we are uninstalling
-               }
-
-               // if the password matches the user's current password, then 
don't check for validity
-               // this way users with passwords that don't fit the criteria 
can still log in :)
-               if ( ( $id = $user->getId() ) !== 0 ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $hash = $dbr->selectField( 'user', 'user_password', 
'user_id=' . $id );
-                       if ( User::comparePasswords( $hash, $password, $id ) ) {
-                               $result = true;
-                               return false;
-                       }
-               }
-
-               $ok = true;
-
-               $lang = $wgContLang->getPreferredVariant( false );
-               // check password length
-               if ( strlen( $password ) < $wgValidPasswords['minlength'] ) {
-                       $ok = false;
-               }
-
-               // check for a lowercase letter, if needed
-               if ( $wgValidPasswords['lowercase'] && !preg_match( '/[a-z]/', 
$password ) ) {
-                       $ok = false;
-               }
-
-               // check for an uppercase letter, if needed
-               if ( $wgValidPasswords['uppercase'] && !preg_match( '/[A-Z]/', 
$password ) ) {
-                       $ok = false;
-               }
-
-               // check for a digit, if needed
-               if ( $wgValidPasswords['digit'] && !preg_match( '/[0-9]/', 
$password ) ) {
-                       $ok = false;
-               }
-
-               // check for a special character, if needed
-               if ( $wgValidPasswords['special'] && !preg_match( '/[' . 
$wgSecurePasswordsSpecialChars . ']/', $password ) ) {
-                       $ok = false;
-               }
-
-               // check for the username, if needed
-               if ( $wgValidPasswords['usercheck'] && $wgContLang->lc( 
$password ) == $wgContLang->lc( $user->getName() ) ) {
-                       $ok = false;
-               }
-
-               // check for words, if needed. If the password is already bad, 
skip this since it could take up time
-               if ( $ok && $wgValidPasswords['wordcheck'] ) {
-                       if ( function_exists( 'pspell_check' ) ) {
-                               $config = pspell_config_create( $lang );
-                               pspell_config_runtogether( $config, true );
-                               if ( $wgSecurePasswordsAdditionalDictionary ) {
-                                       pspell_config_personal( $config, 
$wgSecurePasswordsAdditionalDictionary );
-                               }
-                               $link = pspell_new_config( $config );
-
-                               if ( $link ) {
-                                       if ( pspell_check( $link, $password ) ) 
{
-                                               $ok = false;
-                                       }
-                               }
-
-                               if ( $ok && $lang != 'en' ) {
-                                       $config = pspell_config_create( 'en' );
-                                       pspell_config_runtogether( $config, 
true );
-                                       $link = pspell_new_config( $config );
-
-                                       if ( $link ) {
-                                               if ( pspell_check( $link, 
$password ) ) {
-                                                       $ok = false;
-                                               }
-                                       }
-                               }
-                       } elseif ( function_exists( 'enchant_dict_check' ) ) {
-                               $broker = enchant_broker_init();
-                               $dict = enchant_broker_request_dict( $broker, 
$lang );
-                               if ( $dict ) {
-                                       if ( enchant_dict_check( $dict, 
$password ) ) {
-                                               $ok = false;
-                                       }
-                               }
-
-                               if ( $ok && $lang != 'en' ) {
-                                       $dict = enchant_broker_request_dict( 
$broker, 'en' );
-                                       if ( $dict ) {
-                                               if ( enchant_dict_check( $dict, 
$password ) ) {
-                                                       $ok = false;
-                                               }
-                                       }
-                               }
-
-                               if ( $ok && 
$wgSecurePasswordsAdditionalDictionary ) {
-                                       $dict = 
enchant_broker_request_pwl_dict( $broker, 
$wgSecurePasswordsAdditionalDictionary );
-                                       if ( $dict ) {
-                                               if ( enchant_dict_check( $dict, 
$password ) ) {
-                                                       $ok = false;
-                                               }
-                                       }
-                               }
-
-                               enchant_broker_free( $broker );
-                       }
-               }
-
-               if ( !$ok ) {
-                       $conds = array( wfMessage( 'securepasswords-minlength', 
$wgValidPasswords['minlength'] )->parse() );
-                       if ( $wgValidPasswords['lowercase'] ) {
-                               $conds[] = wfMessage( 
'securepasswords-lowercase' )->text();
-                       }
-                       if ( $wgValidPasswords['uppercase'] ) {
-                               $conds[] = wfMessage( 
'securepasswords-uppercase' )->text();
-                       }
-                       if ( $wgValidPasswords['digit'] ) {
-                               $conds[] = wfMessage( 'securepasswords-digit' 
)->text();
-                       }
-                       if ( $wgValidPasswords['special'] ) {
-                               $conds[] = wfMessage( 
'securepasswords-special', str_replace( '\\', '', 
$wgSecurePasswordsSpecialChars ) )->text();
-                       }
-                       if ( $wgValidPasswords['usercheck'] ) {
-                               $conds[] = wfMessage( 
'securepasswords-username', $wgUser->getName() )->parse();
-                       }
-                       if ( $wgValidPasswords['wordcheck'] ) {
-                               $conds[] = wfMessage( 'securepasswords-word' 
)->text();
-                       }
-                       $result = array( 'securepasswords-valid', 
$wgLang->listToText( $conds ) );
-                       return false;
-               }
-
-               $result = true;
-               return false;
-       }
-
-       /**
-        * Get password strength
-        */
-       private static function getPasswordStrength( $password ) {
-               global $wgSecurePasswordsStrengthTuning;
-               // TODO: implement
-       }
-
-       /**
-        * Encrypts a string with a given key and iv via mcrypt
-        * Returns base64-encoded result
-        */
-       private static function encrypt( $str, $key, $iv ) {
-               $m = mcrypt_module_open( 'rijndael-128', '', 'cbc', '' );
-               if ( $m === false ) {
-                       // maybe localize this, but it shouldn't ever happen in 
theory anyway...
-                       throw new MWException( 'mcrypt_module_open returned 
false' );
-               }
-               $key = hash( 'sha256', $key, true );
-               $blocksize = mcrypt_enc_get_block_size( $m );
-               mcrypt_generic_init( $m, $key, $iv );
-               $encrypted = base64_encode( mcrypt_generic( $m, self::pad( 
$str, $blocksize ) ) );
-               mcrypt_generic_deinit( $m );
-               mcrypt_module_close( $m );
-
-               return $encrypted;
-       }
-
-       private static function decrypt( $str, $key, $iv ) {
-               $m = mcrypt_module_open( 'rijndael-128', '', 'cbc', '' );
-               if ( $m === false ) {
-                       throw new MWException( 'mcrypt_module_open returned 
false' );
-               }
-               $key = hash( 'sha256', $key, true );
-               mcrypt_generic_init( $m, $key, $iv );
-               $decrypted = self::unpad( mdecrypt_generic( $m, base64_decode( 
$str ) ) );
-               mcrypt_generic_deinit( $m );
-               mcrypt_module_close( $m );
-
-               return $decrypted;
-       }
-
-       /**
-        * Helper functions because mcrypt is stupid and does null padding by 
default
-        * which is not binary safe in the slightest in order to unpad
-        * Using PKCS#7 instead
-        */
-       private static function pad( $str, $blocksize ) {
-               $pad = $blocksize - ( strlen( $str ) % $blocksize );
-               $str .= str_repeat( chr( $pad ), $pad );
-               return $str;
-       }
-
-       private static function unpad( $str ) {
-               return substr( $str, 0, strlen( $str ) - ord( substr( $str, -1 
) ) );
-       }
-
-       /**
-        * Compare password using version 3 of SecurePasswords
-        */
-       private static function compare3( $hash, $password, $userId, &$result ) 
{
-               global $wgSecurePasswordsSecretKey;
-
-               $bits = explode( ':', $hash );
-               $options = array();
-               $encrypted = false;
-               $iv = false;
-               $rounds = false;
-               $hash = false;
-               $result = false;
-
-               foreach ( $bits as $bit ) {
-                       if ( $bit == 'SP3' || strlen( $bit ) < 2 ) {
-                               continue;
-                       }
-                       $type = substr( $bit, 0, 1 );
-                       $rest = substr( $bit, 1 );
-                       switch ( $type ) {
-                               case 'G': // $rest is unix timestamp of when 
hash was generated
-                                       // TODO: password expiry stuff here
-                                       break;
-                               case 'R': // $rest is number of rounds to use
-                                       $rounds = $rest;
-                                       break;
-                               case 'H': // $rest is the actual hash
-                                       $hash = $rest;
-                                       break;
-                               case 'E': // $rest is the iv and the next bit 
is the encrypted value
-                                       $encrypted = true;
-                                       $iv = $rest;
-                                       break;
-                               default: // encrypted stuff after encountering 
E, or just invalid
-                                       if ( $encrypted ) {
-                                               $encrypted = false;
-                                               $d = explode( ':', 
self::decrypt( $bit, $wgSecurePasswordsSecretKey, $iv ) );
-                                               foreach ( $d as $p ) {
-                                                       $bits[] = $p;
-                                               }
-                                       }
-                                       break;
-                       }
-               }
-
-               if ( $rounds && $hash ) {
-                       $hashstr = '$2y$' . $rounds . '$' . $hash;
-                       $result = ( crypt( $password, $hashstr ) == $hashstr );
-               }
-
-               return false;
-       }
-
-       /**
-        * Compare password using version 2 of SecurePasswords
-        */
-       private static function compare2( $hash, $password, $userId, &$result) {
-               global $wgSecurePasswordsSecretKeys;
-               $bits = explode( ':', $hash, 4 );
-
-               $type1 = substr( $bits[1], 0, 1 );
-               $type2 = substr( $bits[1], 1, 1 );
-               $salt = $bits[2];
-               $hash1 = $bits[3];
-
-               $a = self::hashOrder( $userId );
-               $algos = array(
-                       $a[0] => 'sha512',
-                       $a[1] => 'ripemd160',
-                       $a[2] => 'ripemd320',
-                       $a[3] => 'whirlpool',
-                       $a[4] => 'gost',
-                       $a[5] => 'tiger192,4',
-                       $a[6] => 'haval256,5',
-                       $a[7] => 'sha256',
-                       $a[8] => 'sha384',
-                       $a[9] => 'ripemd128',
-                       $a[10] => 'ripemd256',
-               );
-               $pw = hash_hmac( $algos[$type2], $salt . '-' . hash_hmac( 
$algos[$type1], $password, $wgSecurePasswordsSecretKeys[0] ), 
$wgSecurePasswordsSecretKeys[1] );
-               $h1 = gzuncompress( base64_decode( $hash1 ) );
-               $ksize = mcrypt_get_key_size( MCRYPT_RIJNDAEL_256, 
MCRYPT_MODE_CBC );
-               $key = substr( $wgSecurePasswordsSecretKeys[2], 0, $ksize - 1 );
-               $bits = explode( '|', $h1 );
-               $iv = base64_decode( $bits[1] );
-               $h2 = base64_decode( $bits[0] );
-               $hf = mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $key, $h2, 
MCRYPT_MODE_CBC, $iv );
-
-               $result = ( $pw === $hf );
-               return false;
-       }
-
-       /**
-        * Compare password using version 1 of SecurePasswords
-        */
-       private static function compare1( $hash, $password, $userId, &$result ) 
{
-               $bits = explode( ':', $hash, 4 );
-
-               $type1 = substr( $bits[1], 0, 1 );
-               $type2 = substr( $bits[1], 1, 1 );
-               $salt = $bits[2];
-               $hash1 = $bits[3];
-
-               $m = function_exists( 'mcrypt_encrypt' );
-               $g = function_exists( 'gzcompress' );
-
-               $algos = array(
-                       'A' => 'md5',
-                       'B' => 'sha1',
-                       'C' => 'sha512',
-                       'D' => 'ripemd160',
-                       'E' => 'ripemd320',
-                       'F' => 'whirlpool',
-                       'G' => 'tiger192,4',
-                       'H' => 'snefru',
-                       'I' => 'gost',
-                       'J' => 'haval256,5',
-               );
-
-               $pw1 = hash( $algos[$type1], $password );
-               $pwf = hash( $algos[$type2], $salt . '-' . $pw1 );
-
-               if ( $g ) {
-                       $h1 = gzuncompress( base64_decode( $hash1 ) );
-               } else {
-                       $h1 = base64_decode( $hash1 );
-               }
-
-               if ( $m ) {
-                       global $wgSecretKey;
-                       $ksize = mcrypt_get_key_size( MCRYPT_RIJNDAEL_256, 
MCRYPT_MODE_CBC );
-                       $key = substr( $wgSecretKey, 0, $ksize - 1 );
-                       $bits = explode( '|', $h1 );
-                       $iv = base64_decode( $bits[1] );
-                       $h2 = base64_decode( $bits[0] );
-                       $hf = mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $key, $h2, 
MCRYPT_MODE_CBC, $iv );
-               } else {
-                       $hf = $h1;
-               }
-
-               $result = ($hf === $pwf);
-
-               return false;
-       }
-
-       /**
-        * Legacy function used in version 2 of SecurePasswords
-        */
-       private static function hashOrder( $userid ) {
-               if ( $userid > 999999 ) {
-                       $userid = substr( $userid, 0, 6 );
-               }
-               $o = floor( ( ( $userid * 3 ) + 513829 ) / 5 ) + 925487; #just 
two random prime numbers with no significance attached
-               $s = str_split( $o );
-               $r = array();
-               $f = false;
-               $n = 64;
-               //in case it is impossible to get all values 65-90 from the 
above values, we break after 1000 iterations
-               for($i = 0; $i < 1000; $i++) {
-                       $n += $s[0];
-                       if ( $n < 65 ) $n = 65;
-                       elseif ( $n > 90 ) $n = 65 + $s[0];
-                       if ( !in_array( chr( $n ), $r ) ) $r[] = chr( $n );
-                       $n -= $s[1];
-                       if ( $n < 65 ) $n = 65;
-                       elseif ( $n > 90 ) $n = 90 - $s[0];
-                       if ( !in_array( chr( $n ), $r ) ) $r[] = chr( $n );
-                       $n += 2 * $s[2];
-                       if ( $n < 65 ) $n = 65;
-                       elseif ( $n > 90 ) $n = 65 + $s[0];
-                       if ( !in_array( chr( $n ), $r ) ) $r[] = chr( $n );
-                       $n -= 2 * $s[3];
-                       if ( $n < 65 ) $n = 65;
-                       elseif ( $n > 90 ) $n = 90 - $s[0];
-                       if ( !in_array( chr( $n ), $r ) ) $r[] = chr( $n );
-                       $n += 3 * $s[4];
-                       if ( $n < 65 ) $n = 65;
-                       elseif ( $n > 90 ) $n = 65 + $s[0];
-                       if ( !in_array( chr( $n ), $r ) ) $r[] = chr( $n );
-                       $n -= 3 * $s[5];
-                       if ( $n < 65 ) $n = 65;
-                       elseif ( $n > 90 ) $n = 90 - $s[0];
-                       if ( !in_array( chr( $n ), $r ) ) $r[] = chr( $n );
-                       if ( count( $r ) == 26 ) {
-                               $f = true;
-                               break;
-                       }
-               }
-               if ( !$f ) {
-                       return array( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 
'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
'Z' );
-               }
-               return $r;
-       }
-}
\ No newline at end of file
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 2db815f..0000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*jshint node:true */
-module.exports = function ( grunt ) {
-       grunt.loadNpmTasks( 'grunt-jsonlint' );
-       grunt.loadNpmTasks( 'grunt-contrib-jshint' );
-       grunt.loadNpmTasks( 'grunt-banana-checker' );
-
-       grunt.initConfig( {
-               banana: {
-                       all: 'i18n/'
-               },
-               jshint: {
-                       all: [
-                               '**/*.js',
-                               '!node_modules/**',
-                               '!vendor/**'
-                       ]
-               },
-               jsonlint: {
-                       all: [
-                               '**/*.json',
-                               '!node_modules/**',
-                               '!vendor/**'
-                       ]
-               }
-       } );
-
-       grunt.registerTask( 'test', [ 'jsonlint', 'banana', 'jshint' ] );
-       grunt.registerTask( 'default', 'test' );
-};
diff --git a/SecurePasswords.i18n.php b/SecurePasswords.i18n.php
deleted file mode 100644
index 8c3c775..0000000
--- a/SecurePasswords.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * 
https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim4ca4bec806c3037d' ) ) {
-       function wfJsonI18nShim4ca4bec806c3037d( $cache, $code, &$cachedData ) {
-               $codeSequence = array_merge( array( $code ), 
$cachedData['fallbackSequence'] );
-               foreach ( $codeSequence as $csCode ) {
-                       $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
-                       if ( is_readable( $fileName ) ) {
-                               $data = FormatJson::decode( file_get_contents( 
$fileName ), true );
-                               foreach ( array_keys( $data ) as $key ) {
-                                       if ( $key === '' || $key[0] === '@' ) {
-                                               unset( $data[$key] );
-                                       }
-                               }
-                               $cachedData['messages'] = array_merge( $data, 
$cachedData['messages'] );
-                       }
-
-                       $cachedData['deps'][] = new FileDependency( $fileName );
-               }
-               return true;
-       }
-
-       $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 
'wfJsonI18nShim4ca4bec806c3037d';
-}
diff --git a/SecurePasswords.php b/SecurePasswords.php
deleted file mode 100755
index a19157e..0000000
--- a/SecurePasswords.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
- * SecurePasswords extension by Ryan Schmidt (Skizzerz)
- * See http://www.mediawiki.org/wiki/Extension:SecurePasswords for details
- * Code is released under the GNU GPL version 2 or (at your discretion) any 
later version
- */
-if ( !defined( 'MEDIAWIKI' ) ) {
-       echo "Not an entry point!\n";
-       die( 1 );
-}
-
-// Please see extension documentation for more detailed descriptions on all of 
these parameters
-$wgValidPasswords = array(
-       'minlength' => $wgMinimalPasswordLength, #Minimum password length, 
should be at least 8 for decent security
-       'lowercase' => 1, #How many lowercase letters to require
-       'uppercase' => 1, #How many uppercase letters to require
-       'digit'     => 1, #How many digits to require
-       'special'   => 0, #How many special characters to require
-       'previous'  => 0, #Number of previous passwords to retain (forcing 
users to not pick the same password they previously used)
-       'strength'  => 0, #Minimum password strength needed (0 - 100)
-       'usercheck' => true, #Should we disallow passwords that are the same as 
the username?
-       'wordcheck' => false, #Should we check the password against a 
dictionary to make sure that it is not a word? (force-disabled if server does 
not support it)
-);
-$wgSecurePasswordsSpecialChars = '.|\/!@#$%^&*\(\)\-_=+\[\]{}`~,<>?\'";: '; 
#Character class of special characters for a regex
-$wgSecurePasswordsRounds = 10; #Number of rounds for the bcrypt algorithm, 
power of 2. Valid values are 1-31. 10 = 2^10 = 1024 rounds (see documentation 
page for more information)
-$wgSecurePasswordsAutoRounds = false; #Dynamically determines the optimal 
number of rounds, will slow down requests that involve hash generation (see 
documentation page for more information)
-$wgSecurePasswordsAutoRoundsThreshold = 0.5; #How much time a hash needs to 
take (in seconds) before the round size gets chosen via autorounds (default 0.5 
seconds)
-$wgSecurePasswordsExpiry = 0; #Number of days it takes a password to expire. 0 
means passwords never expire. This can also be configured per-group (see 
documentation page for more information)
-$wgSecurePasswordsEncryptPasswords = false; #Whether to encrypt passwords *IN 
ADDITION* to hashing them in the database (true, requires mcrypt and zlib), or 
only hash the passwords (false, default)
-$wgSecurePasswordsSecretKey = false; #MUST be customized in LocalSettings.php 
if you are encrypting passwords! (or preferrably a file not accessible on the 
web with appropriate permissions set)
-$wgSecurePasswordsMigrateOnLogin = false; #Whether to migrate a user to the 
SecurePasswords hash format on login (true) or only when they change their 
password (false, default)
-$wgSecurePasswordsStrengthTuning = array(); #Allows for tuning the default 
password strength checker, see documentation page for more information
-$wgSecurePasswordsAdditionalDictionary = false; #Allows for specifying an 
additional dictionary file that will be checked against if wordcheck is true 
(see documentation page for more information)
-
-// Configuration variables related to trialling / uninstallation -- don't set 
these except in very specific circumstances
-$wgSecurePasswordsTrialMode = false; #Specifies that default MediaWiki hashes 
are stored in an archive table for easy uninstallation. Only set this to true 
if you are trialling SecurePasswords and may wish to uninstall it soon
-$wgSecurePasswordsUninstall = false; #Specifies that you are attempting to 
uninstall SecurePasswords. Any logins of SecurePasswords hashes will be 
migrated back to MediaWiki format, and all features of the extension are 
disabled
-
-// Old configuration options, no longer used in current versions, but retained 
for backwards compat (namely, migrating from old versions to the current 
version)
-// If these are customized in LocalSettings.php, it is assumed you previously 
had an older version installed and some additional server checks are made
-$wgSecurePasswordsSecretKeys = array(false, false, false);
-$wgSecurePasswordSpecialChars = false; #Typo in older versions, if this is 
defined we replace the above char class with this
-
-$wgExtensionCredits['other'][] = array(
-       'path'           => __FILE__,
-       'name'           => 'SecurePasswords',
-       'author'         => 'Ryan Schmidt',
-       'url'            => 
'https://www.mediawiki.org/wiki/Extension:SecurePasswords',
-       'version'        => '3.1.0beta1',
-       'descriptionmsg' => 'securepasswords-desc',
-);
-
-$wgMessagesDirs['SecurePasswords'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['SecurePasswords'] = dirname( __FILE__ ) . 
'/SecurePasswords.i18n.php';
-$wgAutoloadClasses['ExtSecurePasswords'] = dirname( __FILE__ ) . 
'/ExtSecurePasswords.php';
-$wgHooks['UserCryptPassword'][] = 'ExtSecurePasswords::UserCryptPasswords'; 
//used to encrypt passwords
-$wgHooks['UserComparePasswords'][] = 
'ExtSecurePasswords::UserComparePasswords'; //used to compare a password with 
an encrypted password
-$wgHooks['isValidPassword'][] = 'ExtSecurePasswords::isValidPassword'; //used 
to enforce password strength
-$wgHooks['LoadExtensionSchemaUpdates'][] = 
'ExtSecurePasswords::LoadExtensionSchemaUpdates'; // performs necessary schema 
changes
-$wgExtensionFunctions[] = 'efSecurePasswordsCheckSetup';
-
-//check server requirements and also that parameters are correctly set
-//Mandatory: PHP 5.3.7+
-//Optional: mcrypt, zlib, pspell or enchant
-function efSecurePasswordsCheckSetup() {
-       global $wgValidPasswords, $wgSecurePasswordsSecretKeys, 
$wgSecurePasswordsSecretKey, $wgSecurePasswordSpecialChars, 
$wgSecurePasswordsSpecialChars;
-       global $wgSecurePasswordsRounds, $wgSecurePasswordsExpiry, 
$wgSecurePasswordsEncryptPasswords, $wgSecurePasswordsMigrateOnLogin;
-       global $wgSecurePasswordsAutoRounds, 
$wgSecurePasswordsAutoRoundsThreshold, $wgSecurePasswordsAdditionalDictionary;
-       $errors = array();
-
-       if ( version_compare( PHP_VERSION, '5.3.7' ) < 0 ) {
-               // We MIGHT be able to use i18n here since it is called in 
$wgExtensionFunctions, but not sure...
-               $errors[] = 'The SecurePasswords extension requires PHP version 
5.3.7 or greater';
-       }
-
-       if ( $wgSecurePasswordsEncryptPasswords ) {
-               if( !function_exists( 'mcrypt_module_open' ) ) {
-                       $errors[] = 'The mcrypt PHP extension is required 
because you are encrypting password hashes';
-               }
-
-               if ( !in_array( 'rijndael-128', mcrypt_list_modules() ) ) {
-                       $errors[] = 'Your installation of mcrypt does not 
support AES encryption (Rijndael-128)';
-               }
-
-               if ( $wgSecurePasswordsSecretKey == false ) {
-                       $errors[] = '$wgSecurePasswordsSecretKey must be set 
becase you are encrypting password hashes';
-               }
-       }
-
-       if ( $wgSecurePasswordsSecretKeys != array(false, false, false) ) {
-               if ( !function_exists( 'mcrypt_encrypt' ) ) {
-                       $errors[] = 'The mcrypt PHP extension is required 
because you are migrating from an older version of SecurePasswords';
-               }
-
-               if ( !function_exists( 'gzcompress' ) ) {
-                       $errors[] = 'The zlib PHP extension is required because 
you are migrating from an older version of SecurePasswords';
-               }
-       }
-
-       $wgSecurePasswordsRounds = intval( $wgSecurePasswordsRounds );
-       if ( $wgSecurePasswordsRounds < 1 || $wgSecurePasswordsRounds > 31 ) {
-               $errors[] = '$wgSecurePasswordsRounds must be an integer 
between 1 and 31, inclusive';
-       }
-
-       $wgSecurePasswordsAutoRoundsThreshold = floatval( 
$wgSecurePasswordsAutoRoundsThreshold );
-       if ( $wgSecurePasswordsAutoRoundsThreshold <= 0 ) {
-               $errors[] = '$wgSecurePasswordsAutoRoundsThreshold must be a 
decimal greater than 0';
-       }
-
-       if ( $wgValidPasswords['wordcheck'] && !( function_exists( 
'pspell_check' ) || function_exists( 'enchant_dict_check' ) ) ) {
-               $errors[] = 'Either the pspell or enchant PHP extension is 
required because you are checking if passwords are dictionary words';
-
-               if ( $wgSecurePasswordsAdditionalDictionary !== false && 
!is_readable( $wgSecurePasswordsAdditionalDictionary ) ) {
-                       $errors[] = 'You have specified an additional 
dictionary for word checking but it does not exist or it is not readable by the 
webserver';
-               }
-       }
-
-       if ( count( $errors ) > 0 ) {
-               throw new MWException( implode( "\n", $errors ) );
-       }
-
-       // If we get here, we're good, do other init things
-
-       // typo fix
-       if ( $wgSecurePasswordSpecialChars !== false ) {
-               $wgSecurePasswordsSpecialChars = $wgSecurePasswordSpecialChars;
-       }
-}
diff --git a/i18n/ar.json b/i18n/ar.json
deleted file mode 100644
index 4598f87..0000000
--- a/i18n/ar.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Meno25",
-                       "OsamaK",
-                       "Ouda"
-               ]
-       },
-       "securepasswords-desc": "ينشئ هاشات كلمة سر أكثر أمنا ويضيف متحقق من 
قوة كلمة السر",
-       "securepasswords-valid": "كلمة السر غير صحيحة أو قصيرة جدا.\nيجب: $1.",
-       "securepasswords-minlength": "يكون طولها على الأقل {{PLURAL:$1||حرفًا 
واحدًا|حرفين|$1 حروف|$1 حرفًا|$1 حرف}}",
-       "securepasswords-lowercase": "تحتوي على الأقل على حرف واحد صغير",
-       "securepasswords-uppercase": "تحتوي على الأقل على حرف واحد كبير",
-       "securepasswords-digit": "يحتوى على رقم واحد على الأقل",
-       "securepasswords-special": "تحتوى على الأقل على رمز خاص (الرموز الخاصة 
مثل : $1)",
-       "securepasswords-username": "تكون مختلفة عن اسم المستخدم",
-       "securepasswords-word": "لا تكون كلمة"
-}
diff --git a/i18n/arz.json b/i18n/arz.json
deleted file mode 100644
index d99016f..0000000
--- a/i18n/arz.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Meno25",
-                       "Ouda",
-                       "Ramsis II"
-               ]
-       },
-       "securepasswords-desc": "ينشئ هاشات كلمة سر أكثر أمنا ويضيف متحقق من 
قوة كلمة السر",
-       "securepasswords-valid": "الباسورد بتاعتك ماتنفعش او قصيره 
خالص.\nالباسورد لازم: $1.",
-       "securepasswords-minlength": "لازم طولها يكون ع الاقل $1 
{{PLURAL:$1|حرف|حرف}}",
-       "securepasswords-lowercase": "تحتوى على الأقل على حرف واحد صغير",
-       "securepasswords-uppercase": "تحتوى على الأقل على حرف واحد كبير",
-       "securepasswords-digit": "يحتوى على رقم واحد على الأقل",
-       "securepasswords-special": "بتحتوى على رمز خاص واحد ع الاقل (الرموز 
الخاصه هما:$1)",
-       "securepasswords-username": "تكون مختلفة عن اسم المستخدم",
-       "securepasswords-word": "لا تكون كلمة"
-}
diff --git a/i18n/ast.json b/i18n/ast.json
deleted file mode 100644
index a159649..0000000
--- a/i18n/ast.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Xuacu"
-               ]
-       },
-       "securepasswords-desc": "Crea cifraos de contraseñes más seguros y 
amiesta un comprobador de fortaleza de clave",
-       "securepasswords-valid": "La contraseña ye inválida o demasiao 
curtia.\nTien de: $1.",
-       "securepasswords-minlength": "tener polo menos {{PLURAL:$1|un 
caráuter|$1 caráuteres}}",
-       "securepasswords-lowercase": "contener polo menos una lletra minúscula",
-       "securepasswords-uppercase": "contener polo menos una lletra mayúscula",
-       "securepasswords-digit": "contener polo menos un díxitu",
-       "securepasswords-special": "contener polo menos un caráuter especial 
(los caráuteres especiales son: $1)",
-       "securepasswords-username": "ser diferente del to nome d'usuariu",
-       "securepasswords-word": "nun ser una pallabra"
-}
diff --git a/i18n/be-tarask.json b/i18n/be-tarask.json
deleted file mode 100644
index 2af1b41..0000000
--- a/i18n/be-tarask.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "EugeneZelenko",
-                       "Jim-by"
-               ]
-       },
-       "securepasswords-desc": "Стварае больш бясьпечныя хэшы пароляў і дадае 
палепшаную праверку сакрэтнасьці пароляў",
-       "securepasswords-valid": "Ваш пароль няслушны ці занадта 
кароткі.\nПавінен: $1.",
-       "securepasswords-minlength": "складацца хаця б $1 
{{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}",
-       "securepasswords-lowercase": "утрымліваць хаця бы адну малую літару",
-       "securepasswords-uppercase": "утрымліваць хаця бы адну вялікую літару",
-       "securepasswords-digit": "утрымліваць хаця бы адну лічбу",
-       "securepasswords-special": "утрымліваць хаця бы адзін спэцыяльны 
сымбаль (такі як: $1)",
-       "securepasswords-username": "адрозьнівацца ад Вашага імя ўдзельніка",
-       "securepasswords-word": "ня быць словам"
-}
diff --git a/i18n/br.json b/i18n/br.json
deleted file mode 100644
index 471cf19..0000000
--- a/i18n/br.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Fohanno",
-                       "Fulup",
-                       "Y-M D"
-               ]
-       },
-       "securepasswords-desc": "Sevel a ra hacherezh gerioù-tremen suroc'h hag 
ouzhpennañ a ra ur gwirier kemplezhder ar gerioù-tremen.",
-       "securepasswords-valid": "Direizh pe re verr eo ho ker-tremen.\nRet eo 
dezhañ : $1.",
-       "securepasswords-minlength": "bezañ $1 
{{PLURAL:$1|arouezenn|arouezenn}} hir da nebeutañ",
-       "securepasswords-lowercase": "ennañ ul lizherenn vunut da nebeutañ",
-       "securepasswords-uppercase": "ennañ ur bennlizherenn da nebeutañ",
-       "securepasswords-digit": "1 sifr ennañ da nebeutañ",
-       "securepasswords-special": "Enderc'hel 1 arouezenn dibar da nebeutañ 
(an arouezennoù dibar zo : $1)",
-       "securepasswords-username": "bezañ disheñvel eus hoc'h anv implijer",
-       "securepasswords-word": "arabat eo e vefe ur ger"
-}
diff --git a/i18n/bs.json b/i18n/bs.json
deleted file mode 100644
index 16a5eef..0000000
--- a/i18n/bs.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "CERminator"
-               ]
-       },
-       "securepasswords-desc": "Pravljenje mnogo sigurnijih haševa za šifre i 
dodaje provjeru jačine šifre",
-       "securepasswords-valid": "Vaša šifra je nevaljana ili je 
prekratka.\nMora: $1.",
-       "securepasswords-minlength": "biti duga najmanje $1 
{{PLURAL:$1|znak|znaka|znakova}}",
-       "securepasswords-lowercase": "sadržavati najmanje 1 malo slovo",
-       "securepasswords-uppercase": "sadržavati najmanje 1 veliko slovo",
-       "securepasswords-digit": "sadržavati najmanje 1 cifru",
-       "securepasswords-special": "sadržavati najmanje 1 specijalni znak 
(specijalni znakovi su: $1)",
-       "securepasswords-username": "biti različita od Vašeg korisničkog imena",
-       "securepasswords-word": "ne bude riječ"
-}
diff --git a/i18n/ca.json b/i18n/ca.json
deleted file mode 100644
index 4e5994e..0000000
--- a/i18n/ca.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Aleator"
-               ]
-       },
-       "securepasswords-valid": "La seva contrasenya no és vàlida o és massa 
curta: $1.\nHa de: $1.",
-       "securepasswords-minlength": "ser com a mínim de $1 
{{PLURAL:$1|caràcter|caràcters}}",
-       "securepasswords-lowercase": "contenir com a mínim 1 lletra en 
minúscula",
-       "securepasswords-uppercase": "contenir com a mínim 1 lletra en 
majúscula",
-       "securepasswords-digit": "contenir com a mínim 1 dígit",
-       "securepasswords-special": "contenir com a mínim 1 caràcter especial 
(són caràcters especials els següents: $1)"
-}
diff --git a/i18n/cs.json b/i18n/cs.json
deleted file mode 100644
index f993415..0000000
--- a/i18n/cs.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Mormegil",
-                       "XenoPheX"
-               ]
-       },
-       "securepasswords-desc": "Vytváří bezpečnější heslové hashe a přidává 
kontrolu síly hesel",
-       "securepasswords-valid": "Vaše heslo je neplatné nebo příliš 
krátké.\nMusí: $1.",
-       "securepasswords-minlength": "být dlouhé alespoň $1 
{{PLURAL:$1|znak|znaky|znaků}}",
-       "securepasswords-lowercase": "obsahovat alespoň 1 malé písmeno",
-       "securepasswords-uppercase": "obsahovat alespoň 1 velké písmeno",
-       "securepasswords-digit": "obsahovat alespoň 1 číslici",
-       "securepasswords-special": "obsahovat alespoň 1 speciální znak 
(speciální znaky jsou: $1)",
-       "securepasswords-username": "být odlišné od vašeho uživatelského jména",
-       "securepasswords-word": "nebýt slovo"
-}
diff --git a/i18n/de-formal.json b/i18n/de-formal.json
deleted file mode 100644
index 16b12c3..0000000
--- a/i18n/de-formal.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Kghbln"
-               ]
-       },
-       "securepasswords-username": "sich von Ihrem Benutzernamen unterscheiden"
-}
diff --git a/i18n/de.json b/i18n/de.json
deleted file mode 100644
index 74ec873..0000000
--- a/i18n/de.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Kghbln",
-                       "Melancholie",
-                       "Umherirrender"
-               ]
-       },
-       "securepasswords-desc": "Ermöglicht die Generierung sichererer 
Passwortstreuwerte und fügt eine Passwortstärkenprüfung hinzu",
-       "securepasswords-valid": "Das Passwort ist entweder ungültig oder zu 
kurz.\nEs muss: $1.",
-       "securepasswords-minlength": "mindestens {{PLURAL:$1|ein Zeichen|$1 
Zeichen}} lang sein",
-       "securepasswords-lowercase": "mindestens einen Kleinbuchstaben 
enthalten",
-       "securepasswords-uppercase": "mindestens einen Großbuchstaben 
enthalten",
-       "securepasswords-digit": "mindestens eine Ziffer enthalten",
-       "securepasswords-special": "mindestens ein Sonderzeichen enthalten 
(Sonderzeichen sind: $1)",
-       "securepasswords-username": "sich von deinem Benutzernamen 
unterscheiden",
-       "securepasswords-word": "etwas anderes als ein Wort sein"
-}
diff --git a/i18n/diq.json b/i18n/diq.json
deleted file mode 100644
index 6bf217c..0000000
--- a/i18n/diq.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Erdemaslancan"
-               ]
-       },
-       "securepasswords-word": "çekuy do nêbo"
-}
diff --git a/i18n/dsb.json b/i18n/dsb.json
deleted file mode 100644
index 662c8b0..0000000
--- a/i18n/dsb.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Michawiki"
-               ]
-       },
-       "securepasswords-desc": "Napórajo wěsćejše gronidłowe hašy a pśidawa 
funkciju za kontrolěrowanje mócy gronidła.",
-       "securepasswords-valid": "Twójo gronidło jo njepłaśiwe abo pśekrotko. 
Musy: $1.",
-       "securepasswords-minlength": "nanejmjenjej $1 
{{PLURAL:$1|znamuško|znamušce|znamuška|znamuškow}} dłujke byś",
-       "securepasswords-lowercase": "nanejmjenjej 1 mały pismik wopśimjeś",
-       "securepasswords-uppercase": "nanejmjenjej 1 wjeliki pismik wopśimjeś",
-       "securepasswords-digit": "nanejmjenjej 1 cyfru wopśimjeś",
-       "securepasswords-special": "nanejmjenjej 1 specialne znamuško wopśimjeś 
(Specialne znamuška su: $1)",
-       "securepasswords-username": "se wót twójogo wužywarske mjenja 
rozeznawaś",
-       "securepasswords-word": "něco druge byś ako słowo"
-}
diff --git a/i18n/el.json b/i18n/el.json
deleted file mode 100644
index 661ac80..0000000
--- a/i18n/el.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Crazymadlover",
-                       "Dada",
-                       "Omnipaedista",
-                       "ZaDiak",
-                       "Απεργός",
-                       "Glavkos"
-               ]
-       },
-       "securepasswords-desc": "Δημιουργεί πιο ασφαλείς συμβολοσειρές κωδικών 
και προσθέτει έναν ελεγκτή της ισχύος του κωδικού.",
-       "securepasswords-valid": "Ο κωδικός σας είναι ακατάλληλος ή πολύ 
μικρός. Πρέπει: $1.",
-       "securepasswords-minlength": "να έχει τουλάχιστον $1 
{{PLURAL:$1|χαρακτήρα|χαρακτήρες}}",
-       "securepasswords-lowercase": "να περιλαμβάνει τουλάχιστον 1 πεζό 
γράμμα",
-       "securepasswords-uppercase": "να περιλαμβάνει τουλάχιστον 1 κεφαλαίο 
γράμμα",
-       "securepasswords-digit": "να περιέχει τουλάχιστον 1 ψηφίο",
-       "securepasswords-special": "να περιλαμβάνει τουλάχιστον 1 ειδικό 
χαρακτήρα (οι ειδικοί χαρακτήρες είναι: $1)",
-       "securepasswords-username": "να είναι διαφορετικός από το όνομα χρήστη",
-       "securepasswords-word": "να μην είναι μία λέξη"
-}
diff --git a/i18n/en.json b/i18n/en.json
deleted file mode 100644
index d64edfe..0000000
--- a/i18n/en.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Ryan Schmidt"
-               ]
-       },
-       "securepasswords-desc": "Creates more secure password hashes and adds a 
password strength checker",
-       "securepasswords-valid": "Your password is invalid or too short.\nIt 
must: $1.",
-       "securepasswords-minlength": "be at least $1 
{{PLURAL:$1|character|characters}} long",
-       "securepasswords-lowercase": "contain at least 1 lowercase letter",
-       "securepasswords-uppercase": "contain at least 1 uppercase letter",
-       "securepasswords-digit": "contain at least 1 digit",
-       "securepasswords-special": "contain at least 1 special character 
(special characters are: $1)",
-       "securepasswords-username": "be different from your username",
-       "securepasswords-word": "not be a word"
-}
diff --git a/i18n/eo.json b/i18n/eo.json
deleted file mode 100644
index f037a8a..0000000
--- a/i18n/eo.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Yekrats"
-               ]
-       },
-       "securepasswords-valid": "Via pasvorto estas malvalida aŭ tro 
mallonga.\nĜi devas: $1.",
-       "securepasswords-minlength": "esti longa almenaŭ $1 
{{PLURAL:$1|signo|signoj}}",
-       "securepasswords-lowercase": "enhavi almenaŭ 1 minusklan signon",
-       "securepasswords-uppercase": "enhavi almenaŭ 1 majusklan signon",
-       "securepasswords-digit": "enhavi almenaŭ 1 ciferon",
-       "securepasswords-special": "enhavi almenaŭ 1 specialan signon 
(specialaj signoj estas: $1)",
-       "securepasswords-username": "esti malsama de via salutnomo",
-       "securepasswords-word": "ne esti vorto"
-}
diff --git a/i18n/es.json b/i18n/es.json
deleted file mode 100644
index 55b1099..0000000
--- a/i18n/es.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Crazymadlover",
-                       "Sanbec",
-                       "Macofe"
-               ]
-       },
-       "securepasswords-desc": "Crea cifrados de contraseñas más seguras y 
añade un comprobador de su fortaleza",
-       "securepasswords-valid": "Tu contraseña es inválida o demasiado 
corta.\nDebe: $1.",
-       "securepasswords-minlength": "tener al menos $1 
{{PLURAL:$1|carácter|caracteres}}",
-       "securepasswords-lowercase": "contener al menos 1 letra minúscula",
-       "securepasswords-uppercase": "contener al menos 1 letra mayúscula",
-       "securepasswords-digit": "contener al menos 1 dígito",
-       "securepasswords-special": "contener al menos 1 carácter especial (los 
caracteres especiales son: $1)",
-       "securepasswords-username": "ser diferente de tu nombre de usuario",
-       "securepasswords-word": "no ser una palabra"
-}
diff --git a/i18n/eu.json b/i18n/eu.json
deleted file mode 100644
index ded5d1e..0000000
--- a/i18n/eu.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "An13sa",
-                       "Kobazulo"
-               ]
-       },
-       "securepasswords-valid": "Zure pasahitza oker dago edo motzegia 
da.\nHonelakoa izan behar du: $1.",
-       "securepasswords-minlength": "Gutxienez, {{PLURAL:$1|karaktere $1|$1 
karaktere}} luze izan behar du",
-       "securepasswords-lowercase": "gutxienez hizki bat minuskulaz izan",
-       "securepasswords-uppercase": "gutxienez letra larri bat izan",
-       "securepasswords-digit": "gutxienez digitu bat izan",
-       "securepasswords-special": "gutxienez karaktere berezi bat izan (Hauek 
dira karaktere bereziak: $1)",
-       "securepasswords-username": "erabiltzaile izenetik desberdina izan"
-}
diff --git a/i18n/fa.json b/i18n/fa.json
deleted file mode 100644
index a3d2b20..0000000
--- a/i18n/fa.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Americophile",
-                       "Armin1392"
-               ]
-       },
-       "securepasswords-desc": "ایجاد هش‌های رمز عبور امنیتی بیشتر و افزودن 
بررسی‌کننده قدرت رمز عبور",
-       "securepasswords-valid": "رمز عبور یا نامعتبر است یا خیلی کوتاه 
است.\nباید: $1",
-       "securepasswords-minlength": "حداقل $1 {{PLURAL:$1|شناسه|شناسه}} طول 
باشد",
-       "securepasswords-lowercase": "شامل حداقل 1 حرف کوچک",
-       "securepasswords-uppercase": "شامل حداقل 1 حرف بزرگ",
-       "securepasswords-digit": "شامل حداقل 1 رقمی",
-       "securepasswords-special": "شامل حداقل ۱ شناسهٔ ویژه (شناسه‌های ویژه 
هستند: $1)",
-       "securepasswords-username": "از نام کاربریتان متفاوت باشد",
-       "securepasswords-word": "کلمه نباشد."
-}
diff --git a/i18n/fi.json b/i18n/fi.json
deleted file mode 100644
index 6b4db57..0000000
--- a/i18n/fi.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Nike",
-                       "Str4nd",
-                       "Vililikku"
-               ]
-       },
-       "securepasswords-desc": "Luo turvallisempia salasanatiivisteitä ja 
lisää salasanan vahvuuden tarkistajan.",
-       "securepasswords-valid": "Salasanasi ei kelpaa tai on liian lyhyt.\nSen 
pitää täyttää seuraavat ehdot: $1.",
-       "securepasswords-minlength": "olla vähintään $1 
{{PLURAL:$1|merkkiä|merkkiä}}",
-       "securepasswords-lowercase": "sisältää vähintään yhden pienaakkosen",
-       "securepasswords-uppercase": "sisältää vähintään yksi suuraakkonen",
-       "securepasswords-digit": "sisältää vähintään yksi numero",
-       "securepasswords-special": "sisältää vähintään yksi erikoismerkki 
(erikoismerkkejä ovat: $1)",
-       "securepasswords-username": "olla eri kuin käyttäjänimesi",
-       "securepasswords-word": "ei saa olla sana"
-}
diff --git a/i18n/fr.json b/i18n/fr.json
deleted file mode 100644
index 786944f..0000000
--- a/i18n/fr.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Crochet.david",
-                       "Grondin",
-                       "IAlex"
-               ]
-       },
-       "securepasswords-desc": "Crée des hachages de mots de passe plus sûrs 
et ajoute un vérificateur de complexité de mots de passe",
-       "securepasswords-valid": "Votre mot de passe est invalide ou trop 
court. Il doit : $1.",
-       "securepasswords-minlength": "être long d’au moins $1 
caractère{{PLURAL:$1||s}}",
-       "securepasswords-lowercase": "contenir au moins 1 lettre minuscule",
-       "securepasswords-uppercase": "contenir au moins 1 lettre majuscule",
-       "securepasswords-digit": "contenir au moins 1 chiffre",
-       "securepasswords-special": "contenir au moins 1 caractère spécial (les 
caractères spéciaux sont : $1)",
-       "securepasswords-username": "être différent de votre nom d’utilisateur",
-       "securepasswords-word": "ne pas être un mot"
-}
diff --git a/i18n/frp.json b/i18n/frp.json
deleted file mode 100644
index 76b96e8..0000000
--- a/i18n/frp.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "ChrisPtDe"
-               ]
-       },
-       "securepasswords-valid": "Voutron contresegno est envalido ou ben trop 
côrt.\nDêt : $1.",
-       "securepasswords-minlength": "étre long d’u muens $1 
caractèro{{PLURAL:$1||s}}",
-       "securepasswords-lowercase": "contegnir u muens 1 petiôta lètra",
-       "securepasswords-uppercase": "contegnir u muens 1 granta lètra",
-       "securepasswords-digit": "contegnir u muens 1 chifro",
-       "securepasswords-special": "contegnir u muens 1 caractèro spèciâl (los 
caractèros spèciâls sont : $1)",
-       "securepasswords-username": "étre difèrent de voutron nom d’utilisator",
-       "securepasswords-word": "pas étre un mot"
-}
diff --git a/i18n/gl.json b/i18n/gl.json
deleted file mode 100644
index 2580ec1..0000000
--- a/i18n/gl.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Toliño"
-               ]
-       },
-       "securepasswords-desc": "Crea un contrasinal cardinal máis seguro e 
engade un comprobador da fortaleza deste",
-       "securepasswords-valid": "O seu contrasinal é inválido ou moi 
curto.\nDebe: $1.",
-       "securepasswords-minlength": "ter, polo menos, {{PLURAL:$1|un 
carácter|$1 caracteres}}",
-       "securepasswords-lowercase": "conter, polo menos, unha letra minúscula",
-       "securepasswords-uppercase": "conter, polo menos, unha letra maiúscula",
-       "securepasswords-digit": "conter, polo menos, un díxito",
-       "securepasswords-special": "conter, polo menos, un carácter especial 
(caracteres especiais son: $1)",
-       "securepasswords-username": "ser diferente do seu nome de usuario",
-       "securepasswords-word": "non ser unha palabra"
-}
diff --git a/i18n/gsw.json b/i18n/gsw.json
deleted file mode 100644
index 5a47ded..0000000
--- a/i18n/gsw.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Als-Holder"
-               ]
-       },
-       "securepasswords-desc": "Legt sichereri Passwort-Hashes aa un fiegt e 
Passwortstärchipriefieg zue",
-       "securepasswords-valid": "Dyy Passwort isch nit giltig oder z churz.\nS 
muess: $1.",
-       "securepasswords-minlength": "zmindescht $1 {{PLURAL:$1|Zeiche|Zeiche}} 
lang syy",
-       "securepasswords-lowercase": "zmindescht ei Chleibuechstab din haa",
-       "securepasswords-uppercase": "zmindescht ei Großbuechstab din haa",
-       "securepasswords-digit": "zmindescht ei Ziffer din haa",
-       "securepasswords-special": "zmindescht ei Sonderzeiche din haa 
(Sonderzeiche sin: $1)",
-       "securepasswords-username": "sich vu Dynem Benutzernamen unterscheide",
-       "securepasswords-word": "ebis anderes syy wie ne Wort"
-}
diff --git a/i18n/he.json b/i18n/he.json
deleted file mode 100644
index 286c196..0000000
--- a/i18n/he.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Rotemliss",
-                       "YaronSh"
-               ]
-       },
-       "securepasswords-desc": "יצירת גיבובי סיסמאות מאובטחים יותר והוספת בודק 
חוזק סיסמאות",
-       "securepasswords-valid": "הסיסמה שלכם אינה תקינה או קצרה מדי. עליה: 
$1.",
-       "securepasswords-minlength": "להיות לפחות באורך של {{PLURAL:$1|ספרה 
אחת|$1 ספרות}}",
-       "securepasswords-lowercase": "להכיל לפחות אות קטנה אחת",
-       "securepasswords-uppercase": "להכיל לפחות אות גדולה אחת",
-       "securepasswords-digit": "להכיל לפחות ספרה אחת",
-       "securepasswords-special": "להכיל לפחות תו מיוחד אחד (התווים המיוחדים 
הם: $1)",
-       "securepasswords-username": "להיות שונה משם המשתמש שלכם",
-       "securepasswords-word": "לא להיות מילה"
-}
diff --git a/i18n/hsb.json b/i18n/hsb.json
deleted file mode 100644
index bda4a6a..0000000
--- a/i18n/hsb.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Michawiki"
-               ]
-       },
-       "securepasswords-desc": "iše hesłowe haše a přidawa funkciju za 
kontrolowanje hesłoweje mocy",
-       "securepasswords-valid": "Twoje hesło je njepłaćiwe abo překrótke. 
Dyrbi: $1.",
-       "securepasswords-minlength": "znajmjeńša $1 
{{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} dołhe być",
-       "securepasswords-lowercase": "znajmjeńša 1 mały pismik wobsahować",
-       "securepasswords-uppercase": "znajmjeńša 1 wulki pismik wobsahować",
-       "securepasswords-digit": "znajmjeńša 1 cyfru wobsahować",
-       "securepasswords-special": "znajmjeńša 1 specialne znamješko wobsahować 
(Specialne znamješka su: $1)",
-       "securepasswords-username": "so wot twojeho wužywarskeho mjena 
rozeznać",
-       "securepasswords-word": "něšto druhe być hač słowo"
-}
diff --git a/i18n/hu.json b/i18n/hu.json
deleted file mode 100644
index 5ef212b..0000000
--- a/i18n/hu.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Glanthor Reviol"
-               ]
-       },
-       "securepasswords-desc": "Biztonságosabb jelszó-hasheket készít, és 
jelszó megadásakor ellenőrzi annak erősségét",
-       "securepasswords-valid": "A jelszavad érvénytelen, vagy túl 
rövid.\nKövetelmények: $1.",
-       "securepasswords-minlength": "legalább {{PLURAL:$1|egy|$1}} karakter 
hosszú",
-       "securepasswords-lowercase": "legalább egy kisbetűt tartalmaz",
-       "securepasswords-uppercase": "legalább egy nagybetűt tartalmaz",
-       "securepasswords-digit": "legalább egy számot tartalmaz",
-       "securepasswords-special": "legalább egy speciális karaktert tartalmaz 
(speciális karakterek: $1)",
-       "securepasswords-username": "különböznie kell a felhasználói nevedtől",
-       "securepasswords-word": "nem lehet egy szó"
-}
diff --git a/i18n/ia.json b/i18n/ia.json
deleted file mode 100644
index 116b8ad..0000000
--- a/i18n/ia.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "McDutchie"
-               ]
-       },
-       "securepasswords-desc": "Crea hashes plus secur del contrasignos e adde 
un verificator de complexitate de contrasignos",
-       "securepasswords-valid": "Tu contrasigno es invalide o troppo 
curte.\nIllo debe: $1.",
-       "securepasswords-minlength": "esser al minus $1 
{{PLURAL:$1|character|characteres}} de longitude",
-       "securepasswords-lowercase": "continer al minus 1 littera minuscule",
-       "securepasswords-uppercase": "continer al minus 1 littera majuscule",
-       "securepasswords-digit": "continer al minus 1 digito",
-       "securepasswords-special": "continer al minus 1 character special (le 
characteres special es: $1)",
-       "securepasswords-username": "esser differente de tu nomine de usator",
-       "securepasswords-word": "non esser un parola"
-}
diff --git a/i18n/id.json b/i18n/id.json
deleted file mode 100644
index a081c6c..0000000
--- a/i18n/id.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Bennylin"
-               ]
-       },
-       "securepasswords-desc": "Membuat sebuah pengacakan kata sandi yang 
lebih aman dan menambah pemeriksaan kekuatan kata sandi",
-       "securepasswords-valid": "Kata sandi Anda tidak sah atau terlalu 
pendek.\nKata sandi Anda harus: $1.",
-       "securepasswords-minlength": "memiliki panjang paling tidak $1 
{{PLURAL:$1|karakter|karakter}}",
-       "securepasswords-lowercase": "memiliki huruf kecil paling tidak 1",
-       "securepasswords-uppercase": "memiliki huruf besar paling tidak 1",
-       "securepasswords-digit": "memiliki angka paling tidak 1",
-       "securepasswords-special": "memiliki karakter istimewa ($1) paling 
tidak 1",
-       "securepasswords-username": "berbeda dari nama pengguna Anda",
-       "securepasswords-word": "tidak boleh sebuah kata (dalam bahasa Inggris)"
-}
diff --git a/i18n/it.json b/i18n/it.json
deleted file mode 100644
index 5cb9dd3..0000000
--- a/i18n/it.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Darth Kule"
-               ]
-       },
-       "securepasswords-desc": "Crea hash password più sicuri e aggiunge un 
controllore della complessità delle password",
-       "securepasswords-valid": "La password non è valida o è troppo 
corta.\nDeve: $1.",
-       "securepasswords-minlength": "essere lunga almeno $1 
{{PLURAL:$1|carattere|caratteri}}",
-       "securepasswords-lowercase": "contenere almeno 1 lettera minuscola",
-       "securepasswords-uppercase": "contenere almeno 1 lettera maiuscola",
-       "securepasswords-digit": "contenere almeno 1 cifra",
-       "securepasswords-special": "contenere almeno 1 carattere speciale 
(caratteri speciali sono: $1)",
-       "securepasswords-username": "essere diversa dal proprio nome utente",
-       "securepasswords-word": "non essere una parola"
-}
diff --git a/i18n/ja.json b/i18n/ja.json
deleted file mode 100644
index ffc93ab..0000000
--- a/i18n/ja.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Aotake",
-                       "Fryed-peach",
-                       "Mizusumashi",
-                       "Shirayuki"
-               ]
-       },
-       "securepasswords-desc": "より安全なパスワードのハッシュを生成し、パスワード強度検査器を追加する",
-       "securepasswords-valid": "パスワードが無効、または短すぎます。\n以下を満たす必要があります: $1",
-       "securepasswords-minlength": "$1{{PLURAL:$1|文字}}以上の長さである",
-       "securepasswords-lowercase": "最低1文字は小文字を含む",
-       "securepasswords-uppercase": "最低1文字は大文字を含む",
-       "securepasswords-digit": "最低1文字は数字を含む",
-       "securepasswords-special": "最低1文字は特殊文字を含む (特殊文字: $1)",
-       "securepasswords-username": "利用者名とは異なる",
-       "securepasswords-word": "単語ではない"
-}
diff --git a/i18n/ka.json b/i18n/ka.json
deleted file mode 100644
index c90c219..0000000
--- a/i18n/ka.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "David1010"
-               ]
-       },
-       "securepasswords-valid": "თქვენი პაროლი არასწორია ან ძალიან მოკლეა.\nის 
უნდა: $1.",
-       "securepasswords-minlength": "იყოს, სულ მცირე, $1 
{{PLURAL:$1|სომბოლოს|სიმბოლოს}} სიგრძის",
-       "securepasswords-digit": "შეიცავდეს მინიმუმ ერთ რიცხვს",
-       "securepasswords-special": "შეიცავდეს მინიმუმ 1 სპეციალურ სიმბოლოს 
(სპეციალური სიმბოლოები: $1)",
-       "securepasswords-word": "არ არის სიტყვა"
-}
diff --git a/i18n/km.json b/i18n/km.json
deleted file mode 100644
index 70d5c68..0000000
--- a/i18n/km.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Thearith"
-               ]
-       },
-       "securepasswords-valid": "ពាក្យសំងាត់​របស់​អ្នក​មិន​ត្រឹមត្រូវ ឬ 
ខ្លី​ពេក​។\nវា​ត្រូវតែ: $1.",
-       "securepasswords-minlength": "ត្រូវតែ​យ៉ាង​តិច​ណាស់​ត្រូវ​មាន $1 
{{PLURAL:$1|តួអក្សរ|តួអក្សរ}}",
-       "securepasswords-lowercase": "មាន​យ៉ាង​តិច ១ តួអក្សរ​តូច",
-       "securepasswords-uppercase": "មាន​យ៉ាង​តិច ១ តួអក្សរ​ធំ",
-       "securepasswords-digit": "មាន​យ៉ាង​តិច ១ តួ​លេខ",
-       "securepasswords-special": "មាន​យ៉ាង​តិច ១ តួ​អក្សរ​ពិសេស 
(តួអក្សរ​ពិសេស​មាន: $1)",
-       "securepasswords-username": 
"ត្រូវតែ​ខុសពី​ឈ្មោះអ្នកប្រើប្រាស់​របស់​អ្នក",
-       "securepasswords-word": "មិនមែន​ជា​ពាក្យ"
-}
diff --git a/i18n/ko.json b/i18n/ko.json
deleted file mode 100644
index 143b382..0000000
--- a/i18n/ko.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Kwj2772",
-                       "아라"
-               ]
-       },
-       "securepasswords-desc": "안전한 비밀번호 해쉬를 만들고 비밀번호 강도 검사를 실시",
-       "securepasswords-valid": "비밀번호가 잘못되었거나 너무 짧습니다.\n비밀번호는 반드시: $1.",
-       "securepasswords-minlength": "적어도 $1글자 이상이어야 합니다.",
-       "securepasswords-lowercase": "적어도 소문자 1개를 포함해야 합니다.",
-       "securepasswords-uppercase": "적어도 대문자 1개를 포함해야 합니다.",
-       "securepasswords-digit": "적어도 숫자 1개를 포함해야 합니다.",
-       "securepasswords-special": "적어도 특수 문자 1개를 포함해야 합니다. (특수 문자: $1)",
-       "securepasswords-username": "사용자 이름과 달라야 합니다.",
-       "securepasswords-word": "단어가 아니어야 합니다."
-}
diff --git a/i18n/ksh.json b/i18n/ksh.json
deleted file mode 100644
index 27d1be4..0000000
--- a/i18n/ksh.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Purodha"
-               ]
-       },
-       "securepasswords-desc": "Deiht en Pröfung för de Passwoote ier 
Qualiteit em Wiki dobei, un määt en besser (seechere) Verschlößelung för de 
Passwoote.",
-       "securepasswords-valid": "Ding Paßwoot is onjöltisch udder ze koot.\nEt 
mööt: $1.",
-       "securepasswords-minlength": "winnishßtens {{PLURAL:$1|ei|$1|kei}} 
Zeiche lang sin",
-       "securepasswords-lowercase": "winnischßdens eine kleine Bochstabe 
enthallde",
-       "securepasswords-uppercase": "winnischßdens eine jroße Bochstabe 
enthallde",
-       "securepasswords-digit": "winnischßdens ein Zeffer enthallde",
-       "securepasswords-special": "winnischßdens ei Sönderzeiche enthallde. De 
Sönderzeiche sinn_er: $1",
-       "securepasswords-username": "anders wi Dinge Metmaachername sinn",
-       "securepasswords-word": "kein nomaal Woot sin"
-}
diff --git a/i18n/lb.json b/i18n/lb.json
deleted file mode 100644
index fe0934d..0000000
--- a/i18n/lb.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Les Meloures",
-                       "Robby"
-               ]
-       },
-       "securepasswords-desc": "Mécht méi sécher Paswuert-''Hashes'' a setzt 
eng Iwwerpréifung vun der Sécherheet vun de Passwierder derbäi",
-       "securepasswords-valid": "Äert Passwuert ass net valabel oder ze 
kuerz.\nEt: $1.",
-       "securepasswords-minlength": "muss op d'mannst $1 
{{PLURAL:$1|Zeeche|Zeeche}} laang sinn",
-       "securepasswords-lowercase": "muss op d'mannst 1 klenge Buschstaf dra 
sinn",
-       "securepasswords-uppercase": "muss op d'mannst 1 grousse Buschstaf dra 
sinn",
-       "securepasswords-digit": "muss op d'mannst 1 Ziffer dra sinn",
-       "securepasswords-special": "muss op d'mannst 1 Spezialzeechen dra sinn 
(Spezialzeeche sinn: $1)",
-       "securepasswords-username": "muss verschidde vun Ärem Benotzernumm 
sinn",
-       "securepasswords-word": "däerf kee Wuert sinn"
-}
diff --git a/i18n/mk.json b/i18n/mk.json
deleted file mode 100644
index 9a273fa..0000000
--- a/i18n/mk.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Bjankuloski06"
-               ]
-       },
-       "securepasswords-desc": "Создава повеќе тараби за безбедна лозинка и 
додава проверувач на јачината на лозинката",
-       "securepasswords-valid": "Вашата лозинка е неважечка или 
прекратка.\nЛозинката мора да: $1.",
-       "securepasswords-minlength": "содржи барем  $1 
{{PLURAL:$1|знак|знаци}}",
-       "securepasswords-lowercase": "содржи барем 1 мала буква",
-       "securepasswords-uppercase": "содржи барем 1 голема буква",
-       "securepasswords-digit": "содржи барем 1 цифра",
-       "securepasswords-special": "содржи барем еден посебен знак (посебни се: 
$1)",
-       "securepasswords-username": "се разликува од вашето корисничко име",
-       "securepasswords-word": "не биде збор"
-}
diff --git a/i18n/ml.json b/i18n/ml.json
deleted file mode 100644
index f35935b..0000000
--- a/i18n/ml.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Praveenp"
-               ]
-       },
-       "securepasswords-desc": "കൂടുതൽ സുരക്ഷിതമായ രഹസ്യവാക്ക് ഹാഷുകളും, 
രഹസ്യവാക്കിന്റെ ശേഷി പരിശോധനോപകരണവും സൃഷ്ടിക്കുന്നു",
-       "securepasswords-valid": "താങ്കളുടെ രഹസ്യവാക്ക് അസാധുവാണ് അല്ലെങ്കിൽ 
തീരെ ചെറുതാണ്.\nഅത്: $1.",
-       "securepasswords-minlength": "കുറഞ്ഞത് {PLURAL:$1|ഒരക്ഷരം|$1 
അക്ഷരങ്ങൾ}} നീളമുള്ളതാവണം",
-       "securepasswords-lowercase": "കുറഞ്ഞത് ഒരു ലോവർകേസ് അക്ഷരം 
ഉൾക്കൊള്ളുന്നു",
-       "securepasswords-uppercase": "കുറഞ്ഞത് ഒരു അപ്പർകേസ് അക്ഷരം 
ഉൾക്കൊള്ളുന്നു",
-       "securepasswords-digit": "ഒരു അക്കമെങ്കിലും ഉൾക്കൊള്ളണം",
-       "securepasswords-special": "ഒരു പ്രത്യേകാക്ഷരമെങ്കിലും ഉൾക്കൊള്ളണം 
(പ്രത്യേകാക്ഷരങ്ങൾ: $1)",
-       "securepasswords-username": "താങ്കളുടെ ഉപയോക്തൃനാമത്തിൽ നിന്നും 
വ്യത്യസ്തമായിരിക്കണം",
-       "securepasswords-word": "ഒരു വാക്ക് ആയിരിക്കരുത്"
-}
diff --git a/i18n/nah.json b/i18n/nah.json
deleted file mode 100644
index ab72798..0000000
--- a/i18n/nah.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Fluence"
-               ]
-       },
-       "securepasswords-word": "ahmo tlahtōl"
-}
diff --git a/i18n/nb.json b/i18n/nb.json
deleted file mode 100644
index 42c126b..0000000
--- a/i18n/nb.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Nghtwlkr"
-               ]
-       },
-       "securepasswords-desc": "Oppretter sikrere passordhasher og legger til 
en funksjon for sjekking av passordstyrke",
-       "securepasswords-valid": "Passordet ditt er ugyldig eller for 
kort.\nDet må: $1.",
-       "securepasswords-minlength": "være minst {{PLURAL:$1|ett tegn|$1 tegn}} 
langt",
-       "securepasswords-lowercase": "inneholde minst én liten bokstav",
-       "securepasswords-uppercase": "inneholde minst én stor bokstav",
-       "securepasswords-digit": "inneholde minst ett tall",
-       "securepasswords-special": "inneholde minst ett spesialtegn 
(spesialtegnene er: $1)",
-       "securepasswords-username": "være forskjellig fra brukernavnet ditt",
-       "securepasswords-word": "ikke være et ord"
-}
diff --git a/i18n/nl.json b/i18n/nl.json
deleted file mode 100644
index 361f056..0000000
--- a/i18n/nl.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Siebrand"
-               ]
-       },
-       "securepasswords-desc": "Gebruikt veiliger wachtwoordhashes en voegt 
een wachtwoordsterktecontrole toe",
-       "securepasswords-valid": "Uw wachtwoord voldoet niet aan de 
voorwaarden.\nHet moet: $1.",
-       "securepasswords-minlength": "ten minste $1 {{PLURAL:$1|teken|tekens}} 
bevatten",
-       "securepasswords-lowercase": "ten minste 1 kleine letter bevatten",
-       "securepasswords-uppercase": "ten minste 1 hoofdletter bevatten",
-       "securepasswords-digit": "ten minste 1 cijfer bevatten",
-       "securepasswords-special": "ten minste één speciaal teken bevatten 
(speciale tekens zijn: $1)",
-       "securepasswords-username": "verschillen van uw gebruikersnaam",
-       "securepasswords-word": "geen woord zijn"
-}
diff --git a/i18n/nn.json b/i18n/nn.json
deleted file mode 100644
index f1906d9..0000000
--- a/i18n/nn.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Harald Khan",
-                       "Njardarlogar"
-               ]
-       },
-       "securepasswords-desc": "Opprettar meir sikre passordhashar og legg til 
ein funksjon for sjekking av passordstyrke",
-       "securepasswords-valid": "Passordet ditt er ugyldig eller for 
kort.\nDet må: $1.",
-       "securepasswords-minlength": "ha ei lengd på minst {{PLURAL:$1|eitt 
teikn|$1 teikn}}",
-       "securepasswords-lowercase": "innehalda minst éin liten bokstav",
-       "securepasswords-uppercase": "innehalda minst éin stor bokstav",
-       "securepasswords-digit": "innehalda minst eitt tal",
-       "securepasswords-special": "innehalda minst eitt spesialteikn 
(spesialteikna er: $1)",
-       "securepasswords-username": "ikkje vera det same som brukarnamnet ditt",
-       "securepasswords-word": "ikkje vera eit ord"
-}
diff --git a/i18n/oc.json b/i18n/oc.json
deleted file mode 100644
index 4f64c33..0000000
--- a/i18n/oc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Cedric31"
-               ]
-       },
-       "securepasswords-desc": "Crèa d'hachages de senhals mai segurs e apond 
un verificator de complexitat de senhal",
-       "securepasswords-valid": "Vòstre senhal es invalid o tròp cort.\nDeu : 
$1.",
-       "securepasswords-minlength": "èsser long d’al mens $1 
{{PLURAL:$1|caractèr|caractèrs}}",
-       "securepasswords-lowercase": "conténer al mens 1 letra minuscula",
-       "securepasswords-uppercase": "conténer al mens 1 letra majuscula",
-       "securepasswords-digit": "conténer al mens 1 chifra",
-       "securepasswords-special": "conténer al mens 1 caractèr especial (los 
caractèrs especials son : $1)",
-       "securepasswords-username": "èsser diferent de vòstre nom d'utilizaire",
-       "securepasswords-word": "pas èsser un mot"
-}
diff --git a/i18n/pl.json b/i18n/pl.json
deleted file mode 100644
index 305dd7a..0000000
--- a/i18n/pl.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Matma Rex",
-                       "Sp5uhe"
-               ]
-       },
-       "securepasswords-desc": "Tworzy bezpieczniejszy skrót hasła oraz 
poprawia jego weryfikację",
-       "securepasswords-valid": "Hasło jest nieprawidłowe lub zbyt 
krótkie.\nMusi ono: $1.",
-       "securepasswords-minlength": "składać się z co najmniej $1 
{{PLURAL:$1|znaku|znaków}}",
-       "securepasswords-lowercase": "zawierać co najmniej 1 małą literę",
-       "securepasswords-uppercase": "zawierać co najmniej 1 wielką literę",
-       "securepasswords-digit": "zawierać co najmniej 1 cyfrę",
-       "securepasswords-special": "zawierać co najmniej 1 znak specjalny (taki 
jak: $1)",
-       "securepasswords-username": "różnić się od Twojej nazwy użytkownika",
-       "securepasswords-word": "nie być słowem"
-}
diff --git a/i18n/pms.json b/i18n/pms.json
deleted file mode 100644
index d967b3a..0000000
--- a/i18n/pms.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Dragonòt"
-               ]
-       },
-       "securepasswords-desc": "A crea ciav casuaj pì sicure e a gionta un 
controlor ëd la fòrsa dla ciav",
-       "securepasswords-valid": "Toa ciav a l'é pa bon-a o tròp curta.\nA 
deuv: $1.",
-       "securepasswords-minlength": "esse almanch longa $1 
{{PLURAL:$1|caràter|caràter}}",
-       "securepasswords-lowercase": "conten-e almanch 1 litra minùscula",
-       "securepasswords-uppercase": "conten-e almanch 1 litra maiùscola",
-       "securepasswords-digit": "conten almanch 1 sifra",
-       "securepasswords-special": "conten-e almanch 1 caràter special (caràter 
speciaj a son: $1)",
-       "securepasswords-username": "esse diferen da tò stranòm",
-       "securepasswords-word": "pa esse na paròla"
-}
diff --git a/i18n/pt-br.json b/i18n/pt-br.json
deleted file mode 100644
index f1779a6..0000000
--- a/i18n/pt-br.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Eduardo.mps",
-                       "Giro720",
-                       "Luckas"
-               ]
-       },
-       "securepasswords-desc": "Cria \"hashes\" de senhas mais seguros e 
adiciona um verificador da força da senha",
-       "securepasswords-valid": "A sua senha é inválida ou muito curta.\nTem 
de: $1.",
-       "securepasswords-minlength": "ter pelo menos $1 
{{PLURAL:$1|caracter|caracteres}} de comprimento",
-       "securepasswords-lowercase": "conter pelo menos 1 letra minúscula",
-       "securepasswords-uppercase": "conter pelo menos 1 letra maiúscula",
-       "securepasswords-digit": "conter pelo menos 1 dígito",
-       "securepasswords-special": "conter pelo menos 1 caracter especial 
(caracteres especiais são: $1)",
-       "securepasswords-username": "ser diferente do seu nome de usuário",
-       "securepasswords-word": "não ser uma palavra"
-}
diff --git a/i18n/pt.json b/i18n/pt.json
deleted file mode 100644
index ef28550..0000000
--- a/i18n/pt.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Hamilton Abreu",
-                       "Malafaya"
-               ]
-       },
-       "securepasswords-desc": "Cria resumos criptográficos mais seguros para 
as palavras-passe e adiciona um verificador da segurança da palavra-passe",
-       "securepasswords-valid": "A sua palavra-passe é inválida ou demasiado 
curta.\nTem de: $1.",
-       "securepasswords-minlength": "ter pelo menos $1 
{{PLURAL:$1|carácter|caracteres}} de comprimento",
-       "securepasswords-lowercase": "conter pelo menos 1 letra minúscula",
-       "securepasswords-uppercase": "conter pelo menos 1 letra maiúscula",
-       "securepasswords-digit": "conter pelo menos 1 dígito",
-       "securepasswords-special": "conter pelo menos 1 carácter especial (os 
caracteres especiais são: $1)",
-       "securepasswords-username": "ser diferente do seu nome de utilizador",
-       "securepasswords-word": "não ser uma palavra"
-}
diff --git a/i18n/qqq.json b/i18n/qqq.json
deleted file mode 100644
index 1db84d1..0000000
--- a/i18n/qqq.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Purodha",
-                       "Shirayuki",
-                       "Siebrand",
-                       "The Evil IP address",
-                       "Umherirrender"
-               ]
-       },
-       "securepasswords-desc": "{{desc|name=Secure 
Passwords|url=https://www.mediawiki.org/wiki/Extension:SecurePasswords}}";,
-       "securepasswords-valid": "Used as password validation result. 
Parameters:\n* $1 - list of any one or more of the following messages:\n** 
{{msg-mw|Securepasswords-minlength}}\n** 
{{msg-mw|Securepasswords-lowercase}}\n** 
{{msg-mw|Securepasswords-uppercase}}\n** {{msg-mw|Securepasswords-digit}}\n** 
{{msg-mw|Securepasswords-special}}\n** {{msg-mw|Securepasswords-username}}\n** 
{{msg-mw|Securepasswords-word}}",
-       "securepasswords-minlength": "Used as a condition in 
{{msg-mw|Securepasswords-valid}}.\n\nParameters:\n* $1 - minimum number of 
characters",
-       "securepasswords-lowercase": "Used as a condition in 
{{msg-mw|Securepasswords-valid}}.",
-       "securepasswords-uppercase": "Used as a condition in 
{{msg-mw|Securepasswords-valid}}.",
-       "securepasswords-digit": "Used as a condition in 
{{msg-mw|Securepasswords-valid}}.",
-       "securepasswords-special": "Used as a condition in 
{{msg-mw|Securepasswords-valid}}.\n\nParameters:\n* $1 - list of special 
characters (uses value of <code>$wgSecurePasswordsSpecialChars</code>)",
-       "securepasswords-username": "{{gender}}\nUsed as a condition in 
{{msg-mw|Securepasswords-valid}}.\n\nParameters:\n* $1 - (Optional) username",
-       "securepasswords-word": "Used as a condition in 
{{msg-mw|Securepasswords-valid}}."
-}
diff --git a/i18n/ro.json b/i18n/ro.json
deleted file mode 100644
index 032c379..0000000
--- a/i18n/ro.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "KlaudiuMihaila"
-               ]
-       },
-       "securepasswords-valid": "Parola dumneavoastră este incorectă sau prea 
scurtă.\nAceasta trebuie: $1.",
-       "securepasswords-minlength": "să fie de cel puțin $1 
{{PLURAL:$1|caracter|caractere}} lungime",
-       "securepasswords-lowercase": "să conțină cel puțin o literă mică",
-       "securepasswords-uppercase": "să conțină cel puțin o literă mare",
-       "securepasswords-digit": "să conțină cel puțin o cifră",
-       "securepasswords-special": "să conțină cel puțin un caracter special 
(caracterele speciale sunt: $1)",
-       "securepasswords-username": "să fie diferită de numele de utilizator",
-       "securepasswords-word": "să nu fie un cuvânt"
-}
diff --git a/i18n/roa-tara.json b/i18n/roa-tara.json
deleted file mode 100644
index c50ed7d..0000000
--- a/i18n/roa-tara.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Joetaras"
-               ]
-       },
-       "securepasswords-desc": "Ccreje le simbole d'a passuord cchiù secure e 
aggiugne 'nu verificatore d'a forze d'a passuord",
-       "securepasswords-valid": "'A password toje jè invalida o troppe 
cuciule.\nAdda essere: $1.",
-       "securepasswords-minlength": "adda essere longhe ninde ninde $1 
{{PLURAL:$1|carattere}}",
-       "securepasswords-lowercase": "tène almene 'na lettere minuscole",
-       "securepasswords-uppercase": "tène almene 'na lettere maiuscole",
-       "securepasswords-digit": "tène almene 'nu numere",
-       "securepasswords-special": "tène almene 'nu carattere speciale (le 
carattere speciale sò: $1)",
-       "securepasswords-username": "differende da 'u nome utende tue",
-       "securepasswords-word": "non g'addà essere 'na parole"
-}
diff --git a/i18n/ru.json b/i18n/ru.json
deleted file mode 100644
index 0163b74..0000000
--- a/i18n/ru.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Ferrer",
-                       "Kaganer",
-                       "Александр Сигачёв"
-               ]
-       },
-       "securepasswords-desc": "Создаёт защищённые хеши паролей и добавляет 
проверку силы пароля",
-       "securepasswords-valid": "Вам пароль неверный или слишком короткий.\nОн 
должен: $1.",
-       "securepasswords-minlength": "быть, по крайней мере, длиной в $1 
{{PLURAL:$1|символ|символа|символов}}",
-       "securepasswords-lowercase": "содержит минимум 1 строчную букву",
-       "securepasswords-uppercase": "содержит минимум 1 прописную букву",
-       "securepasswords-digit": "содержать минимум одну цифру",
-       "securepasswords-special": "содержать минимум 1 служебный символ 
(служебные символы: $1)",
-       "securepasswords-username": "будет отличаться от вашего имени 
участника",
-       "securepasswords-word": "не слово"
-}
diff --git a/i18n/si.json b/i18n/si.json
deleted file mode 100644
index 4322e5e..0000000
--- a/i18n/si.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "පසිඳු කාවින්ද"
-               ]
-       },
-       "securepasswords-lowercase": "අවම වශයෙන් 1 පොඩි අකුරක් වත් අඩංගු විය 
යුතුය",
-       "securepasswords-uppercase": "අවම වශයෙන් 1 ලොකු අකුරක් වත් අඩංගු විය 
යුතුය",
-       "securepasswords-digit": "අවම වශයෙන් 1 සංඛ්‍යාංකයක් වත් අඩංගු විය 
යුතුය",
-       "securepasswords-username": "ඔබේ පරිශීලක නාමයෙන් වෙනස් විය යුතු වේ",
-       "securepasswords-word": "වචනයක් නොවිය යුතුය"
-}
diff --git a/i18n/sk.json b/i18n/sk.json
deleted file mode 100644
index 65592ec..0000000
--- a/i18n/sk.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Helix84",
-                       "Rudko"
-               ]
-       },
-       "securepasswords-desc": "Vytvára bezpečnejšie haše hesiel a pridáva 
kontrolu sily hesla",
-       "securepasswords-valid": "Vaše heslo je nesprávne alebo príliš krátke. 
$1",
-       "securepasswords-minlength": "musí byť dlhé aspoň $1 
{{PLURAL:$1|znak|znaky|znakov}}",
-       "securepasswords-lowercase": "musí obsahovať aspoň jedno malé písmeno",
-       "securepasswords-uppercase": "musí obsahovať aspoň jedno veľké písmeno",
-       "securepasswords-digit": "musí obsahovať aspoň jednu číslicu",
-       "securepasswords-special": "musí obsahovať aspoň jeden špeciálny znak 
(povolené špeciálne znaky: $1)",
-       "securepasswords-username": "musí byť iné ako vaše používateľské meno",
-       "securepasswords-word": "nesmie to byť slovo zo slovníka"
-}
diff --git a/i18n/sr-ec.json b/i18n/sr-ec.json
deleted file mode 100644
index 76447d8..0000000
--- a/i18n/sr-ec.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Milicevic01",
-                       "Rancher",
-                       "Михајло Анђелковић"
-               ]
-       },
-       "securepasswords-desc": "Ствара безбедније дисперзије лозинки и додаје 
проверу снаге лозинке",
-       "securepasswords-valid": "Ваша лозинка је неисправна или 
прекратка.\nОна мора: $1.",
-       "securepasswords-minlength": "бити дугачка најмање $1 
{{PLURAL:$1|знак|знакова}}.",
-       "securepasswords-lowercase": "садржи најмање једно мало слово",
-       "securepasswords-uppercase": "садржи најмање једно велико слово",
-       "securepasswords-digit": "садржати најмање 1 цифру",
-       "securepasswords-special": "садржати најмање 1 специјални знак 
(специјални знаци су: $1)",
-       "securepasswords-username": "да се разликује од корисничког имена",
-       "securepasswords-word": "не може да буде реч"
-}
diff --git a/i18n/sr-el.json b/i18n/sr-el.json
deleted file mode 100644
index 6ae90cb..0000000
--- a/i18n/sr-el.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Milicevic01",
-                       "Rancher"
-               ]
-       },
-       "securepasswords-desc": "Stvara bezbednije disperzije lozinki i dodaje 
proveru snage lozinke",
-       "securepasswords-valid": "Vaša lozinka je neispravna ili 
prekratka.\nOna mora: $1.",
-       "securepasswords-minlength": "biti dugačka najmanje $1 
{{PLURAL:$1|znak|znakova}}.",
-       "securepasswords-lowercase": "sadrži najmanje jedno malo slovo",
-       "securepasswords-uppercase": "sadrži najmanje jedno veliko slovo",
-       "securepasswords-digit": "sadržati najmanje 1 cifru",
-       "securepasswords-special": "sadržati najmanje 1 specijalni znak 
(specijalni znaci su: $1)",
-       "securepasswords-username": "da se razlikuje od korisničkog imena",
-       "securepasswords-word": "ne može da bude reč"
-}
diff --git a/i18n/stq.json b/i18n/stq.json
deleted file mode 100644
index fe7ecb6..0000000
--- a/i18n/stq.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Pyt"
-               ]
-       },
-       "securepasswords-desc": "Moaket sicherere Paaswoud-Hashes un föiget ne 
Paaswoudstäärken-Wröige bietou",
-       "securepasswords-valid": "Dien Paaswoud is uungultich of tou kuut.\nEt 
mout: $1.",
-       "securepasswords-minlength": "ap minste $1 {{PLURAL:$1|Teeken|Teekene}} 
loang weese",
-       "securepasswords-lowercase": "ap minste ne Littikbouksteeuwe änthoolde",
-       "securepasswords-uppercase": "ap minste ne Grootbouksteeuwe änthoolde",
-       "securepasswords-digit": "ap minste een Ziffer änthoolde",
-       "securepasswords-special": "ap minste een Sunnerteeken änthoolde 
(Sunnerteekene sunt: $1)",
-       "securepasswords-username": "sik fon din Benutsernoome unnerskeede",
-       "securepasswords-word": "wät uurs weese as n Woud"
-}
diff --git a/i18n/sv.json b/i18n/sv.json
deleted file mode 100644
index cb366e1..0000000
--- a/i18n/sv.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Najami"
-               ]
-       },
-       "securepasswords-desc": "Skapar säkrare lösenordshashar och lägger till 
en funktion för att kontrollera lösenordets styrka",
-       "securepasswords-valid": "Ditt lösenord är ogiltigt eller för 
kort.\nDet måste: $1.",
-       "securepasswords-minlength": "ha en längd på minst {{PLURAL:$1|ett 
tecken|$1 tecken}}",
-       "securepasswords-lowercase": "innehålla minst en liten bokstav",
-       "securepasswords-uppercase": "innehålla minst en stor bokstav",
-       "securepasswords-digit": "innehålla minst en siffra",
-       "securepasswords-special": "innehålla minst ett specialtecken 
(specialtecknen är: $1)",
-       "securepasswords-username": "inte vara samma som ditt användarnamn",
-       "securepasswords-word": "inte vara ett ord"
-}
diff --git a/i18n/sw.json b/i18n/sw.json
deleted file mode 100644
index 4a5e847..0000000
--- a/i18n/sw.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Stephenwanjau"
-               ]
-       },
-       "securepasswords-word": "haifai kuwa jina"
-}
diff --git a/i18n/te.json b/i18n/te.json
deleted file mode 100644
index 6cae8ab..0000000
--- a/i18n/te.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Kiranmayee",
-                       "Veeven"
-               ]
-       },
-       "securepasswords-desc": "మరికొన్ని సంరక్షిత పాసువార్డు హాషులను 
సృష్టించి, పాసువార్డు బలము చూసే పనిముట్టుని కలుపుతుంది",
-       "securepasswords-valid": "మీ సంకేతపదం సరైనది కాదు లేదా మరీ చిన్నగా 
ఉంది.\nఅది: $1.",
-       "securepasswords-minlength": "కనీసం $1 {{PLURAL:$1|అక్షరం|అక్షరాల}} 
పొడవుండాలి",
-       "securepasswords-lowercase": "కనీసం ఒక్క చిన్న బడి అక్షరాన్నైనా 
కలిగివుండాలి.",
-       "securepasswords-uppercase": "కనీసం ఒక్క పెద్దబడి అక్షరాన్నైనా 
కలిగివుండాలి.",
-       "securepasswords-digit": "కనీసం ఒక్క అంకెనైనా కలిగివుండాలి.",
-       "securepasswords-special": "కనీసం 1 ప్రత్యేక అక్షరాన్నైనా కలిగివుండాలి 
(ప్రత్యేక అక్షరాలు ఇవీ: $1)",
-       "securepasswords-username": "మీ వాడుకరిపేరు అయివుండకూడదు",
-       "securepasswords-word": "ఒక పదం అయివుండకూడదు"
-}
diff --git a/i18n/tl.json b/i18n/tl.json
deleted file mode 100644
index bdc68fd..0000000
--- a/i18n/tl.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "AnakngAraw",
-                       "Jojit fb"
-               ]
-       },
-       "securepasswords-desc": "Lumilikha ng mas higit na ligtas na mga 
password hash at nagdaragdag ng isang tagapasuri ng lakas ng password",
-       "securepasswords-valid": "Hindi balido o napaikli ng password 
mo.\nDapat itong: $1.",
-       "securepasswords-minlength": "may kahit na $1 {{PLURAL:$1|panitik|mga 
panitik}} ang haba",
-       "securepasswords-lowercase": "maglaman ng kahit na 1 maliit na titik",
-       "securepasswords-uppercase": "maglaman ng kahit na 1 malaking titik",
-       "securepasswords-digit": "maglaman ng kahit na 1 tambilang (bilang)",
-       "securepasswords-special": "maglaman ng kahit na 1 natatanging panitik 
(ang natatanging mga panitik ay: $1)",
-       "securepasswords-username": "naiiba/kaiba mula sa iyong pangalan ng 
tagagamit",
-       "securepasswords-word": "hindi isang salita"
-}
diff --git a/i18n/tr.json b/i18n/tr.json
deleted file mode 100644
index 1699a09..0000000
--- a/i18n/tr.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Vito Genovese"
-               ]
-       },
-       "securepasswords-lowercase": "en az bir küçük harf içermektedir",
-       "securepasswords-uppercase": "en az 1 büyük harf içermektedir",
-       "securepasswords-digit": "en az 1 rakam içermektedir",
-       "securepasswords-username": "kullanıcı adınızan farklı olacak",
-       "securepasswords-word": "kelime olmayacak"
-}
diff --git a/i18n/uk.json b/i18n/uk.json
deleted file mode 100644
index 032c995..0000000
--- a/i18n/uk.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Alex Khimich"
-               ]
-       },
-       "securepasswords-desc": "Створює більш безпечний хеш для паролю і додає 
перевірку паролю на надійність",
-       "securepasswords-valid": "Ваш пароль недійсний або надто короткий. 
\nВін повинен: $1.",
-       "securepasswords-minlength": "Бути не менше $1 
{{PLURAL:$1|символ|символа|символів}} в довжину.",
-       "securepasswords-lowercase": "Повинен містить не менше 1 літери в 
нижньому реєстрі.",
-       "securepasswords-uppercase": "Повинен містити не менше 1 літери в 
верхньому реєстрі.",
-       "securepasswords-digit": "Повинен містити як мінімум 1 цифру.",
-       "securepasswords-special": "Повинен містити як мінімум 1 спеціальний 
символ (допустимі спецсимволи: $1).",
-       "securepasswords-username": "Повинен відрізнятись від імені вашого 
облікового запису.",
-       "securepasswords-word": "Не повинен бути словниковим словом."
-}
diff --git a/i18n/vep.json b/i18n/vep.json
deleted file mode 100644
index b47bb09..0000000
--- a/i18n/vep.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Игорь Бродский"
-               ]
-       },
-       "securepasswords-valid": "Teiden peitsana om vär vai lühüdahk.\nPidab 
säta se neniden käskusiden mödhe: $1."
-}
diff --git a/i18n/vi.json b/i18n/vi.json
deleted file mode 100644
index 7952ac5..0000000
--- a/i18n/vi.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Minh Nguyen",
-                       "Vinhtantran"
-               ]
-       },
-       "securepasswords-desc": "Tạo ra những bảng băm mật khẩu an toàn hơn và 
bổ sung một bộ kiểm tra độ mạnh mật khẩu",
-       "securepasswords-valid": "Mật khẩu của bạn không hợp lệ hay ngắn 
quá.\nNó phải: $1.",
-       "securepasswords-minlength": "tối thiểu là $1 ký tự",
-       "securepasswords-lowercase": "có ít nhất một chữ nhỏ",
-       "securepasswords-uppercase": "có ít nhất một chữ hoa",
-       "securepasswords-digit": "có ít nhất một chữ số",
-       "securepasswords-special": "có ít nhất một ký tự đặc biệt (tức là: $1)",
-       "securepasswords-username": "khác với tên hiệu",
-       "securepasswords-word": "không phải là từ"
-}
diff --git a/i18n/vo.json b/i18n/vo.json
deleted file mode 100644
index b22ae59..0000000
--- a/i18n/vo.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Malafaya",
-                       "Smeira"
-               ]
-       },
-       "securepasswords-valid": "Letavöd olik no lonöfon u binon tu 
brefik.\nMuton: $1.",
-       "securepasswords-minlength": "labon lunoti {{PLURAL:$1|malata pu 
bala|malatas pu $1}}",
-       "securepasswords-lowercase": "ninädön minudi pu bali",
-       "securepasswords-uppercase": "ninädon mayudi pu bali",
-       "securepasswords-digit": "ninädön numati pu bali",
-       "securepasswords-special": "ninädon malati patik pu bali (malats patik 
binons: $1)",
-       "securepasswords-username": "difön de gebananem olik",
-       "securepasswords-word": "no binön vöd"
-}
diff --git a/i18n/zh-hans.json b/i18n/zh-hans.json
deleted file mode 100644
index be5d5fa..0000000
--- a/i18n/zh-hans.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Bencmq",
-                       "Gzdavidwong"
-               ]
-       },
-       "securepasswords-desc": "生成更安全的密码哈希值,并添加密码强度检测",
-       "securepasswords-valid": "您的密码无效或者太短。\n它必须:$1。",
-       "securepasswords-minlength": "长度至少需要$1个字符",
-       "securepasswords-lowercase": "包含最少一个小写字母",
-       "securepasswords-uppercase": "包含最少一个大写字母",
-       "securepasswords-digit": "包含最少一个数字",
-       "securepasswords-special": "包含至少一个特殊字符 (特殊字符是:$1)",
-       "securepasswords-username": "不与您的用户名相同",
-       "securepasswords-word": "不是一个单词"
-}
diff --git a/i18n/zh-hant.json b/i18n/zh-hant.json
deleted file mode 100644
index 708997a..0000000
--- a/i18n/zh-hant.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Danny0838",
-                       "Mark85296341",
-                       "Wrightbus",
-                       "LNDDYL",
-                       "Cwlin0416"
-               ]
-       },
-       "securepasswords-desc": "生成更安全的密碼哈希值,並添加密碼強度檢測",
-       "securepasswords-valid": "您的密碼無效或太短。它必須:$1。",
-       "securepasswords-minlength": "長度至少$1個字元",
-       "securepasswords-lowercase": "包含至少一個小寫字母",
-       "securepasswords-uppercase": "包含最少一個大寫字母",
-       "securepasswords-digit": "包含至少一個數字",
-       "securepasswords-special": "包含至少一個特殊字元 (特殊字元有:$1)",
-       "securepasswords-username": "不與您的使用者名稱相同",
-       "securepasswords-word": "不是一個單詞"
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index e87548c..0000000
--- a/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-       "private": true,
-       "scripts": {
-               "test": "grunt test"
-       },
-       "devDependencies": {
-               "grunt": "1.0.1",
-               "grunt-banana-checker": "0.5.0",
-               "grunt-contrib-jshint": "1.1.0",
-               "grunt-jsonlint": "1.1.0"
-       }
-}
diff --git a/password_history.sql b/password_history.sql
deleted file mode 100644
index 15c5a88..0000000
--- a/password_history.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE TABLE IF NOT EXISTS /*_*/password_history (
-       ph_user integer unsigned NOT NULL, -- FK to user id
-       ph_password mediumblob NOT NULL, -- password hash
-       ph_timestamp varbinary(14) NOT NULL DEFAULT '',
-       PRIMARY KEY (ph_user, ph_timestamp)
-) /*$wgDBTableOptions*/;
-
-CREATE INDEX /*i*/age ON /*_*/password_history (ph_timestamp);
\ No newline at end of file
diff --git a/securepasswords_uninstall.sql b/securepasswords_uninstall.sql
deleted file mode 100644
index d439fa0..0000000
--- a/securepasswords_uninstall.sql
+++ /dev/null
@@ -1,5 +0,0 @@
--- This table only gets populated if $wgSecurePasswordsTrialMode is true
-CREATE TABLE IF NOT EXISTS /*_*/securepasswords_uninstall (
-       su_user integer unsigned NOT NULL PRIMARY KEY,
-       su_password tinyblob NOT NULL
-) /*$wgDBTableOptions*/;
\ No newline at end of file
diff --git a/user.patch.user_newpassword.sql b/user.patch.user_newpassword.sql
deleted file mode 100644
index 336a46a..0000000
--- a/user.patch.user_newpassword.sql
+++ /dev/null
@@ -1,5 +0,0 @@
---- Modify the user table for the SecurePasswords extension
---- tinyblob doesn't cut it anymore for the password hashing used by this 
extension
---- so this will change it to mediumblob
-
-ALTER TABLE /*_*/user MODIFY user_newpassword MEDIUMBLOB NOT NULL;
\ No newline at end of file
diff --git a/user.patch.user_password.sql b/user.patch.user_password.sql
deleted file mode 100644
index f78aaf7..0000000
--- a/user.patch.user_password.sql
+++ /dev/null
@@ -1,5 +0,0 @@
---- Modify the user table for the SecurePasswords extension
---- tinyblob doesn't cut it anymore for the password hashing used by this 
extension
---- so this will change it to mediumblob
-
-ALTER TABLE /*_*/user MODIFY user_password MEDIUMBLOB NOT NULL;
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/389519
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I45ad9cf7451dabd679bfc82eda46e30e38a5e464
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/SecurePasswords
Gerrit-Branch: master
Gerrit-Owner: Umherirrender <umherirrender_de...@web.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to