Module: StrongPassword::PasswordVariants
- Defined in:
- lib/strong_password/password_variants.rb
Constant Summary collapse
- LEET_SPEAK_1 =
{ "@" => "a", "!" => "i", "$" => "s", "1" => "i", "2" => "z", "3" => "e", "4" => "a", "5" => "s", "6" => "g", "7" => "t", "8" => "b", "9" => "g", "0" => "o" }
- LEET_SPEAK_2 =
{ "@" => "a", "!" => "i", "$" => "s", "1" => "l", "2" => "z", "3" => "e", "4" => "a", "5" => "s", "6" => "g", "7" => "t", "8" => "b", "9" => "g", "0" => "o" }
- KEYBOARDMAP_DOWN_NOSHIFT =
{ "z" => "", "x" => "", "c" => "", "v" => "", "b" => "", "n" => "", "m" => "", "," => "", "." => "", "/" => "", "<" => "", ">" => "", "?" => "" }
- KEYBOARDMAP_DOWNRIGHT =
{ "a" => "z", "q" => "a", "1" => "q", "s" => "x", "w" => "s", "2" => "w", "d" => "c", "e" => "d", "3" => "e", "f" => "v", "r" => "f", "4" => "r", "g" => "b", "t" => "g", "5" => "t", "h" => "n", "y" => "h", "6" => "y", "j" => "m", "u" => "j", "7" => "u", "i" => "k", "8" => "i", "o" => "l", "9" => "o", "0" => "p" }
- KEYBOARDMAP_DOWNLEFT =
{ "2" => "q", "w" => "a", "3" => "w", "s" => "z", "e" => "s", "4" => "e", "d" => "x", "r" => "d", "5" => "r", "f" => "c", "t" => "f", "6" => "t", "g" => "v", "y" => "g", "7" => "y", "h" => "b", "u" => "h", "8" => "u", "j" => "n", "i" => "j", "9" => "i", "k" => "m", "o" => "k", "0" => "o", "p" => "l", "-" => "p" }
Class Method Summary collapse
-
.all_variants(password) ⇒ Object
Returns all variants of a given password including the password itself.
-
.keyboard_shift_variants(password) ⇒ Object
Returns all keyboard shifted variants of a given password.
-
.leet_speak_variants(password) ⇒ Object
Returns all leet speak variants of a given password.
Class Method Details
.all_variants(password) ⇒ Object
Returns all variants of a given password including the password itself
110 111 112 113 114 115 |
# File 'lib/strong_password/password_variants.rb', line 110 def self.all_variants(password) passwords = [password.dup.downcase] passwords += keyboard_shift_variants(password) passwords += leet_speak_variants(password) passwords.uniq end |
.keyboard_shift_variants(password) ⇒ Object
Returns all keyboard shifted variants of a given password
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/strong_password/password_variants.rb', line 118 def self.keyboard_shift_variants(password) password = password.dup.downcase variants = [] if (password == password.tr(KEYBOARDMAP_DOWN_NOSHIFT.keys.join, KEYBOARDMAP_DOWN_NOSHIFT.values.join)) variant = password.tr(KEYBOARDMAP_DOWNRIGHT.keys.join, KEYBOARDMAP_DOWNRIGHT.values.join) variants << variant variants << variant.reverse variant = password.tr(KEYBOARDMAP_DOWNLEFT.keys.join, KEYBOARDMAP_DOWNLEFT.values.join) variants << variant variants << variant.reverse end variants end |
.leet_speak_variants(password) ⇒ Object
Returns all leet speak variants of a given password
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/strong_password/password_variants.rb', line 135 def self.leet_speak_variants(password) password = password.dup.downcase variants = [] leet = password.tr(LEET_SPEAK_1.keys.join, LEET_SPEAK_1.values.join) if leet != password variants << leet variants << leet.reverse end leet_l = password.tr(LEET_SPEAK_2.keys.join, LEET_SPEAK_2.values.join) if (leet_l != password && leet_l != leet) variants << leet_l variants << leet_l.reverse end variants end |