password_strength 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e3b8abca743f54f9e90b9f2ad06c0167ae283c9
4
- data.tar.gz: 857b943282d9a8d17d40536b110c66f4ce4896f7
3
+ metadata.gz: afd2978e12b6d6980a1bdd21811b7804f417df7e
4
+ data.tar.gz: bcb325941e94e8885d0b01c12da7339ff3a6d733
5
5
  SHA512:
6
- metadata.gz: 58cfc6aa1a651abb8c2e9f3c85b9c2c28935cc665b65cd285a27c3ffd43390f81b9f74ee6211a1d850ed15c1695182709a9006985a9b47753d61d6a09d4e2aa6
7
- data.tar.gz: 7f36ddb9d0431c974fe43afb9a1e73f028109cf5137b032b672d50627b68c9eae9d33686004b1af11f71f338827e842830b17204ab5501d4281bf6560911ed18
6
+ metadata.gz: b78bd8239f550d05f4afb26c517f3d90ef6f9c04ce1070201ed4dd35d55930a3efdacdaaed7187a2905eda1283f85d9482f326b3e87e76eef6d9d1077253d2b4
7
+ data.tar.gz: 6cae48bb42591bf3545e34f0296822fa710ba09e890edbea2c28d3d458fca284282033c766fabe13aa84875efbe49a69828e37bb7bbb09fe46c2e24af2d4da71
data/.gitignore CHANGED
@@ -2,3 +2,5 @@ pkg
2
2
  coverage
3
3
  doc
4
4
  /gemfiles/*.lock
5
+ /node_modules
6
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -1,14 +1,16 @@
1
1
  language: ruby
2
2
  script: "bundle exec rake test"
3
-
3
+ sudo: false
4
4
  rvm:
5
- - 2.1.1
6
- - 2.0.0
5
+ - '2.2'
6
+ - '2.1'
7
+ - '2.0'
7
8
 
8
9
  gemfile:
9
- - gemfiles/ar_3_2.gemfile
10
- - gemfiles/ar_4_0.gemfile
11
- - gemfiles/ar_4_1.gemfile
10
+ - gemfiles/am_3_2.gemfile
11
+ - gemfiles/am_4_0.gemfile
12
+ - gemfiles/am_4_1.gemfile
13
+ - gemfiles/am_4_2.gemfile
12
14
 
13
15
  notifications:
14
16
  email:
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
  gemspec
data/README.md CHANGED
@@ -61,9 +61,9 @@ strength.valid?(:good)
61
61
  #=> strength == :good or strength == :strong
62
62
  ```
63
63
 
64
- ## ActiveRecord
64
+ ## ActiveRecord/ActiveModel
65
65
 
66
- The PasswordStrength library comes with ActiveRecord support.
66
+ The PasswordStrength library comes with ActiveRecord/ActiveModel support.
67
67
 
68
68
  ```ruby
69
69
  class Person < ActiveRecord::Base
@@ -71,6 +71,22 @@ class Person < ActiveRecord::Base
71
71
  end
72
72
  ```
73
73
 
74
+ To be honest, you can use it with plain ActiveModel objects.
75
+
76
+ ```ruby
77
+ class Person
78
+ include ActiveModel::Model
79
+ validates_strength_of :password
80
+ end
81
+
82
+ # or simply
83
+
84
+ class Person
85
+ include ActiveModel::Validations
86
+ validates_strength_of :password
87
+ end
88
+ ```
89
+
74
90
  The default options are `:level => :good, :with => :username`.
75
91
 
76
92
  If you want to compare your password against other field, you have to set the `:with` option.
@@ -97,9 +113,7 @@ You can also provide a custom class/module that will test that password.
97
113
  validates_strength_of :password, :using => CustomPasswordTester
98
114
  ```
99
115
 
100
- Your +CustomPasswordTester+ class should override the default implementation. In practice, you're
101
- going to override only the +test+ method that must call one of the following methods:
102
- `invalid!`, `weak!`, `good!` or `strong!`.
116
+ Your `CustomPasswordTester` class should override the default implementation. In practice, you're going to override only the `test` method that must call one of the following methods: `invalid!`, `weak!`, `good!` or `strong!`.
103
117
 
104
118
  ```ruby
105
119
  class CustomPasswordTester < PasswordStrength::Base
@@ -182,6 +196,18 @@ If you're using asset pipeline, just add the following lines to your `applicatio
182
196
  //= require jquery_strength
183
197
  ```
184
198
 
199
+ ## Running tests
200
+
201
+ ### Ruby
202
+
203
+ 1. Install all dependencies with `bundle install`.
204
+ 2. Run `rake test`.
205
+
206
+ ### JavaScript
207
+
208
+ 1. Install Node.js, then run `npm install`.
209
+ 2. Open `test/password_strength_test.html` in your target browser.
210
+
185
211
  ## License
186
212
 
187
213
  (The MIT License)
data/Rakefile CHANGED
@@ -9,3 +9,5 @@ Rake::TestTask.new do |t|
9
9
  t.test_files = FileList["test/**/*_test.rb"]
10
10
  t.verbose = true
11
11
  end
12
+
13
+ task :default => :test
@@ -1,4 +1,12 @@
1
- (function($){
1
+ (function(initializer) {
2
+ if (typeof(module) && module.exports) {
3
+ module.exports = initializer;
4
+ } else if (typeof(require) === "function" && require.amd) {
5
+ require(["password_strength", "jquery"], initializer);
6
+ } else {
7
+ initializer(window.PasswordStrength, window.jQuery);
8
+ }
9
+ }(function(PasswordStrength, $){
2
10
  $.strength = function(username, password, options, callback) {
3
11
  if (typeof(options) == "function") {
4
12
  callback = options;
@@ -59,4 +67,4 @@
59
67
  goodImage: "/images/good.png",
60
68
  strongImage: "/images/strong.png"
61
69
  });
62
- })(jQuery);
70
+ }));
@@ -1,9 +1,13 @@
1
- var PasswordStrength = (function(){
1
+ (function(){
2
2
  var MULTIPLE_NUMBERS_RE = /\d.*?\d.*?\d/;
3
3
  var MULTIPLE_SYMBOLS_RE = /[!@#$%^&*?_~].*?[!@#$%^&*?_~]/;
4
4
  var UPPERCASE_LOWERCASE_RE = /([a-z].*[A-Z])|([A-Z].*[a-z])/;
5
5
  var SYMBOL_RE = /[!@#\$%^&*?_~]/;
6
6
 
7
+ function escapeForRegexp(string) {
8
+ return string.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
9
+ }
10
+
7
11
  function PasswordStrength() {
8
12
  this.username = null;
9
13
  this.password = null;
@@ -21,6 +25,8 @@ var PasswordStrength = (function(){
21
25
  this.status = "invalid";
22
26
  } else if (this.usesCommonWord()) {
23
27
  this.status = "invalid";
28
+ } else if (this.containInvalidRepetition()) {
29
+ this.status = "invalid";
24
30
  } else {
25
31
  score += this.scoreFor("password_size");
26
32
  score += this.scoreFor("numbers");
@@ -181,6 +187,13 @@ var PasswordStrength = (function(){
181
187
  return this.exclude.test(this.password.toString());
182
188
  };
183
189
 
190
+ PasswordStrength.fn.containInvalidRepetition = function() {
191
+ var char = this.password[0];
192
+ var regex = new RegExp("^" + escapeForRegexp(char) + "+$", "i");
193
+
194
+ return regex.test(this.password);
195
+ };
196
+
184
197
  PasswordStrength.fn.usesCommonWord = function() {
185
198
  return PasswordStrength.commonWords.indexOf(this.password.toLowerCase()) >= 0;
186
199
  };
@@ -264,7 +277,15 @@ var PasswordStrength = (function(){
264
277
  return strength;
265
278
  };
266
279
 
267
- PasswordStrength.commonWords = ["!qaz1qaz", "!qaz2wsx", "!qaz2wsx", "!qazxsw2", "!qazzaq1", "#edc4rfv", "000000", "010203", "1111", "11111", "111111", "11111111", "112233", "1212", "121212", "123123", "1234", "12345", "123456", "1234567", "12345678", "123456789", "1234567890", "123qweasd", "12qw!@qw", "1313", "131313", "1941.salembbb.41", "1qaz!qaz", "1qaz@wsx", "1qazxsw@", "1qazzaq!", "2000", "2112", "2222", "232323", "2wsx@wsx", "3333", "3edc#edc", "4128", "4321", "4444", "5150", "5555", "555555", "654321", "6666", "666666", "6969", "696969", "7777", "777777", "7777777", "8675309", "987654", "@wsx2wsx", "aaaa", "aaaaaa", "aaliyah1", "abc123", "abc123abc", "abc123abc", "abcabc123", "abcabc123", "abcd1234", "abcdef", "abgrtyu", "abigail1", "access", "access14", "action", "addison1", "admin", "adobe123", "airforce1", "alabama1", "albert", "alex", "alexander1", "alexandra1", "alexis", "allison1", "amanda", "amateur", "america1", "anderson1", "andrea", "andrew", "angel", "angel101", "angel123", "angela", "angelina1", "angels", "animal", "annabelle1", "anthony", "anthony1", "anthony11", "antonio1", "apollo", "apple", "apples", "arianna1", "arsenal", "arsenal1", "arsenal12", "arsenal123", "arthur", "asdf", "asdfgh", "ashley", "ashley12", "asshole", "asshole1", "atlanta1", "august", "august08", "august10", "august12", "august20", "august22", "austin", "austin02", "austin316", "australia1", "awesome1", "azerty", "baby", "babyboy1", "babygirl1", "babygirl1", "babygurl1", "badboy", "bailey", "bailey12", "banana", "barcelona1", "barney", "baseball", "baseball1", "batista1", "batman", "beach", "bear", "beautiful1", "beaver", "beavis", "beckham7", "beer", "bella123", "benjamin1", "bentley1", "bethany1", "bigcock", "bigdaddy", "bigdaddy1", "bigdick", "bigdog", "bigtits", "bill", "billy", "birdie", "bitch", "bitches", "biteme", "black", "blazer", "blessed1", "blink-182", "blink182", "blonde", "blondes", "blondie1", "blowjob", "blowme", "blue", "bond007", "bonnie", "booboo", "boobs", "booger", "boomer", "booty", "boricua1", "boston", "bradley1", "brandon", "brandon1", "brandon2", "brandon7", "brandy", "braves", "braxton1", "brayden1", "brazil", "breanna1", "brian", "brianna1", "brittany1", "brittney1", "bronco", "broncos", "broncos1", "brooklyn1", "brownie1", "bubba", "bubbles1", "buddy", "buddy123", "bulldog", "buster", "butter", "buttercup1", "butterfly1", "butterfly7", "butthead", "buttons1", "calvin", "camaro", "cameron", "cameron1", "canada", "candy123", "captain", "carlos", "carolina1", "carter", "casper", "cassandra1", "catherine1", "celtic1888", "chargers1", "charles", "charles1", "charlie", "charlie1", "charlotte1", "charmed1", "cheese", "chelsea", "chelsea1", "chelsea123", "chester", "chester1", "chevy", "cheyenne1", "chicago", "chicago1", "chicken", "chicken1", "chocolate1", "chopper1", "chris", "chris123", "christian1", "christina1", "christine1", "christmas1", "classof08", "clayton1", "cocacola", "cock", "coffee", "college", "college1", "colombia1", "colorado1", "compaq", "computer", "computer1", "cookie", "cool", "cooper", "corvette", "courtney1", "cowboy", "cowboys", "cowboys1", "cream", "cricket1", "crystal", "crystal1", "cumming", "cumshot", "cunt", "cutiepie1", "daisy123", "dakota", "dallas", "dallas22", "dan1elle", "daniel", "daniela1", "danielle", "danielle1", "dave", "david", "david123", "death666", "debbie", "december1", "december21", "dennis", "derrick1", "destiny1", "deuseamor", "devil666", "diablo", "diamond", "diamond1", "diamonds1", "dick", "dirty", "doctor", "doggie", "dolphin", "dolphin1", "dolphins", "dolphins1", "dominic1", "donald", "douglas1", "dragon", "dreams", "driver", "eagle", "eagle1", "eagles", "edward", "einstein", "elizabeth1", "elizabeth2", "england1", "enjoy", "enter", "eric", "erotic", "extreme", "falcon", "falcons1", "falcons7", "familia", "fender", "ferrari", "fire", "firebird", "fish", "fishing", "florida", "florida1", "flower", "flyers", "football", "football1", "ford", "forever", "forever1", "forever21", "formula1", "frank", "frankie1", "fred", "freddie1", "freddy", "freedom", "freedom1", "friday13", "friends1", "friends2", "fuck", "fucked", "fucker", "fucking", "fuckme", "fuckoff1", "fuckyou", "fuckyou1", "fuckyou2", "fuckyou2", "gabriel1", "gandalf", "gangsta1", "garrett1", "gateway", "gateway1", "gators", "gemini", "genesis1", "george", "georgia1", "gerrard8", "giants", "giggles1", "ginger", "girl", "girls", "goddess1", "godislove1", "golden", "golf", "golfer", "gordon", "gordon24", "grandma1", "great", "green", "greenday1", "gregory", "guitar", "gunner", "hammer", "hannah", "happy", "hardcore", "harley", "harry123", "hawaii50", "heather", "heather1", "hello", "hello123", "helpme", "hentai", "hershey1", "hockey", "holiday1", "hollywood1", "honey123", "hooters", "horney", "horny", "hotdog", "house", "houston1", "hunter", "hunter01", "hunting", "iceman", "iloveme1", "iloveme2", "iloveyou", "iloveyou1", "iloveyou2", "iloveyou2", "internet", "internet1", "inuyasha1", "ireland1", "isabella1", "isabelle1", "iverson3", "iwantu", "iydgtvmujl6f", "jack", "jackie", "jackson", "jackson1", "jackson5", "jaguar", "jake", "jamaica1", "james", "james123", "january1", "january29", "japan", "jasmine", "jasmine1", "jason", "jasper", "jazmine1", "jeffrey1", "jehovah1", "jennifer", "jennifer1", "jennifer2", "jeremiah1", "jeremy", "jessica", "jessica1", "jessica7", "jesus", "jesus123", "jesus143", "jesus1st", "jesus4me", "jesus777", "jesuscristo", "jesusis#1", "jesusis1", "john", "john3:16", "johncena1", "johnny", "johnson", "jonathan1", "jordan", "jordan01", "jordan12", "jordan23", "joseph", "joshua", "joshua01", "juice", "junior", "justice1", "justin", "justin01", "justin11", "justin21", "justin23", "katelyn1", "katherine1", "kathryn1", "katrina1", "kelly", "kendall1", "kennedy1", "kenneth1", "kevin", "killer", "kimberly1", "king", "kitty", "knight", "kristen1", "kristin1", "l6fkiy9on", "ladies", "ladybug1", "lakers", "lakers24", "lampard8", "laura123", "lauren", "leather", "lebron23", "legend", "letmein", "letmein1", "liberty1", "lindsay1", "lindsey1", "little", "liverp00l", "liverpool1", "liverpool123", "london", "longhorns1", "love", "love4ever", "lover", "lovers", "loveyou2", "lucky", "lucky123", "m1chelle", "mackenzie1", "maddog", "madison", "madison01", "madison1", "madonna1", "maggie", "magic", "magnum", "makayla1", "marcelo", "marie123", "marine", "marines1", "marissa1", "mark", "marlboro", "marshall1", "martin", "marvin", "master", "matrix", "matt", "matthew", "matthew1", "matthew2", "matthew3", "maverick", "maxwell", "maxwell1", "melanie1", "melissa", "melissa1", "member", "mercedes", "mercedes1", "merlin", "metallica1", "michael", "michael01", "michael07", "michael1", "michael2", "michael7", "micheal1", "michele1", "michelle", "michelle1", "michelle2", "mickey", "midnight", "midnight1", "mike", "miller", "mine", "miranda1", "mistress", "molly123", "money", "monica", "monique1", "monkey", "monkey01", "monkey12", "monkey13", "monkeys1", "monster", "monster1", "montana1", "morgan", "mother", "mountain", "movie", "muffin", "murphy", "music", "music123", "mustang", "mustang1", "myspace1", "naked", "nascar", "natalie1", "natasha1", "nathan", "nathan06", "naughty", "ncc1701", "newyork", "newyork1", "nicholas", "nicholas1", "nichole1", "nicole", "nicole12", "ninja", "nipple", "nipples", "nirvana1", "november1", "november11", "november15", "november16", "nursing1", "october1", "october13", "october22", "oliver", "omarion1", "orange", "orlando1", "ou812", "p4ssword", "p@$$w0rd", "p@55w0rd", "p@ssw0rd", "pa$$w0rd", "pa55w0rd", "pa55word", "packers", "panther", "panther1", "panthers1", "panties", "paris", "parker", "pass", "pass1234", "passion1", "passw0rd", "passw0rd", "passw0rd1", "password", "password01", "password1", "password1", "password1!", "password11", "password12", "password12", "password123", "password123", "password13", "password2", "password21", "password3", "password4", "password5", "password7", "password9", "patches1", "patricia1", "patrick", "patrick1", "paul", "peaches", "peaches1", "peanut", "peanut01", "peanut11", "pebbles1", "penguin1", "penis", "pepper", "peter", "phantom", "phantom1", "phoenix", "phoenix1", "photoshop", "pickles1", "playboy1", "player", "please", "pokemon1", "poohbear1", "poohbear1", "pookie", "popcorn1", "porn", "porno", "porsche", "power", "pr1nc3ss", "pr1ncess", "precious1", "preston1", "prince", "princess", "princess01", "princess07", "princess08", "princess1", "princess12", "princess123", "princess13", "princess15", "princess18", "princess19", "princess2", "princess21", "princess23", "princess24", "princess4", "princess5", "princess7", "private", "prototype1", "pumpkin1", "purple", "pussies", "pussy", "qazwsx", "qwert", "qwerty", "qwerty123", "qwertyui", "rabbit", "rachel", "racing", "raiders", "raiders1", "rainbow", "rainbow1", "ranger", "rangers", "rangers1", "raymond1", "rebecca", "rebecca1", "rebelde1", "redskins", "redskins1", "redsox", "redwings", "ricardo1", "richard", "richard1", "robert", "robert01", "rock", "rocket", "rockstar1", "rocky123", "rockyou1", "rockyou1", "ronaldo7", "rosebud", "runner", "rush2112", "russell1", "russia", "rusty123", "sabrina1", "sail2boat3", "samantha", "samantha1", "sammy", "samson", "sandra", "santana1", "saturn", "savannah1", "scooby", "scooter", "scooter1", "scorpio", "scorpio1", "scorpion", "scotland1", "scott", "scrappy1", "sebastian1", "secret", "senior06", "senior07", "september1", "serenity1", "sexsex", "sexy", "shadow", "shannon", "shannon1", "shaved", "shit", "shopping1", "sierra", "silver", "skippy", "skittles1", "slayer", "slipknot1", "slut", "smith", "smokey", "smokey01", "snickers1", "snoopy", "snowball1", "soccer", "soccer11", "soccer12", "soccer13", "soccer14", "soccer17", "softball1", "sophie", "spanky", "sparky", "spartan117", "special1", "spencer1", "spider", "spiderman1", "spongebob1", "squirt", "srinivas", "star", "stars", "start123", "startrek", "starwars", "starwars1", "steelers", "steelers1", "stephanie1", "stephen1", "steve", "steven", "sticky", "stupid", "success", "suckit", "summer", "summer01", "summer05", "summer06", "summer07", "summer08", "summer99", "sunshine", "sunshine1", "super", "superman", "superman1", "superstar1", "surfer", "sweetie1", "sweetpea1", "swimming", "sydney", "taylor", "taylor13", "tbfkiy9on", "teddybear1", "teens", "tennis", "teresa", "test", "tester", "testing", "theman", "thesims2", "thirteen13", "thomas", "thumper1", "thunder", "thunder1", "thx1138", "tiffany", "tiffany1", "tiger", "tiger123", "tigers", "tigger", "tigger01", "tigger12", "tigger123", "time", "timothy1", "tinkerbell1", "titanic1", "tits", "tomcat", "topgun", "toyota", "travis", "trinity1", "trinity3", "tristan1", "trouble", "trouble1", "trustno1", "trustno1", "trustno1", "tucker", "turtle", "twilight1", "twitter", "unicorn1", "united", "vagina", "valerie1", "vampire1", "vanessa1", "vanilla1", "veronica1", "victor", "victoria", "victoria1", "video", "viking", "vincent1", "viper", "voodoo", "voyager", "walter", "warrior", "welcome", "welcome1", "welcome123", "welcome2", "whatever", "whatever1", "white", "whitney1", "william", "william1", "willie", "wilson", "winner", "winston", "winston1", "winter", "winter06", "wizard", "wolf", "women", "xavier", "xxxx", "xxxxx", "xxxxxx", "xxxxxxxx", "yamaha", "yankee", "yankees", "yankees1", "yankees2", "yellow", "young", "z,iyd86i", "zachary1", "zaq!1qaz", "zaq!2wsx", "zaq!xsw2", "zaq1!qaz", "zaq1@wsx", "zaq1zaq!", "zxcvbn", "zxcvbnm", "zzzzzz"];
280
+ PasswordStrength.commonWords = ["!qaz1qaz", "!qaz2wsx", "!qazxsw2", "!qazzaq1", "#edc4rfv", "000000", "010203", "1111", "11111", "111111", "11111111", "112233", "1212", "121212", "123123", "1234", "12345", "123456", "1234567", "12345678", "123456789", "1234567890", "123qweasd", "12qw!@qw", "1313", "131313", "1941.salembbb.41", "1qaz!qaz", "1qaz2wsx", "1qaz@wsx", "1qazxsw@", "1qazzaq!", "2000", "2112", "2222", "232323", "2wsx@wsx", "3333", "3edc#edc", "4128", "4321", "4444", "5150", "5555", "55555", "555555", "654321", "6666", "666666", "6969", "696969", "7777", "777777", "7777777", "8675309", "987654", "987654321", "@wsx2wsx", "aaaa", "aaaaaa", "aaliyah1", "abc123", "abc123abc", "abcabc123", "abcd1234", "abcdef", "abgrtyu", "abigail1", "access", "access14", "action", "addison1", "admin", "adobe123", "affair", "airforce1", "alabama1", "albert", "alex", "alexander1", "alexandra1", "alexis", "allison1", "amanda", "amateur", "america1", "anderson1", "andrea", "andrew", "angel", "angel101", "angel123", "angela", "angelina1", "angels", "animal", "annabelle1", "anthony", "anthony1", "anthony11", "antonio1", "apollo", "apple", "apples", "arianna1", "arsenal", "arsenal1", "arsenal12", "arsenal123", "arthur", "asdf", "asdfasdf", "asdfg", "asdfgh", "asdfghjkl", "ashley", "ashley12", "asshole", "asshole1", "atlanta1", "august", "august08", "august10", "august12", "august20", "august22", "austin", "austin02", "austin316", "australia1", "awesome1", "azerty", "baby", "babyboy1", "babygirl1", "babygurl1", "badboy", "bailey", "bailey12", "banana", "barcelona1", "barney", "baseball", "baseball1", "batista1", "batman", "beach", "bear", "beautiful1", "beaver", "beavis", "beckham7", "beer", "bella123", "benjamin1", "bentley1", "bethany1", "bigcock", "bigdaddy", "bigdaddy1", "bigdick", "bigdog", "bigtits", "bill", "billy", "birdie", "bitch", "bitches", "biteme", "black", "blazer", "blessed1", "blink-182", "blink182", "blonde", "blondes", "blondie1", "blowjob", "blowme", "blue", "bond007", "bonnie", "booboo", "boobs", "booger", "boomer", "booty", "boricua1", "boston", "bradley1", "brandon", "brandon1", "brandon2", "brandon7", "brandy", "braves", "braxton1", "brayden1", "brazil", "breanna1", "brian", "brianna1", "brittany1", "brittney1", "bronco", "broncos", "broncos1", "brooklyn1", "brownie1", "bubba", "bubbles1", "buddy", "buddy123", "bulldog", "buster", "butter", "buttercup1", "butterfly1", "butterfly7", "butthead", "buttons1", "calvin", "camaro", "cameron", "cameron1", "canada", "candy123", "captain", "carlos", "carolina1", "carter", "casper", "cassandra1", "catherine1", "celtic1888", "chargers1", "charles", "charles1", "charlie", "charlie1", "charlotte1", "charmed1", "cheese", "chelsea", "chelsea1", "chelsea123", "chester", "chester1", "chevy", "cheyenne1", "chicago", "chicago1", "chicken", "chicken1", "chocolate1", "chopper1", "chris", "chris123", "christian1", "christina1", "christine1", "christmas1", "classof08", "clayton1", "cocacola", "cock", "coffee", "college", "college1", "colombia1", "colorado1", "compaq", "computer", "computer1", "cookie", "cool", "cooper", "corvette", "courtney1", "cowboy", "cowboys", "cowboys1", "cream", "cricket1", "crystal", "crystal1", "cumming", "cumshot", "cunt", "cutiepie1", "daisy123", "dakota", "dallas", "dallas22", "dan1elle", "daniel", "daniela1", "danielle", "danielle1", "dave", "david", "david123", "death666", "debbie", "december1", "december21", "DEFAULT", "dennis", "derrick1", "destiny1", "deuseamor", "devil666", "diablo", "diamond", "diamond1", "diamonds1", "dick", "dirty", "doctor", "doggie", "dolphin", "dolphin1", "dolphins", "dolphins1", "dominic1", "donald", "douglas1", "dragon", "dreams", "driver", "eagle", "eagle1", "eagles", "edward", "einstein", "elizabeth1", "elizabeth2", "england1", "enjoy", "enter", "eric", "erotic", "extreme", "falcon", "falcons1", "falcons7", "familia", "fender", "ferrari", "fire", "firebird", "fish", "fishing", "florida", "florida1", "flower", "flyers", "football", "football1", "ford", "forever", "forever1", "forever21", "formula1", "frank", "frankie1", "fred", "freddie1", "freddy", "freedom", "freedom1", "friday13", "friends1", "friends2", "fuck", "fucked", "fucker", "fucking", "fuckme", "fuckoff", "fuckoff1", "fuckyou", "fuckyou1", "fuckyou2", "gabriel1", "gandalf", "gangsta1", "garrett1", "gateway", "gateway1", "gators", "gemini", "genesis1", "george", "georgia1", "gerrard8", "giants", "giggles1", "ginger", "girl", "girls", "goddess1", "godislove1", "golden", "golf", "golfer", "gordon", "gordon24", "grandma1", "great", "green", "greenday1", "gregory", "guitar", "gunner", "hammer", "hannah", "happy", "hardcore", "harley", "harry123", "hawaii50", "heather", "heather1", "hello", "hello123", "helpme", "hentai", "hershey1", "hockey", "holiday1", "hollywood1", "honey123", "hooters", "horney", "horny", "hosts", "hotdog", "house", "houston1", "hunter", "hunter01", "hunting", "iceman", "iloveme1", "iloveme2", "iloveyou", "iloveyou1", "iloveyou2", "internet", "internet1", "inuyasha1", "ireland1", "isabella1", "isabelle1", "iverson3", "iwantu", "iydgtvmujl6f", "jack", "jackie", "jackson", "jackson1", "jackson5", "jaguar", "jake", "jamaica1", "james", "james123", "january1", "january29", "japan", "jasmine", "jasmine1", "jason", "jasper", "jazmine1", "jeffrey1", "jehovah1", "jennifer", "jennifer1", "jennifer2", "jeremiah1", "jeremy", "jessica", "jessica1", "jessica7", "jesus", "jesus123", "jesus143", "jesus1st", "jesus4me", "jesus777", "jesuscristo", "jesusis#1", "jesusis1", "john", "john3:16", "johncena1", "johnny", "johnson", "jonathan1", "jordan", "jordan01", "jordan12", "jordan23", "joseph", "joshua", "joshua01", "juice", "junior", "justice1", "justin", "justin01", "justin11", "justin21", "justin23", "katelyn1", "katherine1", "kathryn1", "katrina1", "kazuga", "kelly", "kendall1", "kennedy1", "kenneth1", "kevin", "killer", "kimberly1", "king", "kitty", "knight", "kristen1", "kristin1", "l6fkiy9on", "ladies", "ladybug1", "lakers", "lakers24", "lampard8", "laura123", "lauren", "leather", "lebron23", "legend", "letmein", "letmein1", "liberty1", "lindsay1", "lindsey1", "little", "liverp00l", "liverpool", "liverpool1", "liverpool123", "london", "longhorns1", "looking", "love", "love4ever", "lover", "lovers", "loveyou2", "lucky", "lucky123", "m1chelle", "mackenzie1", "maddog", "madison", "madison01", "madison1", "madonna1", "maggie", "magic", "magnum", "makayla1", "marcelo", "marie123", "marine", "marines1", "marissa1", "mark", "marlboro", "marshall1", "martin", "marvin", "master", "matrix", "matt", "matthew", "matthew1", "matthew2", "matthew3", "maverick", "maxwell", "maxwell1", "melanie1", "melissa", "melissa1", "member", "mercedes", "mercedes1", "merlin", "metallica1", "michael", "michael01", "michael07", "michael1", "michael2", "michael7", "micheal1", "michele1", "michelle", "michelle1", "michelle2", "mickey", "midnight", "midnight1", "mike", "miller", "mine", "miranda1", "mistress", "molly123", "money", "monica", "monique1", "monkey", "monkey01", "monkey12", "monkey13", "monkeys1", "monster", "monster1", "montana1", "morgan", "mother", "mountain", "movie", "muffin", "murphy", "music", "music123", "mustang", "mustang1", "myspace1", "naked", "nascar", "natalie1", "natasha1", "nathan", "nathan06", "naughty", "ncc1701", "newyork", "newyork1", "nicholas", "nicholas1", "nichole1", "nicole", "nicole12", "ninja", "nipple", "nipples", "nirvana1", "november1", "november11", "november15", "november16", "nursing1", "october1", "october13", "october22", "oliver", "omarion1", "orange", "orlando1", "ou812", "p4ssword", "p@$$w0rd", "p@55w0rd", "p@ssw0rd", "pa$$w0rd", "pa55w0rd", "pa55word", "packers", "panther", "panther1", "panthers1", "panties", "paris", "parker", "pass", "pass1234", "passion1", "passw0rd", "passw0rd1", "password", "password01", "password1", "password1!", "password11", "password12", "password123", "password13", "password2", "password21", "password3", "password4", "password5", "password7", "password9", "patches1", "patricia1", "patrick", "patrick1", "paul", "peaches", "peaches1", "peanut", "peanut01", "peanut11", "pebbles1", "penguin1", "penis", "pepper", "peter", "phantom", "phantom1", "phoenix", "phoenix1", "photoshop", "pickles1", "playboy1", "player", "please", "pokemon1", "poohbear1", "pookie", "popcorn1", "porn", "porno", "porsche", "power", "pr1nc3ss", "pr1ncess", "precious1", "preston1", "prince", "princess", "princess01", "princess07", "princess08", "princess1", "princess12", "princess123", "princess13", "princess15", "princess18", "princess19", "princess2", "princess21", "princess23", "princess24", "princess4", "princess5", "princess7", "private", "prototype1", "pumpkin1", "purple", "pussies", "pussy", "qazwsx", "qwert", "qwerty", "qwerty123", "qwertyui", "qwertyuiop", "rabbit", "rachel", "racing", "raiders", "raiders1", "rainbow", "rainbow1", "ranger", "rangers", "rangers1", "raymond1", "rebecca", "rebecca1", "rebelde1", "redskins", "redskins1", "redsox", "redwings", "ricardo1", "richard", "richard1", "robert", "robert01", "rock", "rocket", "rockstar1", "rocky123", "rockyou1", "ronaldo7", "rosebud", "runner", "rush2112", "russell1", "russia", "rusty123", "sabrina1", "sail2boat3", "samantha", "samantha1", "sammy", "samson", "sandra", "santana1", "saturn", "savannah1", "scooby", "scooter", "scooter1", "scorpio", "scorpio1", "scorpion", "scotland1", "scott", "scrappy1", "sebastian1", "secret", "senior06", "senior07", "september1", "serenity1", "sexsex", "sexy", "shadow", "shannon", "shannon1", "shaved", "shit", "shopping1", "sierra", "silver", "skippy", "skittles1", "slayer", "slipknot1", "slut", "smith", "smokey", "smokey01", "snickers1", "snoopy", "snowball1", "soccer", "soccer11", "soccer12", "soccer13", "soccer14", "soccer17", "softball1", "sophie", "spanky", "sparky", "spartan117", "special1", "spencer1", "spider", "spiderman1", "spongebob1", "squirt", "srinivas", "star", "stars", "start123", "startrek", "starwars", "starwars1", "steelers", "steelers1", "stephanie1", "stephen1", "steve", "steven", "sticky", "stupid", "success", "suckit", "summer", "summer01", "summer05", "summer06", "summer07", "summer08", "summer99", "sunshine", "sunshine1", "super", "superman", "superman1", "superstar1", "surfer", "sweetie1", "sweetpea1", "swimming", "sydney", "taylor", "taylor13", "tbfkiy9on", "teddybear1", "teens", "tennis", "teresa", "test", "tester", "testing", "theman", "thesims2", "thirteen13", "thomas", "thumper1", "thunder", "thunder1", "thx1138", "tiffany", "tiffany1", "tiger", "tiger123", "tigers", "tigger", "tigger01", "tigger12", "tigger123", "time", "timothy1", "tinkerbell1", "titanic1", "tits", "tomcat", "topgun", "toyota", "travis", "trinity1", "trinity3", "tristan1", "trouble", "trouble1", "trustno1", "tucker", "turtle", "twilight1", "twitter", "unicorn1", "united", "vagina", "valerie1", "vampire1", "vanessa1", "vanilla1", "veronica1", "victor", "victoria", "victoria1", "video", "viking", "vincent1", "viper", "voodoo", "voyager", "walter", "warrior", "welcome", "welcome1", "welcome123", "welcome2", "whatever", "whatever1", "white", "whitney1", "william", "william1", "willie", "wilson", "winner", "winston", "winston1", "winter", "winter06", "wizard", "wolf", "women", "xavier", "xxxx", "xxxxx", "xxxxxx", "xxxxxxxx", "yamaha", "yankee", "yankees", "yankees1", "yankees2", "yellow", "young", "z,iyd86i", "zachary1", "zaq!1qaz", "zaq!2wsx", "zaq!xsw2", "zaq1!qaz", "zaq1@wsx", "zaq1zaq!", "zxcvbn", "zxcvbnm", "zzzzzz"];
268
281
 
269
- return PasswordStrength;
282
+ if (typeof(module) === "object" && module.exports) {
283
+ module.exports = PasswordStrength;
284
+ } else if (typeof define === "function" && define.amd) {
285
+ define("password_strength", [], function() {
286
+ return PasswordStrength;
287
+ });
288
+ } else if (typeof(window) === "object") {
289
+ window.PasswordStrength = PasswordStrength;
290
+ }
270
291
  })();
@@ -1,4 +1,4 @@
1
1
  source "https://rubygems.org"
2
2
  gemspec path: ".."
3
3
 
4
- gem "activerecord", "~> 3.2.0"
4
+ gem "activemodel", "~> 3.2.0"
@@ -1,4 +1,4 @@
1
1
  source "https://rubygems.org"
2
2
  gemspec path: ".."
3
3
 
4
- gem "activerecord", "~> 4.0.0"
4
+ gem "activemodel", "~> 4.0.0"
@@ -1,4 +1,4 @@
1
1
  source "https://rubygems.org"
2
2
  gemspec path: ".."
3
3
 
4
- gem "activerecord", "~> 4.1.0"
4
+ gem "activemodel", "~> 4.1.0"
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+ gemspec path: ".."
3
+
4
+ gem "activemodel", "~> 4.1.0"
@@ -17,7 +17,7 @@ module ActiveModel # :nodoc:
17
17
 
18
18
  def check_validity!
19
19
  raise ArgumentError, "The :with option must be supplied" unless options.include?(:with)
20
- raise ArgumentError, "The :exclude options must be an array of strings or regular expression" if options[:exclude] && !options[:exclude].kind_of?(Array) && !options[:exclude].kind_of?(Regexp)
20
+ raise ArgumentError, "The :exclude options must be an array of strings or a regular expression" if options[:exclude] && !options[:exclude].kind_of?(Array) && !options[:exclude].kind_of?(Regexp)
21
21
  check_level_validity!(options[:level])
22
22
  super
23
23
  end
@@ -187,6 +187,8 @@ module PasswordStrength
187
187
  invalid!
188
188
  elsif common_word?
189
189
  invalid!
190
+ elsif contain_invalid_repetion?
191
+ invalid!
190
192
  else
191
193
  @score += score_for(:password_size)
192
194
  @score += score_for(:numbers)
@@ -223,6 +225,12 @@ module PasswordStrength
223
225
  password.to_s =~ regex
224
226
  end
225
227
 
228
+ def contain_invalid_repetion?
229
+ char = password.to_s.chars.first
230
+ regex = /^#{Regexp.escape(char)}+$/i
231
+ password.to_s =~ regex
232
+ end
233
+
226
234
  def repetitions(text, size) # :nodoc:
227
235
  count = 0
228
236
  matches = []
@@ -1,8 +1,8 @@
1
1
  module PasswordStrength
2
2
  module Version # :nodoc: all
3
3
  MAJOR = 1
4
- MINOR = 0
5
- PATCH = 2
4
+ MINOR = 1
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
data/package.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "password_strength",
3
+ "version": "1.1.0",
4
+ "repository": "http://github.com/fnando/password_strength",
5
+ "license": "MIT",
6
+ "main": "app/assets/javascripts/password_strength.js",
7
+ "devDependencies": {
8
+ "jquery": "^2.1.4",
9
+ "qunitjs": "^1.20.0"
10
+ }
11
+ }
@@ -19,9 +19,7 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.add_dependency "activemodel"
21
21
 
22
- s.add_development_dependency "activerecord"
23
22
  s.add_development_dependency "rake"
24
- s.add_development_dependency "pry-meta"
25
- s.add_development_dependency "sqlite3"
26
- s.add_development_dependency "test-unit"
23
+ s.add_development_dependency "minitest"
24
+ s.add_development_dependency "minitest-utils"
27
25
  end
data/support/common.txt CHANGED
@@ -1,6 +1,5 @@
1
1
  !qaz1qaz
2
2
  !qaz2wsx
3
- !qaz2wsx
4
3
  !qazxsw2
5
4
  !qazzaq1
6
5
  #edc4rfv
@@ -27,6 +26,7 @@
27
26
  131313
28
27
  1941.salembbb.41
29
28
  1qaz!qaz
29
+ 1qaz2wsx
30
30
  1qaz@wsx
31
31
  1qazxsw@
32
32
  1qazzaq!
@@ -42,6 +42,7 @@
42
42
  4444
43
43
  5150
44
44
  5555
45
+ 55555
45
46
  555555
46
47
  654321
47
48
  6666
@@ -53,14 +54,13 @@
53
54
  7777777
54
55
  8675309
55
56
  987654
57
+ 987654321
56
58
  @wsx2wsx
57
59
  aaaa
58
60
  aaaaaa
59
61
  aaliyah1
60
62
  abc123
61
63
  abc123abc
62
- abc123abc
63
- abcabc123
64
64
  abcabc123
65
65
  abcd1234
66
66
  abcdef
@@ -72,6 +72,7 @@ action
72
72
  addison1
73
73
  admin
74
74
  adobe123
75
+ affair
75
76
  airforce1
76
77
  alabama1
77
78
  albert
@@ -108,7 +109,10 @@ arsenal12
108
109
  arsenal123
109
110
  arthur
110
111
  asdf
112
+ asdfasdf
113
+ asdfg
111
114
  asdfgh
115
+ asdfghjkl
112
116
  ashley
113
117
  ashley12
114
118
  asshole
@@ -129,7 +133,6 @@ azerty
129
133
  baby
130
134
  babyboy1
131
135
  babygirl1
132
- babygirl1
133
136
  babygurl1
134
137
  badboy
135
138
  bailey
@@ -301,6 +304,7 @@ death666
301
304
  debbie
302
305
  december1
303
306
  december21
307
+ DEFAULT
304
308
  dennis
305
309
  derrick1
306
310
  destiny1
@@ -373,11 +377,11 @@ fucked
373
377
  fucker
374
378
  fucking
375
379
  fuckme
380
+ fuckoff
376
381
  fuckoff1
377
382
  fuckyou
378
383
  fuckyou1
379
384
  fuckyou2
380
- fuckyou2
381
385
  gabriel1
382
386
  gandalf
383
387
  gangsta1
@@ -430,6 +434,7 @@ honey123
430
434
  hooters
431
435
  horney
432
436
  horny
437
+ hosts
433
438
  hotdog
434
439
  house
435
440
  houston1
@@ -442,7 +447,6 @@ iloveme2
442
447
  iloveyou
443
448
  iloveyou1
444
449
  iloveyou2
445
- iloveyou2
446
450
  internet
447
451
  internet1
448
452
  inuyasha1
@@ -514,6 +518,7 @@ katelyn1
514
518
  katherine1
515
519
  kathryn1
516
520
  katrina1
521
+ kazuga
517
522
  kelly
518
523
  kendall1
519
524
  kennedy1
@@ -544,10 +549,12 @@ lindsay1
544
549
  lindsey1
545
550
  little
546
551
  liverp00l
552
+ liverpool
547
553
  liverpool1
548
554
  liverpool123
549
555
  london
550
556
  longhorns1
557
+ looking
551
558
  love
552
559
  love4ever
553
560
  lover
@@ -686,17 +693,13 @@ pass
686
693
  pass1234
687
694
  passion1
688
695
  passw0rd
689
- passw0rd
690
696
  passw0rd1
691
697
  password
692
698
  password01
693
699
  password1
694
- password1
695
700
  password1!
696
701
  password11
697
702
  password12
698
- password12
699
- password123
700
703
  password123
701
704
  password13
702
705
  password2
@@ -732,7 +735,6 @@ player
732
735
  please
733
736
  pokemon1
734
737
  poohbear1
735
- poohbear1
736
738
  pookie
737
739
  popcorn1
738
740
  porn
@@ -773,6 +775,7 @@ qwert
773
775
  qwerty
774
776
  qwerty123
775
777
  qwertyui
778
+ qwertyuiop
776
779
  rabbit
777
780
  rachel
778
781
  racing
@@ -801,7 +804,6 @@ rocket
801
804
  rockstar1
802
805
  rocky123
803
806
  rockyou1
804
- rockyou1
805
807
  ronaldo7
806
808
  rosebud
807
809
  runner
@@ -949,8 +951,6 @@ tristan1
949
951
  trouble
950
952
  trouble1
951
953
  trustno1
952
- trustno1
953
- trustno1
954
954
  tucker
955
955
  turtle
956
956
  twilight1