simple_token_authentication 1.5.2 → 1.6.0
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/README.md +29 -1
- data/lib/simple_token_authentication.rb +10 -2
- data/lib/simple_token_authentication/acts_as_token_authenticatable.rb +1 -1
- data/lib/simple_token_authentication/adapters/mongoid_adapter.rb +14 -0
- data/lib/simple_token_authentication/configuration.rb +1 -1
- data/lib/simple_token_authentication/token_authentication_handler.rb +5 -15
- data/lib/simple_token_authentication/version.rb +1 -1
- data/spec/configuration/header_names_option_spec.rb +4 -4
- data/spec/lib/simple_token_authentication/adapter_spec.rb +0 -2
- data/spec/lib/simple_token_authentication/adapters/mongoid_adapter_spec.rb +21 -0
- data/spec/lib/simple_token_authentication/configuration_spec.rb +2 -2
- data/spec/lib/simple_token_authentication/errors_spec.rb +8 -0
- data/spec/lib/simple_token_authentication_spec.rb +59 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/spec_for_adapter.rb +4 -0
- metadata +49 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a858d56cf65a5595155ab5b4e593d90c8c52e4b3
|
4
|
+
data.tar.gz: 48005f8c531276fe56de66bb371ad76ae61cd334
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21405a3b9a7b2728a7de067aa21aac10ab17217c1946bf4b2c980406a56e0af9b815e4f28cfe7f9136ebbfe8890e611d932ef0193a7e110dc296ce4731ff6e0a
|
7
|
+
data.tar.gz: baf60814272483318583370c68e9f21583c81929a4e5c3506cf58c609afe526e2581eaab68c21e3b8975c6928ea3cc1468ec6e03c103037503ac4d12469faaf7
|
data/README.md
CHANGED
@@ -32,6 +32,10 @@ Install [Devise][devise] with any modules you want, then add the gem to your `Ge
|
|
32
32
|
gem 'simple_token_authentication'
|
33
33
|
```
|
34
34
|
|
35
|
+
### Make models token authenticatable
|
36
|
+
|
37
|
+
#### ActiveRecord
|
38
|
+
|
35
39
|
First define which model or models will be token authenticatable (typ. `User`):
|
36
40
|
|
37
41
|
```ruby
|
@@ -61,7 +65,31 @@ rails g migration add_authentication_token_to_users authentication_token:string:
|
|
61
65
|
rake db:migrate
|
62
66
|
```
|
63
67
|
|
64
|
-
|
68
|
+
#### Mongoid
|
69
|
+
|
70
|
+
Define which model or models will be token authenticatable (typ. `User`):
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
# app/models/user.rb
|
74
|
+
|
75
|
+
class User
|
76
|
+
include Mongoid::Document
|
77
|
+
# Include default devise modules. Others available are:
|
78
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
79
|
+
devise :database_authenticatable, :registerable,
|
80
|
+
:recoverable, :rememberable, :trackable, :validatable
|
81
|
+
|
82
|
+
## Token Authenticatable
|
83
|
+
acts_as_token_authenticatable
|
84
|
+
field :authentication_token
|
85
|
+
|
86
|
+
# ...
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
### Allow controllers to handle token authentication
|
91
|
+
|
92
|
+
Finally define which controllers will handle token authentication (typ. `ApplicationController`) for which _token authenticatable_ models:
|
65
93
|
|
66
94
|
```ruby
|
67
95
|
# app/controllers/application_controller.rb
|
@@ -5,6 +5,8 @@ require 'simple_token_authentication/configuration'
|
|
5
5
|
module SimpleTokenAuthentication
|
6
6
|
extend Configuration
|
7
7
|
|
8
|
+
NoAdapterAvailableError = Class.new(LoadError)
|
9
|
+
|
8
10
|
private
|
9
11
|
|
10
12
|
def self.ensure_models_can_act_as_token_authenticatables model_adapters
|
@@ -30,12 +32,18 @@ module SimpleTokenAuthentication
|
|
30
32
|
#
|
31
33
|
# Returns an Array of available adapters
|
32
34
|
def self.load_available_adapters adapters_short_names
|
33
|
-
adapters_short_names.collect do |short_name|
|
35
|
+
available_adapters = adapters_short_names.collect do |short_name|
|
34
36
|
adapter_name = "simple_token_authentication/adapters/#{short_name}_adapter"
|
35
|
-
if require
|
37
|
+
if const_defined?(short_name.camelize) && require(adapter_name)
|
36
38
|
adapter_name.camelize.constantize
|
37
39
|
end
|
38
40
|
end
|
41
|
+
available_adapters.compact!
|
42
|
+
|
43
|
+
# stop here if no constants are defined or no adequate adapters are present
|
44
|
+
raise SimpleTokenAuthentication::NoAdapterAvailableError if available_adapters.empty?
|
45
|
+
|
46
|
+
available_adapters
|
39
47
|
end
|
40
48
|
|
41
49
|
available_model_adapters = load_available_adapters SimpleTokenAuthentication.model_adapters
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
require 'simple_token_authentication/adapter'
|
3
|
+
|
4
|
+
module SimpleTokenAuthentication
|
5
|
+
module Adapters
|
6
|
+
class MongoidAdapter
|
7
|
+
extend SimpleTokenAuthentication::Adapter
|
8
|
+
|
9
|
+
def self.base_class
|
10
|
+
::Mongoid::Document
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -12,7 +12,7 @@ module SimpleTokenAuthentication
|
|
12
12
|
@@header_names = {}
|
13
13
|
@@sign_in_token = false
|
14
14
|
@@controller_adapters = ['rails']
|
15
|
-
@@model_adapters = ['active_record']
|
15
|
+
@@model_adapters = ['active_record', 'mongoid']
|
16
16
|
|
17
17
|
# Allow the default configuration to be overwritten from initializers
|
18
18
|
def configure
|
@@ -4,7 +4,6 @@ require 'active_support/concern'
|
|
4
4
|
require 'simple_token_authentication/entities_manager'
|
5
5
|
require 'simple_token_authentication/fallback_authentication_handler'
|
6
6
|
require 'simple_token_authentication/sign_in_handler'
|
7
|
-
require 'simple_token_authentication/token_authentication_handler'
|
8
7
|
require 'simple_token_authentication/token_comparator'
|
9
8
|
|
10
9
|
module SimpleTokenAuthentication
|
@@ -23,11 +22,6 @@ module SimpleTokenAuthentication
|
|
23
22
|
private :token_comparator
|
24
23
|
private :sign_in_handler
|
25
24
|
private :find_record_from_identifier
|
26
|
-
|
27
|
-
# This is necessary to test which arguments were passed to sign_in
|
28
|
-
# from authenticate_entity_from_token!
|
29
|
-
# See https://github.com/gonzalo-bulnes/simple_token_authentication/pull/32
|
30
|
-
::ActionController::Base.send :include, Devise::Controllers::SignInOut if Rails.env.test?
|
31
25
|
end
|
32
26
|
|
33
27
|
def authenticate_entity_from_token!(entity)
|
@@ -61,11 +55,7 @@ module SimpleTokenAuthentication
|
|
61
55
|
# Rails 3 and 4 finder methods are supported,
|
62
56
|
# see https://github.com/ryanb/cancan/blob/1.6.10/lib/cancan/controller_resource.rb#L108-L111
|
63
57
|
record = nil
|
64
|
-
|
65
|
-
record = email && entity.model.find_by(email: email)
|
66
|
-
elsif entity.model.respond_to? "find_by_email"
|
67
|
-
record = email && entity.model.find_by_email(email)
|
68
|
-
end
|
58
|
+
record = email && entity.model.where(email: email).first
|
69
59
|
end
|
70
60
|
|
71
61
|
def token_comparator
|
@@ -113,13 +103,13 @@ module SimpleTokenAuthentication
|
|
113
103
|
|
114
104
|
class_eval do
|
115
105
|
define_method method_name.to_sym do
|
116
|
-
lambda { |
|
106
|
+
lambda { |_entity| authenticate_entity_from_token!(_entity) }.call(entity)
|
117
107
|
end
|
118
108
|
|
119
109
|
define_method method_name_bang.to_sym do
|
120
|
-
lambda do |
|
121
|
-
authenticate_entity_from_token!(
|
122
|
-
authenticate_entity_from_fallback!(
|
110
|
+
lambda do |_entity|
|
111
|
+
authenticate_entity_from_token!(_entity)
|
112
|
+
authenticate_entity_from_fallback!(_entity, fallback_authentication_handler)
|
123
113
|
end.call(entity)
|
124
114
|
end
|
125
115
|
end
|
@@ -18,14 +18,14 @@ describe 'Simple Token Authentication' do
|
|
18
18
|
# given one *c*orrect record (which is supposed to get signed in)
|
19
19
|
@charles_record = double()
|
20
20
|
[user, admin].each do |model|
|
21
|
-
allow(model).to receive(:
|
21
|
+
allow(model).to receive(:where).with(email: 'charles@example.com').and_return([@charles_record])
|
22
22
|
end
|
23
23
|
allow(@charles_record).to receive(:authentication_token).and_return('ch4rlEs_toKeN')
|
24
24
|
|
25
25
|
# and one *w*rong record (which should not be signed in)
|
26
26
|
@waldo_record = double()
|
27
27
|
[user, admin].each do |model|
|
28
|
-
allow(model).to receive(:
|
28
|
+
allow(model).to receive(:where).with(email: 'waldo@example.com').and_return([@waldo_record])
|
29
29
|
end
|
30
30
|
allow(@waldo_record).to receive(:authentication_token).and_return('w4LdO_toKeN')
|
31
31
|
|
@@ -394,12 +394,12 @@ describe 'Simple Token Authentication' do
|
|
394
394
|
|
395
395
|
# given one *c*orrect record (which is supposed to get signed in)
|
396
396
|
@charles_record = double()
|
397
|
-
allow(user).to receive(:
|
397
|
+
allow(user).to receive(:where).with(email: 'charles@example.com').and_return([@charles_record])
|
398
398
|
allow(@charles_record).to receive(:authentication_token).and_return('ch4rlEs_toKeN')
|
399
399
|
|
400
400
|
# and one *w*rong record (which should not be signed in)
|
401
401
|
@waldo_record = double()
|
402
|
-
allow(user).to receive(:
|
402
|
+
allow(user).to receive(:where).with(email: 'waldo@example.com').and_return([@waldo_record])
|
403
403
|
allow(@waldo_record).to receive(:authentication_token).and_return('w4LdO_toKeN')
|
404
404
|
|
405
405
|
# given a controller class which acts as token authentication handler
|
@@ -10,8 +10,6 @@ describe 'Any class which extends SimpleTokenAuthentication::Adapter' do
|
|
10
10
|
@subject = define_dummy_class_which_extends(SimpleTokenAuthentication::Adapter)
|
11
11
|
end
|
12
12
|
|
13
|
-
it_behaves_like 'an adapter'
|
14
|
-
|
15
13
|
describe '.base_class' do
|
16
14
|
|
17
15
|
it 'raises an error if not overwritten', public: true do
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'simple_token_authentication/adapters/mongoid_adapter'
|
3
|
+
|
4
|
+
describe 'SimpleTokenAuthentication::Adapters::MongoidAdapter' do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
stub_const('Mongoid', Module.new)
|
8
|
+
stub_const('Mongoid::Document', double())
|
9
|
+
|
10
|
+
@subject = SimpleTokenAuthentication::Adapters::MongoidAdapter
|
11
|
+
end
|
12
|
+
|
13
|
+
it_behaves_like 'an adapter'
|
14
|
+
|
15
|
+
describe '.base_class' do
|
16
|
+
|
17
|
+
it 'is Mongoid::Document', private: true do
|
18
|
+
expect(@subject.base_class).to eq Mongoid::Document
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -29,8 +29,8 @@ describe SimpleTokenAuthentication::Configuration do
|
|
29
29
|
|
30
30
|
it_behaves_like 'a configuration option', 'model_adapters'
|
31
31
|
|
32
|
-
it "defauts to ['active_record']", private: true do
|
33
|
-
expect(@subject.model_adapters).to eq ['active_record']
|
32
|
+
it "defauts to ['active_record', 'mongoid']", private: true do
|
33
|
+
expect(@subject.model_adapters).to eq ['active_record', 'mongoid']
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -48,6 +48,65 @@ describe SimpleTokenAuthentication do
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
context 'when Mongoid is available' do
|
52
|
+
|
53
|
+
before(:each) do
|
54
|
+
stub_const('Mongoid', Module.new)
|
55
|
+
stub_const('Mongoid::Document', Class.new)
|
56
|
+
|
57
|
+
# define a dummy Mongoid adapter
|
58
|
+
dummy_mongoid_adapter = double()
|
59
|
+
allow(dummy_mongoid_adapter).to receive(:base_class).and_return(Mongoid::Document)
|
60
|
+
stub_const('SimpleTokenAuthentication::Adapters::DummyMongoidAdapter',
|
61
|
+
dummy_mongoid_adapter)
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#ensure_models_can_act_as_token_authenticatables' do
|
65
|
+
|
66
|
+
before(:each) do
|
67
|
+
class SimpleTokenAuthentication::DummyModel < Mongoid::Document; end
|
68
|
+
@dummy_model = SimpleTokenAuthentication::DummyModel
|
69
|
+
|
70
|
+
expect(@dummy_model.new).to be_instance_of SimpleTokenAuthentication::DummyModel
|
71
|
+
expect(@dummy_model.new).to be_kind_of Mongoid::Document
|
72
|
+
end
|
73
|
+
|
74
|
+
after(:each) do
|
75
|
+
SimpleTokenAuthentication.send(:remove_const, :DummyModel)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'allows any kind of Mongoid::Document to act as token authenticatable', private: true do
|
79
|
+
expect(@dummy_model).not_to respond_to :acts_as_token_authenticatable
|
80
|
+
|
81
|
+
subject.ensure_models_can_act_as_token_authenticatables [
|
82
|
+
SimpleTokenAuthentication::Adapters::DummyMongoidAdapter]
|
83
|
+
|
84
|
+
expect(@dummy_model).to respond_to :acts_as_token_authenticatable
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when no ORM, ODM or OxM is available' do
|
90
|
+
|
91
|
+
before(:each) do
|
92
|
+
stub_const('ActiveRecord', Module.new)
|
93
|
+
stub_const('Mongoid', Module.new)
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#load_available_adapters' do
|
97
|
+
|
98
|
+
it 'raises NoAdapterAvailableError', private: true do
|
99
|
+
allow(subject).to receive(:require).and_return(true)
|
100
|
+
hide_const('ActiveRecord')
|
101
|
+
hide_const('Mongoid')
|
102
|
+
|
103
|
+
expect do
|
104
|
+
subject.load_available_adapters SimpleTokenAuthentication.model_adapters
|
105
|
+
end.to raise_error SimpleTokenAuthentication::NoAdapterAvailableError
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
51
110
|
context 'when ActionController::Base is available' do
|
52
111
|
|
53
112
|
before(:each) do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_token_authentication
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gonzalo Bulnes Guilpain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: actionmailer
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '5'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: actionpack
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
@@ -92,6 +92,46 @@ dependencies:
|
|
92
92
|
- - "~>"
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0.4'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: activerecord
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 3.2.6
|
102
|
+
- - "<"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '5'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 3.2.6
|
112
|
+
- - "<"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '5'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: mongoid
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 3.1.0
|
122
|
+
- - "<"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '5'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 3.1.0
|
132
|
+
- - "<"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '5'
|
95
135
|
description:
|
96
136
|
email:
|
97
137
|
- gon.bulnes@gmail.com
|
@@ -108,6 +148,7 @@ files:
|
|
108
148
|
- lib/simple_token_authentication/acts_as_token_authentication_handler.rb
|
109
149
|
- lib/simple_token_authentication/adapter.rb
|
110
150
|
- lib/simple_token_authentication/adapters/active_record_adapter.rb
|
151
|
+
- lib/simple_token_authentication/adapters/mongoid_adapter.rb
|
111
152
|
- lib/simple_token_authentication/adapters/rails_adapter.rb
|
112
153
|
- lib/simple_token_authentication/configuration.rb
|
113
154
|
- lib/simple_token_authentication/entities_manager.rb
|
@@ -127,10 +168,12 @@ files:
|
|
127
168
|
- spec/lib/simple_token_authentication/acts_as_token_authentication_handler_spec.rb
|
128
169
|
- spec/lib/simple_token_authentication/adapter_spec.rb
|
129
170
|
- spec/lib/simple_token_authentication/adapters/active_record_adapter_spec.rb
|
171
|
+
- spec/lib/simple_token_authentication/adapters/mongoid_adapter_spec.rb
|
130
172
|
- spec/lib/simple_token_authentication/adapters/rails_adapter_spec.rb
|
131
173
|
- spec/lib/simple_token_authentication/configuration_spec.rb
|
132
174
|
- spec/lib/simple_token_authentication/entities_manager_spec.rb
|
133
175
|
- spec/lib/simple_token_authentication/entity_spec.rb
|
176
|
+
- spec/lib/simple_token_authentication/errors_spec.rb
|
134
177
|
- spec/lib/simple_token_authentication/fallback_authentication_handler_spec.rb
|
135
178
|
- spec/lib/simple_token_authentication/sign_in_handler_spec.rb
|
136
179
|
- spec/lib/simple_token_authentication/token_authentication_handler_spec.rb
|
@@ -182,7 +225,9 @@ test_files:
|
|
182
225
|
- spec/lib/simple_token_authentication/acts_as_token_authenticatable_spec.rb
|
183
226
|
- spec/lib/simple_token_authentication/acts_as_token_authentication_handler_spec.rb
|
184
227
|
- spec/lib/simple_token_authentication/token_authentication_handler_spec.rb
|
228
|
+
- spec/lib/simple_token_authentication/errors_spec.rb
|
185
229
|
- spec/lib/simple_token_authentication/adapters/active_record_adapter_spec.rb
|
230
|
+
- spec/lib/simple_token_authentication/adapters/mongoid_adapter_spec.rb
|
186
231
|
- spec/lib/simple_token_authentication/adapters/rails_adapter_spec.rb
|
187
232
|
- spec/lib/simple_token_authentication/entity_spec.rb
|
188
233
|
- spec/lib/simple_token_authentication/adapter_spec.rb
|