has_secure_token 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 779e9aa5c015cf598382638c8bf438f5765a4063
4
- data.tar.gz: 708da57acbbbe47d93240d2edb3ca153f4f8c558
3
+ metadata.gz: 1148bcff41e4dab40603ae600aae8129d4fd4dab
4
+ data.tar.gz: 1686f165bdc43dba2030e09a5d72c847763b718c
5
5
  SHA512:
6
- metadata.gz: 38f2c9928827176cbc83d04620994a86de70ffcd894f2c3c53b43f8b35f5cb7f9cf8cdc87208bcb237f4774e08a1a03572a46bb4b2b867deb546188fd87796c6
7
- data.tar.gz: 261107656b335bca54aa0089f0c1bec76e632c38d5323219f9d4f0396939774625aca41b7937947235dd478e57b5a2be13f1914c44455c31ed36b76aa759ad4c
6
+ metadata.gz: b0f969596f567eefe82d69bac7a2d5258100018f904cef879c3c4fa65690d7eddc380e7cb1c6532e380da2c2f8d6972703eb12e85693798a8c9cb5bb34a80601
7
+ data.tar.gz: 7a414116ae3415f7121fe401256e23a0997d6ad7ad38b9d0b1ec6ac7e7b8af1c02ce4b2222cee86eae9f4b234cdbb74cea7da50b252aa761e1ce066226a5669f
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  Add this line to your application's Gemfile:
11
11
 
12
- gem 'has_secure_password'
12
+ gem 'has_secure_token'
13
13
 
14
14
  And then execute:
15
15
 
@@ -17,12 +17,12 @@ And then execute:
17
17
 
18
18
  Or install it yourself as:
19
19
 
20
- $ gem install has_secure_password
20
+ $ gem install has_secure_token
21
21
 
22
22
  ##Setting your Model
23
23
 
24
24
  ```ruby
25
- class User
25
+ class User < ActiveRecord::Base
26
26
  has_secure_token :token1, :token2
27
27
  end
28
28
 
@@ -33,7 +33,7 @@ user.token2 => "226dd46af6be78953bde1641622497a8"
33
33
 
34
34
  ## Contributing
35
35
 
36
- 1. Fork it ( https://github.com/[my-github-username]/has_secure_password/fork )
36
+ 1. Fork it ( https://github.com/robertomiranda/has_secure_password/fork )
37
37
  2. Create your feature branch (`git checkout -b my-new-feature`)
38
38
  3. Commit your changes (`git commit -am 'Add some feature'`)
39
39
  4. Push to the branch (`git push origin my-new-feature`)
@@ -4,22 +4,50 @@ require 'securerandom'
4
4
  module HasSecureToken
5
5
  extend ActiveSupport::Concern
6
6
  module ClassMethods
7
- def has_secure_token(*attrs)
7
+ # Example using Active Record (which automatically includes ActiveModel::SecurePassword):
8
+ #
9
+ # # Schema: User(auth_token:string, invitation_token:string)
10
+ # class User < ActiveRecord::Base
11
+ # has_secure_token :auth_token, :invitation_token
12
+ # end
13
+ #
14
+ # user = User.new
15
+ # user.save
16
+ # user.auth_token # => "44539a6a59835a4ee9d7b112"
17
+ # user.invitation_token # => "226dd46af6be78953bde1648"
18
+ # user.regenerate_auth_token # => true
19
+ # user.regenerate_invitation_token # => true
20
+ def has_secure_token(*args)
21
+ # Load securerandom only when has_secure_key is used.
22
+ require 'securerandom'
8
23
  include InstanceMethodsOnActivation
9
- cattr_accessor :token_columns
10
- self.token_columns = attrs
11
- before_create :_generate_token
24
+ cattr_accessor :token_columns, :options
25
+ options = args.extract_options!
26
+
27
+ key_length = options.fetch(:key_length, 24)
28
+ bytes = (key_length / 2.0).ceil
29
+
30
+ args.each do |attribute|
31
+ define_method("regenerate_#{attribute}!") do
32
+ send(:generate_unique_secure_token, attribute, bytes, key_length)
33
+ save
34
+ end
35
+ end
36
+
37
+ before_create do
38
+ args.each do |attribute|
39
+ self.generate_unique_secure_token(attribute, bytes, key_length)
40
+ end
41
+ end
12
42
  end
13
43
  end
14
44
 
15
45
  module InstanceMethodsOnActivation
16
- def _generate_token
17
- self.class.token_columns.each do |attribute|
18
- self.send("#{attribute}=", loop do
19
- random_token = SecureRandom.hex
20
- break random_token unless self.class.exists?(attribute => random_token)
21
- end)
22
- end
46
+ def generate_unique_secure_token(attribute, bytes, key_length)
47
+ self.send("#{attribute}=", loop do
48
+ random_token = SecureRandom.hex(bytes)[0..key_length]
49
+ break random_token unless self.class.exists?(attribute => random_token)
50
+ end)
23
51
  end
24
52
  end
25
53
  end
@@ -1,3 +1,3 @@
1
1
  module HasSecureToken
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -4,10 +4,34 @@ class HasSecureTokenTest < MiniTest::Unit::TestCase
4
4
  def setup
5
5
  @user = User.new
6
6
  @user.run_callbacks :create
7
+ @visitor = Visitor.new
8
+ @visitor.run_callbacks :create
7
9
  end
8
10
 
9
11
  def test_assing_token_values
10
12
  assert_not_nil @user.auth_token
11
13
  assert_not_nil @user.invitation_token
12
14
  end
15
+
16
+ def test_default_length_of_secure_token_is_set_to_24
17
+ assert_equal 24, @user.auth_token.length
18
+ assert_equal 24, @user.invitation_token.length
19
+ end
20
+
21
+ def test_create_record_with_customised_length_of_secure_token
22
+ assert_equal 30, @visitor.auth_token.length
23
+ assert_equal 30, @visitor.invitation_token.length
24
+ end
25
+
26
+ def test_regenerate_the_secure_key_for_the_attribute
27
+ old_auth_token = @user.auth_token
28
+ old_invitation_token = @user.invitation_token
29
+ @user.regenerate_auth_token!
30
+ @user.regenerate_invitation_token!
31
+
32
+ assert @user.auth_token != old_auth_token
33
+ assert @user.invitation_token != old_invitation_token
34
+ assert_equal 24, @user.auth_token.length
35
+ assert_equal 24, @user.invitation_token.length
36
+ end
13
37
  end
data/test/models/user.rb CHANGED
@@ -11,4 +11,8 @@ class User
11
11
  def self.exists?(attrs)
12
12
  false
13
13
  end
14
+
15
+ def save
16
+ true
17
+ end
14
18
  end
@@ -0,0 +1,15 @@
1
+ class Visitor
2
+ extend ActiveModel::Callbacks
3
+ include ActiveModel::SecurePassword
4
+ include HasSecureToken
5
+
6
+ define_model_callbacks :create
7
+
8
+ has_secure_token :auth_token, :invitation_token, key_length: 30
9
+
10
+ attr_accessor :auth_token, :invitation_token
11
+
12
+ def self.exists?(attrs)
13
+ false
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_secure_token
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Miranda Altamar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-02 00:00:00.000000000 Z
11
+ date: 2014-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -84,6 +84,7 @@ files:
84
84
  - lib/has_secure_token/version.rb
85
85
  - test/has_secure_password_test.rb
86
86
  - test/models/user.rb
87
+ - test/models/visitor.rb
87
88
  - test/test_helper.rb
88
89
  homepage: https://github.com/robertomiranda/has_secure_token
89
90
  licenses:
@@ -112,4 +113,5 @@ summary: Create uniques random tokens for any model in ruby on rails.
112
113
  test_files:
113
114
  - test/has_secure_password_test.rb
114
115
  - test/models/user.rb
116
+ - test/models/visitor.rb
115
117
  - test/test_helper.rb