Skip to content

Commit c13159a

Browse files
Rubop + bug fixes (#9)
1 parent 72fc643 commit c13159a

File tree

5 files changed

+35
-26
lines changed

5 files changed

+35
-26
lines changed

.rubocop.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ Style/TrailingCommaInHashLiteral:
1919
EnforcedStyleForMultiline: consistent_comma
2020

2121
Layout/LineLength:
22-
Max: 120
22+
Max: 150

lib/tokenable/authable.rb

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ module Tokenable
99
module Authable
1010
extend ActiveSupport::Concern
1111

12-
included do
13-
end
14-
1512
def user_signed_in?
1613
current_user.present?
1714
end
@@ -23,13 +20,23 @@ def current_user
2320
end
2421

2522
def require_tokenable_user!
26-
raise Tokenable::Unauthorized.new('User not found in JWT token') unless jwt_user_id
27-
raise Tokenable::Unauthorized.new('User is not signed in') unless user_signed_in?
28-
raise Tokenable::Unauthorized.new('Token verifier is invalid') if user_class.included_modules.include?(Tokenable::Verifier) && !current_user.valid_verifier?(jwt_verifier)
23+
raise Tokenable::Unauthorized, 'User not found in JWT token' unless jwt_user_id
24+
raise Tokenable::Unauthorized, 'User is not signed in' unless user_signed_in?
25+
raise Tokenable::Unauthorized, 'Token verifier is invalid' unless valid_token?
2926
end
3027

3128
private
3229

30+
def verifier_enabled?
31+
user_class.included_modules.include?(Tokenable::Verifier)
32+
end
33+
34+
def valid_token?
35+
return true unless verifier_enabled?
36+
37+
current_user.valid_verifier?(jwt_verifier)
38+
end
39+
3340
def user_class
3441
Tokenable::Config.user_class
3542
end
@@ -42,16 +49,12 @@ def token_from_user(user)
4249
jwt_data = {
4350
data: {
4451
user_id: user.id,
45-
}
52+
},
4653
}
4754

48-
if jwt_expiry_time
49-
jwt_data[:exp] = jwt_expiry_time
50-
end
55+
jwt_data[:exp] = jwt_expiry_time if jwt_expiry_time
5156

52-
if user_class.included_modules.include?(Tokenable::Verifier)
53-
jwt_data[:data][:verifier] = user.current_verifier
54-
end
57+
jwt_data[:data][:verifier] = user.current_verifier if verifier_enabled?
5558

5659
JWT.encode(jwt_data, jwt_secret, 'HS256')
5760
end
@@ -65,19 +68,19 @@ def jwt_verifier
6568
end
6669

6770
def jwt
68-
raise Tokenable::Unauthorized.new('Bearer token not provided') unless token_from_header.present?
71+
raise Tokenable::Unauthorized, 'Bearer token not provided' unless token_from_header.present?
6972

7073
@jwt ||= JWT.decode(token_from_header, jwt_secret, true, { algorithm: 'HS256' }).first.to_h
7174
rescue JWT::ExpiredSignature
72-
raise Tokenable::Unauthorized.new('Token has expired')
75+
raise Tokenable::Unauthorized, 'Token has expired'
7376
rescue JWT::VerificationError
74-
raise Tokenable::Unauthorized.new('The tokenable secret used in this token does not match the one supplied in Tokenable::Config.secret')
77+
raise Tokenable::Unauthorized, 'The tokenable secret used in this token does not match the one supplied in Tokenable::Config.secret'
7578
rescue JWT::DecodeError
76-
raise Tokenable::Unauthorized.new('JWT exception thrown')
79+
raise Tokenable::Unauthorized, 'JWT exception thrown'
7780
end
7881

7982
def jwt_expiry_time
80-
Tokenable::Config.lifespan
83+
Tokenable::Config.lifespan ? Tokenable::Config.lifespan.from_now.to_i : nil
8184
end
8285

8386
def jwt_secret

lib/tokenable/config.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# frozen_string_literal: true
2+
13
module Tokenable
24
class Config
35
# How long should the token last before it expires?
@@ -15,13 +17,15 @@ class Config
1517
# We do this, as some of our defaults need to live in a Proc (as this library is loaded before Rails)
1618
# This means we can return the value when the method is called, instead of the Proc.
1719
def self.method_missing(method_name, *args, &block)
18-
self.class_variable_defined?("@@#{method_name}") ? self.proc_reader(method_name) : super
20+
class_variable_defined?("@@#{method_name}") ? proc_reader(method_name) : super
1921
end
2022

21-
private
23+
def self.respond_to_missing?(method_name, include_private = false)
24+
class_variable_defined?("@@#{method_name}") || super
25+
end
2226

2327
def self.proc_reader(key)
24-
value = self.class_variable_get("@@#{key}")
28+
value = class_variable_get("@@#{key}")
2529
value.is_a?(Proc) ? value.call : value
2630
end
2731
end

lib/tokenable/controllers/tokens_controller.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ def create
1111
response = {
1212
data: {
1313
token: token_from_user(user),
14-
user_id: user.id
15-
}
14+
user_id: user.id,
15+
},
1616
}
1717

1818
render json: response, status: 201

lib/tokenable/verifier.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
# frozen_string_literal: true
2+
13
module Tokenable
24
module Verifier
35
extend ActiveSupport::Concern
46

57
def valid_verifier?(verifier)
6-
raise Tokenable::Unauthorized.new("#{verifier_key} field is missing") unless self.has_attribute?(verifier_key)
8+
raise Tokenable::Unauthorized, "#{verifier_key} field is missing" unless has_attribute?(verifier_key)
79

810
current_verifier == verifier
911
end
@@ -17,7 +19,7 @@ def invalidate_tokens!
1719
end
1820

1921
def issue_verifier!
20-
self.update!(verifier_key => SecureRandom.uuid)
22+
update!(verifier_key => SecureRandom.uuid)
2123
read_attribute(verifier_key)
2224
end
2325

0 commit comments

Comments
 (0)