jwt-auth 4.2.0 → 5.0.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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/Gemfile +3 -0
  4. data/README.md +119 -18
  5. data/bin/build +22 -0
  6. data/bin/release +40 -0
  7. data/jwt-auth.gemspec +18 -15
  8. data/lib/jwt/auth.rb +2 -0
  9. data/lib/jwt/auth/access_token.rb +20 -0
  10. data/lib/jwt/auth/authenticatable.rb +16 -0
  11. data/lib/jwt/auth/authentication.rb +63 -22
  12. data/lib/jwt/auth/configuration.rb +4 -1
  13. data/lib/jwt/auth/refresh_token.rb +20 -0
  14. data/lib/jwt/auth/token.rb +49 -41
  15. data/lib/jwt/auth/version.rb +3 -1
  16. data/spec/controllers/content_controller_spec.rb +95 -0
  17. data/spec/controllers/tokens_controller_spec.rb +140 -0
  18. data/spec/dummy/Rakefile +2 -0
  19. data/spec/dummy/app/channels/application_cable/channel.rb +2 -0
  20. data/spec/dummy/app/channels/application_cable/connection.rb +2 -0
  21. data/spec/dummy/app/controllers/application_controller.rb +6 -1
  22. data/spec/dummy/app/controllers/content_controller.rb +29 -0
  23. data/spec/dummy/app/controllers/tokens_controller.rb +53 -0
  24. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  25. data/spec/dummy/app/helpers/authentication_helper.rb +2 -0
  26. data/spec/dummy/app/jobs/application_job.rb +2 -0
  27. data/spec/dummy/app/mailers/application_mailer.rb +3 -1
  28. data/spec/dummy/app/models/application_record.rb +2 -0
  29. data/spec/dummy/app/models/user.rb +3 -6
  30. data/spec/dummy/bin/bundle +2 -0
  31. data/spec/dummy/bin/rails +2 -0
  32. data/spec/dummy/bin/rake +2 -0
  33. data/spec/dummy/bin/setup +2 -0
  34. data/spec/dummy/bin/update +2 -0
  35. data/spec/dummy/bin/yarn +7 -7
  36. data/spec/dummy/config.ru +2 -0
  37. data/spec/dummy/config/application.rb +2 -0
  38. data/spec/dummy/config/boot.rb +3 -1
  39. data/spec/dummy/config/environment.rb +2 -0
  40. data/spec/dummy/config/environments/development.rb +3 -1
  41. data/spec/dummy/config/environments/production.rb +4 -2
  42. data/spec/dummy/config/environments/test.rb +2 -0
  43. data/spec/dummy/config/initializers/application_controller_renderer.rb +2 -0
  44. data/spec/dummy/config/initializers/assets.rb +2 -0
  45. data/spec/dummy/config/initializers/backtrace_silencers.rb +2 -0
  46. data/spec/dummy/config/initializers/content_security_policy.rb +2 -0
  47. data/spec/dummy/config/initializers/cookies_serializer.rb +2 -0
  48. data/spec/dummy/config/initializers/filter_parameter_logging.rb +2 -0
  49. data/spec/dummy/config/initializers/inflections.rb +2 -0
  50. data/spec/dummy/config/initializers/jwt_auth.rb +9 -2
  51. data/spec/dummy/config/initializers/mime_types.rb +2 -0
  52. data/spec/dummy/config/initializers/new_framework_defaults_5_2.rb +2 -0
  53. data/spec/dummy/config/initializers/wrap_parameters.rb +3 -1
  54. data/spec/dummy/config/puma.rb +5 -3
  55. data/spec/dummy/config/routes.rb +5 -4
  56. data/spec/dummy/config/spring.rb +4 -2
  57. data/spec/dummy/db/migrate/20170726110751_create_users.rb +2 -0
  58. data/spec/dummy/db/migrate/20170726110825_add_token_version_to_user.rb +2 -0
  59. data/spec/dummy/db/migrate/20170726112117_add_activated_to_user.rb +2 -0
  60. data/spec/dummy/db/migrate/20190221100103_add_password_to_user.rb +7 -0
  61. data/spec/dummy/db/schema.rb +10 -9
  62. data/spec/jwt/auth/access_token_spec.rb +35 -0
  63. data/spec/jwt/auth/configuration_spec.rb +36 -0
  64. data/spec/jwt/auth/refresh_token_spec.rb +35 -0
  65. data/spec/jwt/auth/token_spec.rb +144 -0
  66. data/spec/models/user_spec.rb +24 -0
  67. data/spec/rails_helper.rb +8 -0
  68. data/spec/spec_helper.rb +51 -53
  69. data/spec/support/database_cleaner.rb +22 -0
  70. data/spec/support/matchers/return_token.rb +33 -0
  71. data/version.yml +1 -0
  72. metadata +119 -54
  73. data/spec/authentication_spec.rb +0 -136
  74. data/spec/configuration_spec.rb +0 -18
  75. data/spec/dummy/app/controllers/authentication_controller.rb +0 -22
  76. data/spec/token_spec.rb +0 -125
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'securerandom'
4
-
5
- require 'rails_helper'
6
-
7
- RSpec.describe JWT::Auth do
8
- it 'configures correctly' do
9
- JWT::Auth.configure do |config|
10
- config.token_lifetime = 24.hours
11
- config.secret = 'mysecret'
12
- end
13
-
14
- expect(subject.token_lifetime).to eq 24.hours
15
- expect(subject.secret).to eq 'mysecret'
16
- expect(subject.model).to eq 'User'
17
- end
18
- end
@@ -1,22 +0,0 @@
1
- class AuthenticationController < ApplicationController
2
- # Authenticates user from request header
3
- before_action :authenticate_user, :only => :private
4
-
5
- # Validate token
6
- before_action :validate_token, :only => :validate
7
-
8
- # Renew token and set response header
9
- after_action :renew_token
10
-
11
- def public
12
- head :no_content
13
- end
14
-
15
- def private
16
- head :no_content
17
- end
18
-
19
- def validate
20
- head :no_content
21
- end
22
- end
@@ -1,125 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe JWT::Auth::Token do
4
- let(:user) { User.create! :activated => true }
5
- let(:token) { JWT::Auth::Token.from_user user }
6
-
7
- describe 'properties' do
8
- let(:token) { JWT::Auth::Token.from_user user }
9
-
10
- it 'has an issued at' do
11
- expect(token).to respond_to :issued_at
12
- expect(token.issued_at).to be_nil
13
- end
14
-
15
- it 'has a subject' do
16
- expect(token).to respond_to :subject
17
- expect(token.subject).to eq user
18
- end
19
-
20
- it 'has a token_version' do
21
- expect(token).to respond_to :token_version
22
- expect(token.token_version).to be_nil
23
- end
24
- end
25
-
26
- describe 'valid?' do
27
- it 'is invalid without subject' do
28
- jwt = token.to_jwt
29
-
30
- user.destroy
31
-
32
- t = JWT::Auth::Token.from_token jwt
33
-
34
- expect(t).not_to be_valid
35
- end
36
-
37
- it 'is invalid without subject 2' do
38
- t = JWT::Auth::Token.from_token token.to_jwt
39
-
40
- user.destroy
41
-
42
- expect(t).not_to be_valid
43
- end
44
-
45
- it 'is invalid on token_version increment' do
46
- t = JWT::Auth::Token.from_token token.to_jwt
47
-
48
- expect(t).to be_valid
49
-
50
- user.increment_token_version!
51
- user.reload
52
-
53
- expect(t).not_to be_valid
54
- end
55
-
56
- it 'is invalid on past date' do
57
- token.issued_at = (JWT::Auth.token_lifetime + 1.second).ago.to_i
58
-
59
- t = JWT::Auth::Token.from_token token.to_jwt
60
-
61
- expect(t).not_to be_valid
62
- end
63
-
64
- it 'is invalid after expiry date' do
65
- token.issued_at = JWT::Auth.token_lifetime.ago.to_i
66
- sleep 2
67
-
68
- t = JWT::Auth::Token.from_token token.to_jwt
69
-
70
- expect(t).not_to be_valid
71
- end
72
-
73
- it 'is invalid on future tokens' do
74
- token.issued_at = 1.year.from_now.to_i
75
-
76
- t = JWT::Auth::Token.from_token token.to_jwt
77
-
78
- expect(t).not_to be_valid
79
- end
80
- end
81
-
82
- describe 'renew!' do
83
- it 'renews a token' do
84
- old_jwt = token.to_jwt
85
- old_token = JWT::Auth::Token.from_token old_jwt
86
-
87
- expect(old_token).to be_valid
88
-
89
- sleep 2
90
-
91
- old_token.renew!
92
-
93
- new_jwt = old_token.to_jwt
94
- new_token = JWT::Auth::Token.from_token new_jwt
95
-
96
- expect(new_token).to be_valid
97
- expect(new_jwt).not_to eq old_jwt
98
- expect(new_token.issued_at).not_to eq old_token.issued_at
99
- end
100
- end
101
-
102
- describe 'from token' do
103
- let(:issued_at) { 1.second.ago.to_i }
104
-
105
- let(:jwt) do
106
- payload = {
107
- :iat => issued_at,
108
- :sub => user.id,
109
- :ver => user.token_version
110
- }
111
- JWT.encode payload, JWT::Auth.secret
112
- end
113
-
114
- let(:token) { JWT::Auth::Token.from_token jwt }
115
-
116
- it 'matches issued at' do
117
- expect(token.issued_at).to eq issued_at
118
- end
119
-
120
- it 'matches subject' do
121
- expect(token.subject.id).to eq user.id
122
- expect(token.subject.token_version).to eq user.token_version
123
- end
124
- end
125
- end