solidus_jwt 0.1.0 → 1.2.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +35 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/CODEOWNERS +4 -0
  5. data/.github/stale.yml +17 -0
  6. data/.gitignore +19 -0
  7. data/.rspec +1 -0
  8. data/.rubocop.yml +16 -0
  9. data/.ruby-gemset +1 -0
  10. data/.ruby-version +1 -0
  11. data/Gemfile +33 -0
  12. data/README.md +71 -2
  13. data/Rakefile +4 -28
  14. data/_config.yml +1 -0
  15. data/app/decorators/controllers/solidus_jwt/spree/api/base_controller_decorator.rb +41 -0
  16. data/app/decorators/models/solidus_jwt/spree/user_decorator.rb +58 -0
  17. data/app/models/solidus_jwt/base_record.rb +13 -0
  18. data/app/models/solidus_jwt/token.rb +63 -0
  19. data/bin/console +17 -0
  20. data/bin/r +9 -0
  21. data/bin/rails +8 -0
  22. data/bin/rails-engine +15 -0
  23. data/bin/rails-sandbox +17 -0
  24. data/bin/rake +7 -0
  25. data/bin/sandbox +84 -0
  26. data/bin/sandbox_rails +9 -0
  27. data/bin/setup +8 -0
  28. data/config/locales/en.yml +2 -1
  29. data/config/routes.rb +3 -0
  30. data/db/migrate/20190222220038_create_solidus_jwt_tokens.rb +14 -0
  31. data/db/migrate/20191212083655_add_foreign_key_to_users_table.rb +7 -0
  32. data/lib/controllers/api/spree/api/oauths_controller.rb +47 -0
  33. data/lib/generators/solidus_jwt/install/install_generator.rb +3 -11
  34. data/lib/solidus_jwt.rb +8 -0
  35. data/lib/solidus_jwt/concerns/decodeable.rb +7 -1
  36. data/lib/solidus_jwt/concerns/encodeable.rb +14 -2
  37. data/lib/solidus_jwt/config.rb +2 -0
  38. data/lib/solidus_jwt/devise_strategies/base.rb +25 -0
  39. data/lib/solidus_jwt/devise_strategies/password.rb +46 -0
  40. data/lib/solidus_jwt/devise_strategies/refresh_token.rb +48 -0
  41. data/lib/solidus_jwt/distributor/devise.rb +3 -1
  42. data/lib/solidus_jwt/engine.rb +8 -12
  43. data/lib/solidus_jwt/factories.rb +13 -0
  44. data/lib/solidus_jwt/preferences.rb +8 -0
  45. data/lib/solidus_jwt/version.rb +3 -9
  46. data/solidus_jwt.gemspec +38 -0
  47. data/spec/lib/solidus_jwt/concerns/decodeable_spec.rb +0 -0
  48. data/spec/lib/solidus_jwt/concerns/encodeable_spec.rb +0 -0
  49. data/spec/lib/solidus_jwt/config_spec.rb +7 -0
  50. data/spec/lib/solidus_jwt/devise_strategies/password_spec.rb +78 -0
  51. data/spec/lib/solidus_jwt/devise_strategies/refresh_token_spec.rb +74 -0
  52. data/spec/lib/solidus_jwt/preferences_spec.rb +39 -0
  53. data/spec/lib/solidus_jwt_spec.rb +8 -0
  54. data/spec/models/solidus_jwt/token_spec.rb +43 -0
  55. data/spec/requests/spree/api/json_web_tokens_spec.rb +77 -0
  56. data/spec/requests/spree/api/oauths_spec.rb +122 -0
  57. data/spec/spec_helper.rb +26 -0
  58. data/spec/support/shared_examples/decodeable_examples.rb +23 -0
  59. data/spec/support/shared_examples/encodeable_examples.rb +29 -0
  60. metadata +86 -222
  61. data/app/assets/javascripts/spree/backend/solidus_jwt.js +0 -2
  62. data/app/assets/javascripts/spree/frontend/solidus_jwt.js +0 -2
  63. data/app/assets/stylesheets/spree/backend/solidus_jwt.css +0 -4
  64. data/app/assets/stylesheets/spree/frontend/solidus_jwt.css +0 -4
  65. data/app/controllers/spree/api/base_controller/json_web_tokens.rb +0 -22
  66. data/app/controllers/spree/api/base_controller_decorator.rb +0 -17
  67. data/app/models/spree/user_decorator.rb +0 -30
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'spree/testing_support/factories/user_factory'
5
+
6
+ RSpec.describe 'SolidusJwt Authentication', type: :request do
7
+ let(:params) do
8
+ { token: token }
9
+ end
10
+
11
+ let(:token) { nil }
12
+ let(:user) { FactoryBot.create(:user, spree_api_key: 'secret') }
13
+
14
+ it 'fails if user visits api without authenticating' do
15
+ get spree.api_user_path(user.id)
16
+ expect(response.status).to be(401)
17
+ end
18
+
19
+ context 'when jwt fails to decode' do
20
+ let(:token) { 'abc.123.efg' }
21
+
22
+ it 'renders invalid_api_key' do
23
+ get spree.api_user_path(user.id), params: params
24
+
25
+ expect(response.status).to be(401)
26
+ expect(response.body).to include('Invalid API key')
27
+ end
28
+ end
29
+
30
+ context 'when spree api key is allowed' do
31
+ context 'when spree api key is present' do
32
+ let(:token) { user.spree_api_key }
33
+
34
+ it 'passes authentication' do
35
+ get spree.api_user_path(user.id), params: params
36
+ expect(response.status).to be(200)
37
+ end
38
+ end
39
+
40
+ context 'when json web token is used' do
41
+ let(:token) { user.generate_jwt }
42
+
43
+ it 'passes authentication' do
44
+ get spree.api_user_path(user.id), params: params
45
+ expect(response.status).to be(200)
46
+ end
47
+ end
48
+ end
49
+
50
+ context 'when spree api key is not allowed' do
51
+ before do
52
+ SolidusJwt::Config.allow_spree_api_key = false
53
+ end
54
+
55
+ after do
56
+ SolidusJwt::Config.allow_spree_api_key = true
57
+ end
58
+
59
+ context 'when spree api key is present' do
60
+ let(:token) { user.spree_api_key }
61
+
62
+ it 'fails authentication' do
63
+ get spree.api_user_path(user.id), params: params
64
+ expect(response.status).to be(401)
65
+ end
66
+ end
67
+
68
+ context 'when json web token is used' do
69
+ let(:token) { user.generate_jwt }
70
+
71
+ it 'passes authentication' do
72
+ get spree.api_user_path(user.id), params: params
73
+ expect(response.status).to be(200)
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'spree/testing_support/factories/user_factory'
5
+
6
+ RSpec.describe 'Token Retrieval', type: :request do
7
+ let(:user) { FactoryBot.create(:user, password: 'password') }
8
+
9
+ describe '/api/token' do
10
+ context 'when username and password are provided' do
11
+ context 'when success' do
12
+ before do
13
+ post '/oauth/token', params: { username: user.email, password: 'password', grant_type: 'password' }
14
+ end
15
+
16
+ it 'responds with status 200' do
17
+ expect(response).to have_http_status(:ok)
18
+ end
19
+
20
+ it 'responds with access_token and refresh_token' do
21
+ json = JSON.parse(response.body)
22
+
23
+ expect(json).to have_key('access_token')
24
+ expect(json).to have_key('refresh_token')
25
+ end
26
+ end
27
+
28
+ context 'when warden failure' do
29
+ def send_request
30
+ post '/oauth/token', params: { username: user.email, password: 'password', grant_type: 'password' }
31
+ end
32
+
33
+ it 'responds with status 401' do
34
+ expect_any_instance_of(Spree::Api::OauthsController).to receive(:try_authenticate_user) do # rubocop:disable RSpec/AnyInstance
35
+ throw(:warden, scope: :spree_user, message: :locked)
36
+ end
37
+
38
+ send_request
39
+ expect(response).to have_http_status(:unauthorized)
40
+ end
41
+
42
+ it 'responds with translated Devise error message' do
43
+ expect_any_instance_of(Spree::Api::OauthsController).to receive(:try_authenticate_user) do # rubocop:disable RSpec/AnyInstance
44
+ throw(:warden, scope: :spree_user, message: :locked)
45
+ end
46
+
47
+ send_request
48
+ json = JSON.parse(response.body)
49
+
50
+ expect(json).to have_key('error')
51
+ expect(json['error']).to eq('Your account is locked.')
52
+ end
53
+ end
54
+
55
+ context 'when invalid password' do
56
+ def send_request
57
+ post '/oauth/token', params: { username: user.email, password: 'invalid', grant_type: 'password' }
58
+ end
59
+
60
+ it 'responds with status 401' do
61
+ send_request
62
+ expect(response).to have_http_status(:unauthorized)
63
+ end
64
+
65
+ it 'responds with invalid username or password' do
66
+ send_request
67
+
68
+ json = JSON.parse(response.body)
69
+
70
+ expect(json).to have_key('error')
71
+ expect(json['error']).to eq('invalid username or password')
72
+ end
73
+
74
+ context 'with error message translation' do
75
+ before do
76
+ allow(I18n).to receive(:t).with(:invalid_credentials, scope: 'solidus_jwt').and_return('Wrong token!')
77
+ end
78
+
79
+ it 'responds with translated error message' do
80
+ send_request
81
+
82
+ json = JSON.parse(response.body)
83
+
84
+ expect(json).to have_key('error')
85
+ expect(json['error']).to eq('Wrong token!')
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ context 'when refresh token provided' do
92
+ let(:refresh_token) { user.auth_tokens.create! }
93
+
94
+ context 'when success' do
95
+ before do
96
+ post '/oauth/token', params: { refresh_token: refresh_token.token, grant_type: 'refresh_token' }
97
+ end
98
+
99
+ it 'responds with status 200' do
100
+ expect(response).to have_http_status(:ok)
101
+ end
102
+
103
+ it 'responds with access_token and refresh_token' do
104
+ json = JSON.parse(response.body)
105
+
106
+ expect(json).to have_key('access_token')
107
+ expect(json).to have_key('refresh_token')
108
+ end
109
+ end
110
+
111
+ context 'when failure' do
112
+ before do
113
+ post '/oauth/token', params: { refresh_token: 'invalid', grant_type: 'refresh_token' }
114
+ end
115
+
116
+ it 'response with status 401' do
117
+ expect(response).to have_http_status(:unauthorized)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Configure Rails Environment
4
+ ENV['RAILS_ENV'] = 'test'
5
+
6
+ require 'byebug'
7
+
8
+ # Run Coverage report
9
+ require 'solidus_dev_support/rspec/coverage'
10
+
11
+ require File.expand_path('dummy/config/environment.rb', __dir__)
12
+
13
+ # Requires factories and other useful helpers defined in spree_core.
14
+ require 'solidus_dev_support/rspec/feature_helper'
15
+
16
+ # Requires supporting ruby files with custom matchers and macros, etc,
17
+ # in spec/support/ and its subdirectories.
18
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
19
+
20
+ # Requires factories defined in lib/solidus_jwt/factories.rb
21
+ require 'solidus_jwt/factories'
22
+
23
+ RSpec.configure do |config|
24
+ config.infer_spec_type_from_file_location!
25
+ config.use_transactional_fixtures = false
26
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_examples 'Decodeable Examples' do
4
+ describe 'decode' do
5
+ let(:token) do
6
+ JWT.encode(payload, SolidusJwt::Config.jwt_secret,
7
+ SolidusJwt::Config.jwt_algorithm)
8
+ end
9
+
10
+ let(:payload) { { sub: 1 } }
11
+
12
+ it 'decodes a json web token' do
13
+ allow(JWT).to receive(:decode).and_call_original
14
+
15
+ decoded_token = subject.decode(token)
16
+
17
+ expect(JWT).to have_received(:decode).with(token, SolidusJwt::Config.jwt_secret,
18
+ true, hash_including(algorithm: SolidusJwt::Config.jwt_algorithm))
19
+ expect(decoded_token).to be_kind_of(Array)
20
+ expect(decoded_token.first).to include(payload.as_json)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_examples 'Encodeable Examples' do
4
+ describe 'encode' do
5
+ let(:payload) { { user_id: 1 } }
6
+
7
+ it 'encodes a json web token' do
8
+ allow(JWT).to receive(:encode).and_call_original
9
+
10
+ token = subject.encode(payload: payload)
11
+
12
+ expect(JWT).to have_received(:encode).with(hash_including('iat', 'user_id' => 1),
13
+ SolidusJwt::Config.jwt_secret, SolidusJwt::Config.jwt_algorithm)
14
+ expect(token).to be_kind_of String
15
+ end
16
+
17
+ context 'when expiration is passed in' do
18
+ it 'encodes a json web token with expiration date' do
19
+ allow(JWT).to receive(:encode).and_call_original
20
+
21
+ token = subject.encode(payload: payload, expires_in: 60)
22
+
23
+ expect(JWT).to have_received(:encode).with(hash_including('iat', 'exp', 'user_id' => 1),
24
+ SolidusJwt::Config.jwt_secret, SolidusJwt::Config.jwt_algorithm)
25
+ expect(token).to be_kind_of String
26
+ end
27
+ end
28
+ end
29
+ end
metadata CHANGED
@@ -1,69 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_jwt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Scott
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-01 00:00:00.000000000 Z
11
+ date: 2020-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: solidus_core
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '3'
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '1.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '3'
33
- - !ruby/object:Gem::Dependency
34
- name: solidus_backend
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '1.0'
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '3'
43
- type: :runtime
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: '1.0'
50
- - - "<"
51
- - !ruby/object:Gem::Version
52
- version: '3'
53
- - !ruby/object:Gem::Dependency
54
- name: solidus_support
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: 0.1.3
60
- type: :runtime
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 0.1.3
67
13
  - !ruby/object:Gem::Dependency
68
14
  name: jwt
69
15
  requirement: !ruby/object:Gem::Requirement
@@ -79,125 +25,13 @@ dependencies:
79
25
  - !ruby/object:Gem::Version
80
26
  version: '0'
81
27
  - !ruby/object:Gem::Dependency
82
- name: byebug
28
+ name: solidus_auth_devise
83
29
  requirement: !ruby/object:Gem::Requirement
84
30
  requirements:
85
31
  - - ">="
86
32
  - !ruby/object:Gem::Version
87
33
  version: '0'
88
- type: :development
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- version: '0'
95
- - !ruby/object:Gem::Dependency
96
- name: capybara
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- version: '0'
109
- - !ruby/object:Gem::Dependency
110
- name: coffee-rails
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- version: '0'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: '0'
123
- - !ruby/object:Gem::Dependency
124
- name: database_cleaner
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- version: '0'
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - ">="
135
- - !ruby/object:Gem::Version
136
- version: '0'
137
- - !ruby/object:Gem::Dependency
138
- name: factory_bot
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- version: '0'
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- version: '0'
151
- - !ruby/object:Gem::Dependency
152
- name: ffaker
153
- requirement: !ruby/object:Gem::Requirement
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- type: :development
159
- prerelease: false
160
- version_requirements: !ruby/object:Gem::Requirement
161
- requirements:
162
- - - ">="
163
- - !ruby/object:Gem::Version
164
- version: '0'
165
- - !ruby/object:Gem::Dependency
166
- name: gem-release
167
- requirement: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- version: '0'
172
- type: :development
173
- prerelease: false
174
- version_requirements: !ruby/object:Gem::Requirement
175
- requirements:
176
- - - ">="
177
- - !ruby/object:Gem::Version
178
- version: '0'
179
- - !ruby/object:Gem::Dependency
180
- name: poltergeist
181
- requirement: !ruby/object:Gem::Requirement
182
- requirements:
183
- - - ">="
184
- - !ruby/object:Gem::Version
185
- version: '0'
186
- type: :development
187
- prerelease: false
188
- version_requirements: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - ">="
191
- - !ruby/object:Gem::Version
192
- version: '0'
193
- - !ruby/object:Gem::Dependency
194
- name: rspec-rails
195
- requirement: !ruby/object:Gem::Requirement
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- version: '0'
200
- type: :development
34
+ type: :runtime
201
35
  prerelease: false
202
36
  version_requirements: !ruby/object:Gem::Requirement
203
37
  requirements:
@@ -205,63 +39,41 @@ dependencies:
205
39
  - !ruby/object:Gem::Version
206
40
  version: '0'
207
41
  - !ruby/object:Gem::Dependency
208
- name: rubocop
42
+ name: solidus_core
209
43
  requirement: !ruby/object:Gem::Requirement
210
44
  requirements:
211
45
  - - ">="
212
46
  - !ruby/object:Gem::Version
213
- version: '0'
214
- type: :development
215
- prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- requirements:
218
- - - ">="
219
- - !ruby/object:Gem::Version
220
- version: '0'
221
- - !ruby/object:Gem::Dependency
222
- name: rubocop-rspec
223
- requirement: !ruby/object:Gem::Requirement
224
- requirements:
225
- - - ">="
47
+ version: 2.0.0
48
+ - - "<"
226
49
  - !ruby/object:Gem::Version
227
- version: '0'
228
- type: :development
50
+ version: '3'
51
+ type: :runtime
229
52
  prerelease: false
230
53
  version_requirements: !ruby/object:Gem::Requirement
231
54
  requirements:
232
55
  - - ">="
233
56
  - !ruby/object:Gem::Version
234
- version: '0'
235
- - !ruby/object:Gem::Dependency
236
- name: sass-rails
237
- requirement: !ruby/object:Gem::Requirement
238
- requirements:
239
- - - ">="
240
- - !ruby/object:Gem::Version
241
- version: '0'
242
- type: :development
243
- prerelease: false
244
- version_requirements: !ruby/object:Gem::Requirement
245
- requirements:
246
- - - ">="
57
+ version: 2.0.0
58
+ - - "<"
247
59
  - !ruby/object:Gem::Version
248
- version: '0'
60
+ version: '3'
249
61
  - !ruby/object:Gem::Dependency
250
- name: selenium-webdriver
62
+ name: solidus_support
251
63
  requirement: !ruby/object:Gem::Requirement
252
64
  requirements:
253
- - - ">="
65
+ - - "~>"
254
66
  - !ruby/object:Gem::Version
255
- version: '0'
256
- type: :development
67
+ version: 0.5.0
68
+ type: :runtime
257
69
  prerelease: false
258
70
  version_requirements: !ruby/object:Gem::Requirement
259
71
  requirements:
260
- - - ">="
72
+ - - "~>"
261
73
  - !ruby/object:Gem::Version
262
- version: '0'
74
+ version: 0.5.0
263
75
  - !ruby/object:Gem::Dependency
264
- name: simplecov
76
+ name: byebug
265
77
  requirement: !ruby/object:Gem::Requirement
266
78
  requirements:
267
79
  - - ">="
@@ -275,7 +87,7 @@ dependencies:
275
87
  - !ruby/object:Gem::Version
276
88
  version: '0'
277
89
  - !ruby/object:Gem::Dependency
278
- name: sqlite3
90
+ name: solidus_dev_support
279
91
  requirement: !ruby/object:Gem::Requirement
280
92
  requirements:
281
93
  - - ">="
@@ -294,49 +106,101 @@ executables: []
294
106
  extensions: []
295
107
  extra_rdoc_files: []
296
108
  files:
109
+ - ".circleci/config.yml"
110
+ - ".gem_release.yml"
111
+ - ".github/CODEOWNERS"
112
+ - ".github/stale.yml"
113
+ - ".gitignore"
114
+ - ".rspec"
115
+ - ".rubocop.yml"
116
+ - ".ruby-gemset"
117
+ - ".ruby-version"
118
+ - Gemfile
297
119
  - LICENSE
298
120
  - README.md
299
121
  - Rakefile
300
- - app/assets/javascripts/spree/backend/solidus_jwt.js
301
- - app/assets/javascripts/spree/frontend/solidus_jwt.js
302
- - app/assets/stylesheets/spree/backend/solidus_jwt.css
303
- - app/assets/stylesheets/spree/frontend/solidus_jwt.css
304
- - app/controllers/spree/api/base_controller/json_web_tokens.rb
305
- - app/controllers/spree/api/base_controller_decorator.rb
306
- - app/models/spree/user_decorator.rb
122
+ - _config.yml
123
+ - app/decorators/controllers/solidus_jwt/spree/api/base_controller_decorator.rb
124
+ - app/decorators/models/solidus_jwt/spree/user_decorator.rb
125
+ - app/models/solidus_jwt/base_record.rb
126
+ - app/models/solidus_jwt/token.rb
127
+ - bin/console
128
+ - bin/r
129
+ - bin/rails
130
+ - bin/rails-engine
131
+ - bin/rails-sandbox
132
+ - bin/rake
133
+ - bin/sandbox
134
+ - bin/sandbox_rails
135
+ - bin/setup
307
136
  - config/locales/en.yml
308
137
  - config/routes.rb
138
+ - db/migrate/20190222220038_create_solidus_jwt_tokens.rb
139
+ - db/migrate/20191212083655_add_foreign_key_to_users_table.rb
140
+ - lib/controllers/api/spree/api/oauths_controller.rb
309
141
  - lib/generators/solidus_jwt/install/install_generator.rb
310
142
  - lib/solidus_jwt.rb
311
143
  - lib/solidus_jwt/concerns/decodeable.rb
312
144
  - lib/solidus_jwt/concerns/encodeable.rb
313
145
  - lib/solidus_jwt/config.rb
146
+ - lib/solidus_jwt/devise_strategies/base.rb
147
+ - lib/solidus_jwt/devise_strategies/password.rb
148
+ - lib/solidus_jwt/devise_strategies/refresh_token.rb
314
149
  - lib/solidus_jwt/distributor/devise.rb
315
150
  - lib/solidus_jwt/engine.rb
316
151
  - lib/solidus_jwt/factories.rb
317
152
  - lib/solidus_jwt/preferences.rb
318
153
  - lib/solidus_jwt/version.rb
319
- homepage: https://github.com/skukx
154
+ - solidus_jwt.gemspec
155
+ - spec/lib/solidus_jwt/concerns/decodeable_spec.rb
156
+ - spec/lib/solidus_jwt/concerns/encodeable_spec.rb
157
+ - spec/lib/solidus_jwt/config_spec.rb
158
+ - spec/lib/solidus_jwt/devise_strategies/password_spec.rb
159
+ - spec/lib/solidus_jwt/devise_strategies/refresh_token_spec.rb
160
+ - spec/lib/solidus_jwt/preferences_spec.rb
161
+ - spec/lib/solidus_jwt_spec.rb
162
+ - spec/models/solidus_jwt/token_spec.rb
163
+ - spec/requests/spree/api/json_web_tokens_spec.rb
164
+ - spec/requests/spree/api/oauths_spec.rb
165
+ - spec/spec_helper.rb
166
+ - spec/support/shared_examples/decodeable_examples.rb
167
+ - spec/support/shared_examples/encodeable_examples.rb
168
+ homepage: https://github.com/skukx/solidus_jwt
320
169
  licenses:
321
170
  - BSD-3-Clause
322
- metadata: {}
171
+ metadata:
172
+ homepage_uri: https://github.com/skukx/solidus_jwt
173
+ source_code_uri: https://github.com/skukx/solidus_jwt
323
174
  post_install_message:
324
175
  rdoc_options: []
325
176
  require_paths:
326
177
  - lib
327
178
  required_ruby_version: !ruby/object:Gem::Requirement
328
179
  requirements:
329
- - - ">="
180
+ - - "~>"
330
181
  - !ruby/object:Gem::Version
331
- version: '0'
182
+ version: '2.4'
332
183
  required_rubygems_version: !ruby/object:Gem::Requirement
333
184
  requirements:
334
185
  - - ">="
335
186
  - !ruby/object:Gem::Version
336
187
  version: '0'
337
188
  requirements: []
338
- rubygems_version: 3.0.3
189
+ rubygems_version: 3.0.8
339
190
  signing_key:
340
191
  specification_version: 4
341
192
  summary: Add Json Web Tokens to Solidus API
342
- test_files: []
193
+ test_files:
194
+ - spec/lib/solidus_jwt/concerns/decodeable_spec.rb
195
+ - spec/lib/solidus_jwt/concerns/encodeable_spec.rb
196
+ - spec/lib/solidus_jwt/config_spec.rb
197
+ - spec/lib/solidus_jwt/devise_strategies/password_spec.rb
198
+ - spec/lib/solidus_jwt/devise_strategies/refresh_token_spec.rb
199
+ - spec/lib/solidus_jwt/preferences_spec.rb
200
+ - spec/lib/solidus_jwt_spec.rb
201
+ - spec/models/solidus_jwt/token_spec.rb
202
+ - spec/requests/spree/api/json_web_tokens_spec.rb
203
+ - spec/requests/spree/api/oauths_spec.rb
204
+ - spec/spec_helper.rb
205
+ - spec/support/shared_examples/decodeable_examples.rb
206
+ - spec/support/shared_examples/encodeable_examples.rb