sequel_secure_password 0.2.10 → 0.2.11
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 +4 -4
- data/.travis.yml +2 -0
- data/README.md +7 -2
- data/lib/sequel_secure_password.rb +7 -5
- data/lib/sequel_secure_password/version.rb +1 -1
- data/spec/sequel_secure_password_spec.rb +14 -0
- data/spec/spec_helper.rb +10 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e49fcb8f21fc059c0314e08fd91c31f12b29664
|
4
|
+
data.tar.gz: 4867077e650776d13903fb2dd5e4af8e1eac373e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a1587e9ef51a0997539055434fec21d7a1dc5216c78fc552d5cfbfab587277b8e7ed63099fac75a63b53bcef6e298e5a4dd636573eaf2807b4c3571fabf2d65
|
7
|
+
data.tar.gz: 1d73d1e5e93854ac28cadf2f89b0b99ff47530f82993201ec16f7a4062f68d8455189b2649980b84f97a9e80b723b8f05d03f86bd83e9a4b86ce86736415bf2d
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -21,8 +21,7 @@ Or install it yourself as:
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
-
Plugin should be used in subclasses of `Sequel::Model`.
|
25
|
-
`password_digest` attribute in database.
|
24
|
+
Plugin should be used in subclasses of `Sequel::Model`.
|
26
25
|
__Always__ call super in `validate` method of your model, otherwise password
|
27
26
|
validations won't be executed.
|
28
27
|
It __does not__ `set_allowed_columns` and mass assignment policy must be managed
|
@@ -45,6 +44,12 @@ Example model:
|
|
45
44
|
plugin :secure_password, include_validations: false
|
46
45
|
end
|
47
46
|
|
47
|
+
# digest_column option can be used to use an alternate database column.
|
48
|
+
# the default column is "password_digest"
|
49
|
+
class UserWithAlternateDigestColumn < Sequel::Model
|
50
|
+
plugin :secure_password, digest_column: :password_hash
|
51
|
+
end
|
52
|
+
|
48
53
|
user = User.new
|
49
54
|
user.password = "foo"
|
50
55
|
user.password_confirmation = "bar"
|
@@ -17,13 +17,15 @@ module Sequel
|
|
17
17
|
model.instance_eval do
|
18
18
|
@cost = options.fetch(:cost, BCrypt::Engine::DEFAULT_COST)
|
19
19
|
@include_validations = options.fetch(:include_validations, true)
|
20
|
+
@digest_column = options.fetch(:digest_column, :password_digest)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
24
|
module ClassMethods
|
24
|
-
attr_reader :cost, :include_validations
|
25
|
+
attr_reader :cost, :include_validations, :digest_column
|
25
26
|
Plugins.inherited_instance_variables(self, :@cost => nil,
|
26
|
-
:@include_validations => true
|
27
|
+
:@include_validations => true,
|
28
|
+
:@digest_column => :password_digest)
|
27
29
|
end
|
28
30
|
|
29
31
|
module InstanceMethods
|
@@ -33,12 +35,12 @@ module Sequel
|
|
33
35
|
def password=(unencrypted)
|
34
36
|
@password = unencrypted
|
35
37
|
unless SecurePassword.blank_string? unencrypted
|
36
|
-
self.
|
38
|
+
self.send "#{model.digest_column}=", BCrypt::Password.create(unencrypted, :cost => model.cost)
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
42
|
def authenticate(unencrypted)
|
41
|
-
if BCrypt::Password.new(
|
43
|
+
if BCrypt::Password.new(self.send(model.digest_column)) == unencrypted
|
42
44
|
self
|
43
45
|
end
|
44
46
|
end
|
@@ -47,7 +49,7 @@ module Sequel
|
|
47
49
|
super
|
48
50
|
|
49
51
|
if model.include_validations
|
50
|
-
errors.add :password, 'is not present' if SecurePassword.blank_string?(
|
52
|
+
errors.add :password, 'is not present' if SecurePassword.blank_string?(self.send(model.digest_column))
|
51
53
|
errors.add :password, 'doesn\'t match confirmation' if password != password_confirmation
|
52
54
|
end
|
53
55
|
end
|
@@ -52,6 +52,10 @@ describe "model using Sequel::Plugins::SecurePassword" do
|
|
52
52
|
expect( User.inherited_instance_variables ).to include(:@include_validations)
|
53
53
|
end
|
54
54
|
|
55
|
+
it "has an inherited instance variable :@digest_column" do
|
56
|
+
expect( User.inherited_instance_variables ).to include(:@digest_column)
|
57
|
+
end
|
58
|
+
|
55
59
|
context "when validations are disabled" do
|
56
60
|
subject(:user_without_validations) { UserWithoutValidations.new }
|
57
61
|
before do
|
@@ -86,4 +90,14 @@ describe "model using Sequel::Plugins::SecurePassword" do
|
|
86
90
|
}
|
87
91
|
end
|
88
92
|
end
|
93
|
+
|
94
|
+
describe "with digest column option" do
|
95
|
+
subject(:digestcolumn_user) { UserWithAlternateDigestColumn.new }
|
96
|
+
context "having an alternate digest column" do
|
97
|
+
before { digestcolumn_user.password = "foo" }
|
98
|
+
it {
|
99
|
+
BCrypt::Password.new(digestcolumn_user.password_hash).should eq "foo"
|
100
|
+
}
|
101
|
+
end
|
102
|
+
end
|
89
103
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -39,9 +39,19 @@ RSpec.configure do |c|
|
|
39
39
|
plugin :secure_password, include_validations: false
|
40
40
|
end
|
41
41
|
|
42
|
+
class UserWithAlternateDigestColumn < Sequel::Model
|
43
|
+
set_schema do
|
44
|
+
primary_key :id
|
45
|
+
varchar :password_hash
|
46
|
+
end
|
47
|
+
|
48
|
+
plugin :secure_password, digest_column: :password_hash
|
49
|
+
end
|
50
|
+
|
42
51
|
User.create_table!
|
43
52
|
HighCostUser.create_table!
|
44
53
|
UserWithoutValidations.create_table!
|
54
|
+
UserWithAlternateDigestColumn.create_table!
|
45
55
|
end
|
46
56
|
|
47
57
|
c.around :each do |example|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel_secure_password
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mateusz Lenik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcrypt
|
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
requirements: []
|
133
133
|
rubyforge_project:
|
134
|
-
rubygems_version: 2.
|
134
|
+
rubygems_version: 2.4.5
|
135
135
|
signing_key:
|
136
136
|
specification_version: 4
|
137
137
|
summary: Plugin adds BCrypt authentication and password hashing to Sequel models.
|