better_record 0.8.4 → 0.8.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff5b45bbb88e2c69ea34a18d4558c3347c8436d78bd3b840e8b1593e886ef98a
4
- data.tar.gz: a224ba7363f4ad63f3b8adf4d4cb4dfea548e679d453453b29aaabddffe1f262
3
+ metadata.gz: 0c74ce4cc2b32ee6daae476f67ee6ef3a8c3446749eb7a62bac00d9b3acca5d4
4
+ data.tar.gz: 0c7275ae95cda50bd041deaedf8cadfe1f39998f9bd2f75912b7dcfb750fcf6e
5
5
  SHA512:
6
- metadata.gz: cd607cccce38fa0c4b7a5f2af1884ae45eaedd89a21569dea5c96c3035f5baffe459e25369b63825f9eed203c501743322066c25751fec38cb95e74d313d514d
7
- data.tar.gz: 4e09e671517071cb94030f732851b7ba8b8ce3786d19647a6e008f76854758da625db822c92ebcae6317449821b3a682d2f70dfb7eb7c1eff6117fb002d9ccc1
6
+ metadata.gz: d4ca2c297bd1c0b56edee22fd172257c4fb709796ee3f87a93cea0a006f2aa59d38ec0901e1a28ff0c64c16491d554f4ab53905c2ff9698f7c9fc49aeb556658
7
+ data.tar.gz: ec802533dc25ae1639a91c51e6f3d6b0eb373d6d5d174951a13e345a4850a593ab80a5e0ccf0aa61350bab21ba319967ca2934c0e486fe6d1f57ae0d71edfead
data/lib/better_record.rb CHANGED
@@ -19,6 +19,7 @@ module BetterRecord
19
19
  :layout_template,
20
20
  :app_domain_name,
21
21
  :after_login_path,
22
+ :use_bearer_token,
22
23
  :session_class,
23
24
  :session_column,
24
25
  :session_data,
@@ -49,6 +50,7 @@ module BetterRecord
49
50
  self.layout_template = (ENV.fetch('BR_LAYOUT_TEMPLATE') { 'better_record/layout' }).to_s
50
51
  self.app_domain_name = (ENV.fetch('APP_DOMAIN_NAME') { 'non_existant_domain.com' }).to_s
51
52
  self.after_login_path = (ENV.fetch('BR_AFTER_LOGIN_PATH') { nil })
53
+ self.use_bearer_token = Boolean.strict_parse(ENV.fetch('BR_USE_BEARER_TOKEN') { false })
52
54
  self.session_column = (ENV.fetch('BR_SESSION_COLUMN') { :id }).to_sym
53
55
  self.session_authenticate_method = (ENV.fetch('BR_SESSION_AUTHENTICATE_METHOD') { :authenticate }).to_sym
54
56
  self.certificate_session_column = (ENV.fetch('BR_CERTIFICATE_SESSION_COLUMN') { :certificate }).to_sym
@@ -5,28 +5,14 @@ require 'active_support/concern'
5
5
  module BetterRecord
6
6
  module Authenticatable
7
7
  extend ActiveSupport::Concern
8
- include BetterRecord::JWT::ControllerMethods
9
8
 
10
9
  included do
10
+ include BetterRecord::JWT::ControllerMethods
11
11
  before_action :check_user
12
- end
13
-
14
- def method_missing(method, *args)
15
- begin
16
- if BetterRecord.attributes[method.to_sym]
17
- m = method.to_sym
18
- self.class.define_method m do
19
- BetterRecord.__send__ m
20
- end
21
- BetterRecord.__send__ m
22
- else
23
- raise NoMethodError
24
- end
25
- rescue NoMethodError
26
- super(method, *args)
12
+ if use_bearer_token
13
+ after_action :set_auth_header
27
14
  end
28
15
  end
29
16
 
30
-
31
17
  end
32
18
  end
@@ -5,31 +5,41 @@ require 'active_support/concern'
5
5
  module BetterRecord
6
6
  module Sessionable
7
7
  extend ActiveSupport::Concern
8
- include BetterRecord::JWT::ControllerMethods
9
8
 
10
9
  included do
10
+ include BetterRecord::JWT::ControllerMethods
11
11
  skip_before_action :check_user, raise: false
12
- end
13
12
 
14
- def new
15
- session[:referrer] ||= request.referrer
16
- p session[:referrer], request.referrer
17
- if (header_hash = request.headers.to_h.deep_symbolize_keys)[:HTTP_X_SSL_CERT].present?
18
- create_session_from_certificate(header_hash[:HTTP_X_SSL_CERT])
19
- redirect_to (session.delete(:referrer) || __send__(after_login_path) || root_path)
20
- end
21
- end
13
+ def new
14
+ session[:referrer] ||= request.referrer unless use_bearer_token
22
15
 
23
- def create
24
- if(user = session_class.__send__(session_authenticate_method, params))
25
- session[:better_record] = create_jwt(user)
16
+ if (header_hash = request.headers.to_h.deep_symbolize_keys)[:HTTP_X_SSL_CERT].present?
17
+ create_session_from_certificate(header_hash[:HTTP_X_SSL_CERT])
18
+ return respond_to_login
19
+ end
26
20
  end
27
- respond_to do |format|
28
- format.json
29
- format.html do
30
- return redirect_to (session.delete(:referrer) || __send__(after_login_path) || root_path)
21
+
22
+ def create
23
+ if(user = session_class.__send__(session_authenticate_method, params))
24
+ current_token = create_jwt(user)
25
+ set_user(user)
31
26
  end
27
+ return respond_to_login
32
28
  end
29
+
30
+ private
31
+ def respond_to_login
32
+ respond_to do |format|
33
+ format.json
34
+ format.html do
35
+ return redirect_to (
36
+ (!use_bearer_token && session.delete(:referrer)) ||
37
+ __send__(after_login_path) ||
38
+ root_path
39
+ )
40
+ end
41
+ end
42
+ end
33
43
  end
34
44
  end
35
45
  end
@@ -60,6 +60,24 @@ module BetterRecord
60
60
  end
61
61
 
62
62
  module ControllerMethods
63
+ include ActionController::HttpAuthentication::Token::ControllerMethods
64
+
65
+ def method_missing(method, *args)
66
+ begin
67
+ if BetterRecord.attributes[method.to_sym]
68
+ m = method.to_sym
69
+ self.class.define_method m do
70
+ BetterRecord.__send__ m
71
+ end
72
+ BetterRecord.__send__ m
73
+ else
74
+ raise NoMethodError
75
+ end
76
+ rescue NoMethodError
77
+ super(method, *args)
78
+ end
79
+ end
80
+
63
81
  protected
64
82
  def check_user
65
83
  if logged_in?
@@ -68,7 +86,7 @@ module BetterRecord
68
86
  if !data[:created_at] ||
69
87
  (data[:created_at].to_i > 14.days.ago.to_i)
70
88
  if user = session_class.find_by(session_column => data[:user_id])
71
- session[:current_user] = create_jwt(user, data) if data[:created_at] < 1.hour.ago
89
+ current_token = create_jwt(user, data) if data[:created_at] < 1.hour.ago
72
90
  set_user(user)
73
91
  else
74
92
  throw 'User Not Found'
@@ -77,7 +95,7 @@ module BetterRecord
77
95
  throw 'Token Expired'
78
96
  end
79
97
  rescue
80
- session.delete(:current_user)
98
+ current_token = nil
81
99
  BetterRecord::Current.drop_values
82
100
  end
83
101
  end
@@ -105,7 +123,8 @@ module BetterRecord
105
123
  user = user.__send__(certificate_session_user_method)
106
124
  end
107
125
 
108
- session[:current_user] = create_jwt(user, { has_certificate: true })
126
+ current_token = create_jwt(user, { has_certificate: true })
127
+ set_user(user)
109
128
  end
110
129
  end
111
130
 
@@ -114,11 +133,39 @@ module BetterRecord
114
133
  end
115
134
 
116
135
  def current_user_session_data
117
- logged_in? ? JWT.decode(session[:current_user]).deep_symbolize_keys : {}
136
+ logged_in? ? JWT.decode(current_token).deep_symbolize_keys : {}
118
137
  end
119
138
 
120
139
  def logged_in?
121
- session[:current_user].present?
140
+ current_token.present?
141
+ end
142
+
143
+ def current_token
144
+ if use_bearer_token
145
+ @current_token ||= authenticate_with_http_token do |token, **options|
146
+ token
147
+ end
148
+ else
149
+ @current_token ||= session[:current_user]
150
+ end
151
+ end
152
+
153
+ def current_token=(value)
154
+ @current_token = value
155
+ if use_bearer_token
156
+ set_auth_header
157
+ else
158
+ if value.blank?
159
+ session.delete(:current_user)
160
+ else
161
+ session[:current_user] = value
162
+ end
163
+ end
164
+ @current_token
165
+ end
166
+
167
+ def set_auth_header
168
+ response.set_header("AUTH_TOKEN", current_token)
122
169
  end
123
170
 
124
171
  def set_user(user)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BetterRecord
4
- VERSION = '0.8.4'
4
+ VERSION = '0.8.5'
5
5
  end
@@ -12,6 +12,7 @@ module BetterRecord
12
12
  # layout_template: BR_LAYOUT_TEMPLATE #
13
13
  # app_domain_name: APP_DOMAIN_NAME #
14
14
  # after_login_path: BR_AFTER_LOGIN_PATH #
15
+ # use_bearer_token: BR_USE_BEARER_TOKEN #
15
16
  # session_column: BR_SESSION_COLUMN #
16
17
  # session_authenticate_method: BR_SESSION_AUTHENTICATE_METHOD #
17
18
  # certificate_session_column: BR_CERTIFICATE_SESSION_COLUMN #
@@ -59,6 +60,9 @@ module BetterRecord
59
60
 
60
61
  # OPTIONAL #
61
62
 
63
+ # set to true to use Auth headers instead of session cookies
64
+ # self.use_bearer_token = true
65
+
62
66
  # self.after_login_path = Rails.application.routes.url_helpers.root_path
63
67
 
64
68
  # self.session_column = :uuid
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sampson Crowley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-24 00:00:00.000000000 Z
11
+ date: 2018-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails