sequel_secure_password 0.2.1 → 0.2.2

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: 5c152426f94b917df244612651e1cf9bd0fbe805
4
- data.tar.gz: 2cc1ac36e86f7b54ca23dc1f3bcc282a4d6ed30a
3
+ metadata.gz: 8487a3cef20c52b38e950013b4ff5eedf2653171
4
+ data.tar.gz: 1ca566679bc6e6ffc4548b4f4a4f0affda11cde1
5
5
  SHA512:
6
- metadata.gz: ce349db12f1d11b26093688c8aee75a8da70c41f18dad34e0c9323d7d17d517d018378f7cab51905d56c65a32b6fdb4f284816f7a4c70292652ec954c4efd65c
7
- data.tar.gz: cdd927dfb078dee488ad5de6f13f4b87d2ec4c7a691fa97bf27aa3b5044b294175fd9e7fda9345c585ee7bf8673d361006b7ecde894e7bab389c823d6a859685
6
+ metadata.gz: 2ea0fccc516701add55612477eda482a0f651d3495f0e50d41ea8acef5bbbb2aafa19a8df120881515e363985f4ff240122bf5b17dbea1530051cf1875aa9866
7
+ data.tar.gz: 9820ae5bc3e94486ae01167061745e104c06963b719d8124975fc28972f0e46bd5790c20c99921b9d8844f35da486eec854d1159181860d451eeeb30ab761de4
data/README.md CHANGED
@@ -22,9 +22,9 @@ Or install it yourself as:
22
22
  ## Usage
23
23
 
24
24
  Plugin should be used in subclasses of `Sequel::Model`. The model should have
25
- `password_digest` attribute in database.
25
+ `password_digest` attribute in database.
26
26
  __Always__ call super in `validate` method of your model, otherwise password
27
- validations won't be executed.
27
+ validations won't be executed.
28
28
  It __does not__ `set_allowed_columns` and mass assignment policy must be managed
29
29
  separately.
30
30
 
@@ -34,6 +34,11 @@ Example model:
34
34
  plugin :secure_password
35
35
  end
36
36
 
37
+ # cost option can be used to change computational complexity of BCrypt
38
+ class HighCostUser < Sequel::Model
39
+ plugin :secure_password, cost: 12
40
+ end
41
+
37
42
  user = User.new
38
43
  user.password = "foo"
39
44
  user.password_confirmation = "bar"
@@ -52,3 +57,7 @@ Example model:
52
57
  3. Commit your changes (`git commit -am 'Add some feature'`)
53
58
  4. Push to the branch (`git push origin my-new-feature`)
54
59
  5. Create new Pull Request
60
+
61
+ ## Thanks
62
+
63
+ Thanks to [@send](https//:github.com/send) for implementing the `:cost` option.
@@ -4,6 +4,21 @@ require "bcrypt"
4
4
  module Sequel
5
5
  module Plugins
6
6
  module SecurePassword
7
+
8
+ # Configure the plugin by setting the available options. Options:
9
+ # * :cost - the cost factor when creating password hash. Default:
10
+ # BCrypt::Engine::DEFAULT_COST(10)
11
+ def self.configure(model, opts=OPTS)
12
+ model.instance_eval do
13
+ @cost = opts[:cost] || BCrypt::Engine::DEFAULT_COST
14
+ end
15
+ end
16
+
17
+ module ClassMethods
18
+ attr_reader :cost
19
+ Plugins.inherited_instance_variables(self, @cost => nil)
20
+ end
21
+
7
22
  module InstanceMethods
8
23
  attr_accessor :password_confirmation
9
24
  attr_reader :password
@@ -11,7 +26,7 @@ module Sequel
11
26
  def password=(unencrypted)
12
27
  @password = unencrypted
13
28
  unless blank? unencrypted
14
- self.password_digest = BCrypt::Password.create(unencrypted)
29
+ self.password_digest = BCrypt::Password.create(unencrypted, :cost => model.cost)
15
30
  end
16
31
  end
17
32
 
@@ -1,3 +1,3 @@
1
1
  module SequelSecurePassword
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -22,7 +22,7 @@ EOF
22
22
  gem.require_paths = ["lib"]
23
23
 
24
24
  gem.add_dependency 'bcrypt-ruby', '~> 3.1.0'
25
- gem.add_dependency 'sequel', '~> 4.0.0'
25
+ gem.add_dependency 'sequel', '~> 4.1.0'
26
26
 
27
27
  gem.add_development_dependency 'rspec', '~> 2.14.0'
28
28
  gem.add_development_dependency 'rake', '~> 10.0.0'
@@ -25,6 +25,13 @@ describe "model using Sequel::Plugins::SecurePassword" do
25
25
  it { should_not be_valid }
26
26
  end
27
27
 
28
+ context "having cost within password_digest" do
29
+ before { user.password = "foo" }
30
+ it {
31
+ BCrypt::Password.new(user.password_digest).cost.should be BCrypt::Engine::DEFAULT_COST
32
+ }
33
+ end
34
+
28
35
  context "when password matches confirmation" do
29
36
  before { user.password = user.password_confirmation = "foo" }
30
37
 
@@ -46,4 +53,14 @@ describe "model using Sequel::Plugins::SecurePassword" do
46
53
  end
47
54
  end
48
55
 
56
+ describe "with cost option" do
57
+ subject(:highcost_user) { HighCostUser.new }
58
+ context "having cost within password_digest" do
59
+ before { highcost_user.password = "foo" }
60
+ it {
61
+ BCrypt::Password.new(highcost_user.password_digest).cost.should be 12
62
+ }
63
+ end
64
+
65
+ end
49
66
  end
data/spec/spec_helper.rb CHANGED
@@ -22,6 +22,17 @@ RSpec.configure do |c|
22
22
  end
23
23
 
24
24
  User.create_table!
25
+
26
+ class HighCostUser < Sequel::Model
27
+ set_schema do
28
+ primary_key :id
29
+ varchar :password_digest
30
+ end
31
+
32
+ plugin :secure_password, :cost => 12
33
+ end
34
+
35
+ HighCostUser.create_table!
25
36
  end
26
37
 
27
38
  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.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mateusz Lenik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-08 00:00:00.000000000 Z
11
+ date: 2013-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt-ruby
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 4.0.0
33
+ version: 4.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 4.0.0
40
+ version: 4.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement