password_validation 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/password_validation/validators.rb +76 -0
- data/lib/password_validation/version.rb +3 -0
- data/lib/password_validation.rb +4 -0
- metadata +114 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5574bb7fc20f382c0343ee838cf97528f07b3b5e
|
4
|
+
data.tar.gz: 9d6db0da44b4bca20153f98d17f08d19046ed189
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fa23b7db2d044a2d708158397b716dd8b752ba168d06e445c3fe5bf35c59879163390ae8ce24a916aaf7270166449ed19d259525cc42b03e7ef9a7b3102299d2
|
7
|
+
data.tar.gz: 53fae074d12aca5146553bf9b4aed2dba17ce9791efa97e50c71106740f76d54a6a20bfc374450db03d4a0d8acf3fc0b2710c58153d5ff64789b77a7698dd552
|
@@ -0,0 +1,76 @@
|
|
1
|
+
class PasswordValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(record, attr, password)
|
3
|
+
opts = {
|
4
|
+
length: {minimum: 8, message: ->(opts, _) { "must be at least #{opts[:minimum]} characters" }},
|
5
|
+
uppercase: {required: true, message: 'must include an uppercase letter (A-Z)'},
|
6
|
+
lowercase: {required: true, message: 'must include a lowercase letter (a-z)'},
|
7
|
+
numeral: {required: true, message: 'must include a number (0-9)'},
|
8
|
+
special: {required: true, pattern: /[`~!@#$%\^&*()\-_=+\[\]{}\\|;:'",.<>\/?]/, message: ->(opts, _) {
|
9
|
+
list = opts[:pattern].source[1..-2].gsub('\\', '')
|
10
|
+
if opts[:pattern].source.include?('\\\\')
|
11
|
+
list << '\\'
|
12
|
+
end
|
13
|
+
"must include one of these special characters: #{list}"
|
14
|
+
}}
|
15
|
+
}.deep_merge(options)
|
16
|
+
|
17
|
+
errors = record.errors[attr]
|
18
|
+
if password
|
19
|
+
maybe_validate_length password, errors, opts
|
20
|
+
maybe_validate_lowercase password, errors, opts
|
21
|
+
maybe_validate_uppercase password, errors, opts
|
22
|
+
maybe_validate_numeral password, errors, opts
|
23
|
+
maybe_validate_special password, errors, opts
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def maybe_validate_length(password, errors, opts)
|
30
|
+
if opts[:length] and opts[:length][:minimum]
|
31
|
+
if password.length < opts[:length][:minimum]
|
32
|
+
errors << message(opts[:length], password)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def maybe_validate_lowercase(password, errors, opts)
|
38
|
+
if opts[:lowercase] and opts[:lowercase][:required]
|
39
|
+
unless password.match(/[a-z]/)
|
40
|
+
errors << message(opts[:lowercase], password)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def maybe_validate_numeral(password, errors, opts)
|
46
|
+
if opts[:numeral] and opts[:numeral][:required]
|
47
|
+
unless password.match(/[0-9]/)
|
48
|
+
errors << message(opts[:numeral], password)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def maybe_validate_special(password, errors, opts)
|
54
|
+
if opts[:special] and opts[:special][:pattern] and opts[:special][:required]
|
55
|
+
unless password.match(opts[:special][:pattern])
|
56
|
+
errors << message(opts[:special], password)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def maybe_validate_uppercase(password, errors, opts)
|
62
|
+
if opts[:uppercase] and opts[:uppercase][:required]
|
63
|
+
unless password.match(/[A-Z]/)
|
64
|
+
errors << message(opts[:uppercase], password)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def message(opts, password)
|
70
|
+
if opts[:message].is_a? Proc
|
71
|
+
opts[:message].call opts, password
|
72
|
+
else
|
73
|
+
opts[:message]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: password_validation
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jarrett Colby
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 5.4.1
|
48
|
+
- - "~>"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '5'
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 5.4.1
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '5'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: minitest-reporters
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.0.5
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '1'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.0.5
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '1'
|
81
|
+
description: Provides validates :password for ActiveModel
|
82
|
+
email: jarrett@madebyhq.com
|
83
|
+
executables: []
|
84
|
+
extensions: []
|
85
|
+
extra_rdoc_files: []
|
86
|
+
files:
|
87
|
+
- lib/password_validation.rb
|
88
|
+
- lib/password_validation/validators.rb
|
89
|
+
- lib/password_validation/version.rb
|
90
|
+
homepage: https://github.com/jarrett/password_validation
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 2.2.2
|
111
|
+
signing_key:
|
112
|
+
specification_version: 4
|
113
|
+
summary: Password Validation
|
114
|
+
test_files: []
|