sequel_secure_password 0.2.10 → 0.2.11
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|