devise-token_authenticatable 0.4.0 → 0.4.6

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: ae71266ed6ad6f67ffed537f164c3e8624195f49
4
- data.tar.gz: 0bf264921879b3bba8a5a09e9aaa5a000c45e5fe
3
+ metadata.gz: 1a68ab4f5e9ea350298a644299de878c50077a96
4
+ data.tar.gz: c110e22709365cd6f0861b8703b224f0db7857a4
5
5
  SHA512:
6
- metadata.gz: 2874526da3ca18522105bb9d23e324445fa3e934e0957c1e62c4329dc8f66e5562c1889b37f627f654564d8f6f14f3aa43cc17b08ce658ccf28715d026871b5d
7
- data.tar.gz: 6f1b13a7988f65e044ee58c9e51b3908358f55ea210762879fa2f37708cd37bab5b2aa46435db34ad8080a58e597dbc0ad9897e2a45540b81b5caf4cbd7843b1
6
+ metadata.gz: dbb469bf9f93baa80bc069d2417c1cdca7d2d5ca975085d6b3a963d52cdcb7b99f3edb0b9e7ab8eb7e32e595b86024a23720a518469664023a12fa5f78e9b6e7
7
+ data.tar.gz: af936ee72ce7019d43cb86f70eeed9c6d11ff0b11cd8a4c825d3ade79112033230a1580039530dbaa23900cbf6c5938c5a2697992f3f295e25976397f32b5bc5
@@ -6,6 +6,9 @@ rvm:
6
6
  - 2.2.0
7
7
  - jruby-19mode
8
8
 
9
+ before_install:
10
+ - gem install bundler -v 1.11
11
+
9
12
  env:
10
13
  global:
11
14
  - "JRUBY_OPTS=-Xcext.enabled=true"
data/README.md CHANGED
@@ -28,32 +28,42 @@ Or install it yourself as:
28
28
  `~> 0.2` | `~> 3.3.0`
29
29
  `~> 0.3` | `~> 3.4.0`
30
30
  `~> 0.4` | `~> 3.5.0`
31
+ `~> 0.4.6` | `~> 3.5.2`
31
32
 
32
33
  ## Usage
33
34
 
34
35
  Add `:token_authenticatable` to your devise model:
35
36
 
36
- class User < ActiveRecord::Base
37
- devise :database_authenticatable, :token_authenticatable
38
- end
37
+ ```ruby
38
+ class User < ActiveRecord::Base
39
+ devise :database_authenticatable, :token_authenticatable
40
+ end
41
+ ```
39
42
 
40
43
  ## Configuration
41
44
 
42
45
  This gem can be configured as shown in the following:
43
46
 
44
- Devise::TokenAuthenticatable.setup do |config|
45
- # set the authentication key name used by this module,
46
- # defaults to :auth_token
47
- config.token_authentication_key = :other_key_name
48
-
49
- # enable reset of the authentication token before the model is saved,
50
- # defaults to false
51
- config.should_reset_authentication_token = true
52
-
53
- # enables the setting of the authentication token - if not already - before the model is saved,
54
- # defaults to false
55
- config.should_ensure_authentication_token = true
56
- end
47
+ ```ruby
48
+ Devise::TokenAuthenticatable.setup do |config|
49
+ # enables the expiration of a token after a session timeout,
50
+ # only useful in connection with the devise timeoutable module,
51
+ # defaults to false
52
+ config.expire_auth_token_on_timeout = true
53
+
54
+ # set the authentication key name used by this module,
55
+ # defaults to :auth_token
56
+ config.token_authentication_key = :other_key_name
57
+
58
+ # enable reset of the authentication token before the model is saved,
59
+ # defaults to false
60
+ config.should_reset_authentication_token = true
61
+
62
+ # enables the setting of the authentication token - if not already - before the model is saved,
63
+ # defaults to false
64
+ config.should_ensure_authentication_token = true
65
+ end
66
+ ```
57
67
 
58
68
  ## Documentation
59
69
 
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Devise::TokenAuthenticatable::VERSION.dup
9
9
  spec.platform = Gem::Platform::RUBY
10
10
  spec.authors = ["Sebastian Oelke"]
11
- spec.email = ["dev@sohleeatsworld.de"]
11
+ spec.email = ["dev@soelke.de"]
12
12
  spec.description = %q{This gem provides the extracted Token Authenticatable module of devise.
13
13
  It enables the user to sign in via an authentication token. This token
14
14
  can be given via a query string or HTTP Basic Authentication.}
@@ -22,14 +22,14 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
 
25
- spec.add_dependency "devise", "~> 3.5.0"
25
+ spec.add_dependency "devise", ">= 3.5.2", "< 4.0.0"
26
26
 
27
- spec.add_development_dependency "rails", "~> 4.1.0"
28
- spec.add_development_dependency "rspec-rails", "~> 3.0.2"
29
- spec.add_development_dependency "pry", "~> 0.10.0"
30
- spec.add_development_dependency "factory_girl_rails", "~> 4.4.0"
31
- spec.add_development_dependency "timecop", "~> 0.7.0"
32
- spec.add_development_dependency "bundler", "~> 1.6"
27
+ spec.add_development_dependency "rails", "~> 4.1"
28
+ spec.add_development_dependency "rspec-rails", "~> 3.0"
29
+ spec.add_development_dependency "pry", "~> 0.10"
30
+ spec.add_development_dependency "factory_girl_rails", "~> 4.4"
31
+ spec.add_development_dependency "timecop", "~> 0.7"
32
+ spec.add_development_dependency "bundler", "~> 1.11"
33
33
 
34
34
  # Fix database connection with sqlite3 and jruby
35
35
  if RUBY_ENGINE == 'ruby'
@@ -3,6 +3,13 @@ require "devise/token_authenticatable/strategy"
3
3
  module Devise
4
4
  module TokenAuthenticatable
5
5
 
6
+ # Authentication token expiration on timeout
7
+ #
8
+ # This option is only used if your model uses the Devise
9
+ # :timeoutable module.
10
+ mattr_accessor :expire_auth_token_on_timeout
11
+ @@expire_auth_token_on_timeout = false
12
+
6
13
  # Authentication token params key name of choice. E.g. /users/sign_in?some_key=...
7
14
  mattr_accessor :token_authentication_key
8
15
  @@token_authentication_key = :auth_token
@@ -0,0 +1,34 @@
1
+ # Each time a record is set we check whether its session has already timed out
2
+ # or not, based on last request time. If so and :expire_auth_token_on_timeout
3
+ # is set to true, the record's auth token is reset.
4
+
5
+ # This is a backport of the functionality of expire_auth_token_on_timeout that
6
+ # has been removed from devise in version 3.5.2.
7
+ #
8
+ # For the original version cf.
9
+ # https://github.com/plataformatec/devise/blob/v3.5.1/lib/devise/hooks/timeoutable.rb.
10
+
11
+ Warden::Manager.after_set_user do |record, warden, options|
12
+ scope = options[:scope]
13
+ env = warden.request.env
14
+
15
+ if record && record.respond_to?(:timedout?) &&
16
+ warden.authenticated?(scope) &&
17
+ options[:store] != false &&
18
+ !env['devise.skip_timeoutable']
19
+
20
+ last_request_at = warden.session(scope)['last_request_at']
21
+
22
+ if last_request_at.is_a? Integer
23
+ last_request_at = Time.at(last_request_at).utc
24
+ elsif last_request_at.is_a? String
25
+ last_request_at = Time.parse(last_request_at)
26
+ end
27
+
28
+ if record.timedout?(last_request_at) && !env['devise.skip_timeout']
29
+ if record.respond_to?(:expire_auth_token_on_timeout) && record.expire_auth_token_on_timeout
30
+ record.reset_authentication_token!
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,5 @@
1
+ require 'devise/token_authenticatable/hooks/timeoutable'
2
+
1
3
  module Devise
2
4
  module Models
3
5
  # The +TokenAuthenticatable+ module is responsible for generating an authentication token and
@@ -27,6 +29,8 @@ module Devise
27
29
  included do
28
30
  before_save :reset_authentication_token_before_save
29
31
  before_save :ensure_authentication_token_before_save
32
+
33
+ attr_writer :expire_auth_token_on_timeout
30
34
  end
31
35
 
32
36
  module ClassMethods
@@ -48,8 +52,6 @@ module Devise
48
52
  end
49
53
  end
50
54
 
51
- Devise::Models.config(self, :expire_auth_token_on_timeout)
52
-
53
55
  end
54
56
 
55
57
  def self.required_fields(klass)
@@ -82,7 +84,11 @@ module Devise
82
84
  end
83
85
 
84
86
  def expire_auth_token_on_timeout
85
- self.class.expire_auth_token_on_timeout
87
+ if @expire_auth_token_on_timeout
88
+ @expire_auth_token_on_timeout
89
+ else
90
+ Devise::TokenAuthenticatable.expire_auth_token_on_timeout
91
+ end
86
92
  end
87
93
 
88
94
  private
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module TokenAuthenticatable
3
- VERSION = "0.4.0".freeze
3
+ VERSION = "0.4.6".freeze
4
4
  end
5
5
  end
@@ -39,6 +39,37 @@ shared_examples "token authenticatable" do
39
39
  end
40
40
  end
41
41
 
42
+ describe "#expire_auth_token_on_timeout" do
43
+ let(:entity) { create(described_class.name.underscore.to_sym) }
44
+
45
+ context "enabling expire_auth_token_on_timeout first" do
46
+
47
+ before :each do
48
+ entity.expire_auth_token_on_timeout = true
49
+ end
50
+
51
+ it "should be true" do
52
+ expect(entity.expire_auth_token_on_timeout).to eq true
53
+ end
54
+
55
+ it "should not use the default" do
56
+ expect(Devise::TokenAuthenticatable).to_not receive(:expire_auth_token_on_timeout)
57
+
58
+ entity.expire_auth_token_on_timeout
59
+ end
60
+
61
+ end
62
+
63
+ context "not enabling expire_auth_token_on_timeout" do
64
+
65
+ it "should use the default" do
66
+ expect(Devise::TokenAuthenticatable).to receive(:expire_auth_token_on_timeout)
67
+
68
+ entity.expire_auth_token_on_timeout
69
+ end
70
+
71
+ end
72
+ end
42
73
  end
43
74
 
44
75
  context "class methods" do
@@ -137,8 +137,8 @@ describe Devise::Strategies::TokenAuthenticatable do
137
137
  context "on sign in" do
138
138
 
139
139
  it 'should authenticate the user' do
140
- swap Devise::TokenAuthenticatable, token_authentication_key: :secret_token do
141
- swap Devise, expire_auth_token_on_timeout: true, timeout_in: (-1).minute do
140
+ swap Devise::TokenAuthenticatable, token_authentication_key: :secret_token, expire_auth_token_on_timeout: true do
141
+ swap Devise, timeout_in: (-1).minute do
142
142
  sign_in_as_new_user_with_token
143
143
  expect(warden).to be_authenticated(:user)
144
144
  end
@@ -150,8 +150,8 @@ describe Devise::Strategies::TokenAuthenticatable do
150
150
  context "on re-sign in" do
151
151
 
152
152
  it 'should not authenticate the user' do
153
- swap Devise::TokenAuthenticatable, token_authentication_key: :secret_token do
154
- swap Devise, expire_auth_token_on_timeout: true, timeout_in: (-1).minute do
153
+ swap Devise::TokenAuthenticatable, token_authentication_key: :secret_token, expire_auth_token_on_timeout: true do
154
+ swap Devise, timeout_in: (-1).minute do
155
155
  user = sign_in_as_new_user_with_token
156
156
  token = user.authentication_token
157
157
 
@@ -162,8 +162,8 @@ describe Devise::Strategies::TokenAuthenticatable do
162
162
  end
163
163
 
164
164
  it 'should reset the authentication token' do
165
- swap Devise::TokenAuthenticatable, token_authentication_key: :secret_token do
166
- swap Devise, expire_auth_token_on_timeout: true, timeout_in: (-1).minute do
165
+ swap Devise::TokenAuthenticatable, token_authentication_key: :secret_token, expire_auth_token_on_timeout: true do
166
+ swap Devise, timeout_in: (-1).minute do
167
167
  user = sign_in_as_new_user_with_token
168
168
  token = user.authentication_token
169
169
 
@@ -2,6 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  describe Devise::TokenAuthenticatable do
4
4
 
5
+ context "configuring the expire_auth_token_on_timeout" do
6
+ let(:expire_auth_token_on_timeout) { true }
7
+
8
+ it "should set the configuration" do
9
+ expect {
10
+ Devise::TokenAuthenticatable.setup do |config|
11
+ config.expire_auth_token_on_timeout = expire_auth_token_on_timeout
12
+ end
13
+ }.to change {
14
+ Devise::TokenAuthenticatable.expire_auth_token_on_timeout
15
+ }.from(false).to(expire_auth_token_on_timeout)
16
+ end
17
+ end
18
+
5
19
  context "configuring the token_authentication_key" do
6
20
  let(:new_key) { :other_key }
7
21
 
metadata CHANGED
@@ -1,113 +1,119 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-token_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Oelke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-05 00:00:00.000000000 Z
11
+ date: 2016-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.5.2
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 3.5.0
22
+ version: 4.0.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.5.2
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: 3.5.0
32
+ version: 4.0.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rails
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: 4.1.0
39
+ version: '4.1'
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: 4.1.0
46
+ version: '4.1'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rspec-rails
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: 3.0.2
53
+ version: '3.0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: 3.0.2
60
+ version: '3.0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: pry
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: 0.10.0
67
+ version: '0.10'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: 0.10.0
74
+ version: '0.10'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: factory_girl_rails
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: 4.4.0
81
+ version: '4.4'
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: 4.4.0
88
+ version: '4.4'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: timecop
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: 0.7.0
95
+ version: '0.7'
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
100
  - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: 0.7.0
102
+ version: '0.7'
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: bundler
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
107
  - - "~>"
102
108
  - !ruby/object:Gem::Version
103
- version: '1.6'
109
+ version: '1.11'
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
114
  - - "~>"
109
115
  - !ruby/object:Gem::Version
110
- version: '1.6'
116
+ version: '1.11'
111
117
  - !ruby/object:Gem::Dependency
112
118
  name: sqlite3
113
119
  requirement: !ruby/object:Gem::Requirement
@@ -127,7 +133,7 @@ description: |-
127
133
  It enables the user to sign in via an authentication token. This token
128
134
  can be given via a query string or HTTP Basic Authentication.
129
135
  email:
130
- - dev@sohleeatsworld.de
136
+ - dev@soelke.de
131
137
  executables: []
132
138
  extensions: []
133
139
  extra_rdoc_files: []
@@ -141,6 +147,7 @@ files:
141
147
  - devise-token_authenticatable.gemspec
142
148
  - lib/devise-token_authenticatable.rb
143
149
  - lib/devise/token_authenticatable.rb
150
+ - lib/devise/token_authenticatable/hooks/timeoutable.rb
144
151
  - lib/devise/token_authenticatable/model.rb
145
152
  - lib/devise/token_authenticatable/strategy.rb
146
153
  - lib/devise/token_authenticatable/version.rb