rodauth 2.0.0 → 2.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 729e0ac62a92c8c92808b20e292ad8b8ad5cc2ba935d62702f8d88496e54e1a1
4
- data.tar.gz: f0f0aa6dafc54aefd135b3a94b963a136349a69eef9614f4f61f8c24fe759709
3
+ metadata.gz: 11417c5f63db5803f35ba8a92e98827b9f0deeb0a774071b5fbe712fa24f02fd
4
+ data.tar.gz: b0ee20c0ce7af6eea42b32bcab2e476a2ee75b62b283281de7001d5ba4002597
5
5
  SHA512:
6
- metadata.gz: 7474a1229f4d069ced3b4575c2aa9d343f4bf1b4f3efd4ed64c33b5985b262863d97366f86d226c261f7cce1ccd20090412639f782b38e5f85f4f56556b45622
7
- data.tar.gz: 427688ab9aae856b200dee9b7fcfb71bad8bf52b657e1f4d3c8e8ecb3ccd6c2831f71033054bf0d6ef3335fc7697dbdc9a82d29e71393328534b57406316b184
6
+ metadata.gz: 13110a40f40a08c7fb03f1ce44a723afc6e53b4f4b16f690c852dc0adfc4d1bb08b6b87f164be98d50dfc61a6c99a35759901ed3bc7b5ab3dbbcb48b00b6ec5e
7
+ data.tar.gz: 2d7f46d8a9370b67af58eb60d5ac8f324f2619d3cd9bac10b6a27890c9637ceff229ce0404a6d00c9c7fdf8d796d045d3bd06e7489fe08f589580d6a20271cf4
data/CHANGELOG CHANGED
@@ -1,3 +1,17 @@
1
+ === 2.1.0 (2020-06-09)
2
+
3
+ * Do not check CSRF tokens by default for requests using JWT (janko, jeremyevans) (#99)
4
+
5
+ * Use new-password autocomplete value for password field when creating accounts (jeremyevans) (#98)
6
+
7
+ * Consistently use json_response_body for all JSON responses in jwt feature (arthurmmoreira) (#97)
8
+
9
+ * Add check_csrf configuration method to customize CSRF checking (janko) (#96)
10
+
11
+ * Have logged_in? when using http_basic_auth feature check for basic authentication (jeremyevans) (#94)
12
+
13
+ * Don't consider account open if in unverified grace period without password (janko) (#92)
14
+
1
15
  === 2.0.0 (2020-05-06)
2
16
 
3
17
  * Do not show email auth as an option for unverified accounts if using the verify_account_grace_period feature (jeremyevans) (#88)
@@ -91,6 +91,7 @@ authenticated? :: Whether the user has been authenticated. If multifactor authen
91
91
  before_login :: Run arbitrary code after password has been checked, but before updating the session.
92
92
  before_login_attempt :: Run arbitrary code after an account has been located, but before the password has been checked.
93
93
  before_rodauth :: Run arbitrary code before handling any rodauth route, but after CSRF checks if Rodauth is doing CSRF checks.
94
+ check_csrf :: Checks CSRF token using Roda's +check_csrf!+ method.
94
95
  clear_session :: Clears the current session.
95
96
  csrf_tag(path=request.path) :: The HTML fragment containing the CSRF tag to use, if any.
96
97
  function_name(name) :: The name of the database function to call. It's passed either :rodauth_get_salt or :rodauth_valid_password_hash.
@@ -0,0 +1,31 @@
1
+ = New Features
2
+
3
+ * A check_csrf configuration method has been added for checking
4
+ the CSRF token. This is useful in cases where the CSRF protection
5
+ is provided by something other than the Roda route_csrf plugin.
6
+
7
+ = Other Improvements
8
+
9
+ * When using the http_basic_auth feature, logged_in? now checks for
10
+ Basic authentication if the session is not already authenticated
11
+ and Basic authentication has not yet been checked. This increases
12
+ compatibility for applications that were using the http_basic_auth
13
+ feature in Rodauth 1.
14
+
15
+ * When creating accounts, the password field now correctly uses the
16
+ new-password autocomplete attribute instead of the current-password
17
+ autocomplete attribute.
18
+
19
+ * When using the jwt feature, Rodauth no longer checks CSRF tokens
20
+ in requests to Rodauth routes if the request submitted is a JSON
21
+ request, includes a JWT, or Rodauth has been configured in JSON-only
22
+ mode.
23
+
24
+ * When using the verify_account_grace_period feature, if there is an
25
+ unverified account without a password, do not consider the account
26
+ open. Attempting to login into the account in such a case now
27
+ shows a message letting the user know to verify the account.
28
+
29
+ * The json_response_body configuration method is now used consistently
30
+ in the jwt feature for all JSON responses. Previously, there were
31
+ some cases that did not use it.
@@ -119,7 +119,7 @@ module Rodauth
119
119
 
120
120
  define_method(handle_meth) do
121
121
  request.is send(route_meth) do
122
- scope.check_csrf!(check_csrf_opts, &check_csrf_block) if check_csrf?
122
+ check_csrf if check_csrf?
123
123
  before_rodauth
124
124
  send(internal_handle_meth, request)
125
125
  end
@@ -82,6 +82,7 @@ module Rodauth
82
82
  :already_logged_in,
83
83
  :authenticated?,
84
84
  :autocomplete_for_field?,
85
+ :check_csrf,
85
86
  :clear_session,
86
87
  :csrf_tag,
87
88
  :function_name,
@@ -254,6 +255,10 @@ module Rodauth
254
255
  Sequel::DATABASES.first
255
256
  end
256
257
 
258
+ def password_field_autocomplete_value
259
+ @password_field_autocomplete_value || 'current-password'
260
+ end
261
+
257
262
  # If the account_password_hash_column is set, the password hash is verified in
258
263
  # ruby, it will not use a database function to do so, it will check the password
259
264
  # hash using bcrypt.
@@ -333,6 +338,10 @@ module Rodauth
333
338
  @account = _account_from_session
334
339
  end
335
340
 
341
+ def check_csrf
342
+ scope.check_csrf!(check_csrf_opts, &check_csrf_block)
343
+ end
344
+
336
345
  def csrf_tag(path=request.path)
337
346
  return unless scope.respond_to?(:csrf_tag)
338
347
 
@@ -30,6 +30,7 @@ module Rodauth
30
30
  route do |r|
31
31
  check_already_logged_in
32
32
  before_create_account_route
33
+ @password_field_autocomplete_value = 'new-password'
33
34
 
34
35
  r.get do
35
36
  create_account_view
@@ -5,11 +5,20 @@ module Rodauth
5
5
  auth_value_method :http_basic_auth_realm, "protected"
6
6
  auth_value_method :require_http_basic_auth?, false
7
7
 
8
+ def logged_in?
9
+ ret = super
10
+
11
+ if !ret && !defined?(@checked_http_basic_auth)
12
+ http_basic_auth
13
+ ret = super
14
+ end
15
+
16
+ ret
17
+ end
18
+
8
19
  def require_login
9
20
  if require_http_basic_auth?
10
21
  require_http_basic_auth
11
- elsif !logged_in?
12
- http_basic_auth
13
22
  end
14
23
 
15
24
  super
@@ -23,6 +32,9 @@ module Rodauth
23
32
  end
24
33
 
25
34
  def http_basic_auth
35
+ return @checked_http_basic_auth if defined?(@checked_http_basic_auth)
36
+
37
+ @checked_http_basic_auth = nil
26
38
  return unless token = ((v = request.env['HTTP_AUTHORIZATION']) && v[/\A *Basic (.*)\Z/, 1])
27
39
 
28
40
  username, password = token.unpack("m*").first.split(/:/, 2)
@@ -50,6 +62,7 @@ module Rodauth
50
62
  after_login
51
63
  end
52
64
 
65
+ @checked_http_basic_auth = true
53
66
  return true
54
67
  end
55
68
 
@@ -50,7 +50,7 @@ module Rodauth
50
50
  json_response[json_response_error_key] = invalid_jwt_format_error_message
51
51
  response.status ||= json_response_error_status
52
52
  response['Content-Type'] ||= json_response_content_type
53
- response.write(request.send(:convert_to_json, json_response))
53
+ response.write(_json_response_body(json_response))
54
54
  request.halt
55
55
  end
56
56
 
@@ -140,13 +140,18 @@ module Rodauth
140
140
 
141
141
  private
142
142
 
143
+ def check_csrf?
144
+ return false if use_jwt?
145
+ super
146
+ end
147
+
143
148
  def before_rodauth
144
149
  if json_request?
145
150
  if jwt_check_accept? && (accept = request.env['HTTP_ACCEPT']) && accept !~ json_accept_regexp
146
151
  response.status = 406
147
152
  json_response[json_response_error_key] = json_not_accepted_error_message
148
153
  response['Content-Type'] ||= json_response_content_type
149
- response.write(request.send(:convert_to_json, json_response))
154
+ response.write(_json_response_body(json_response))
150
155
  request.halt
151
156
  end
152
157
 
@@ -94,6 +94,7 @@ module Rodauth
94
94
  route do |r|
95
95
  verify_account_check_already_logged_in
96
96
  before_verify_account_route
97
+ @password_field_autocomplete_value = 'new-password'
97
98
 
98
99
  r.get do
99
100
  if key = param_or_nil(verify_account_key_param)
@@ -23,7 +23,7 @@ module Rodauth
23
23
  end
24
24
 
25
25
  def open_account?
26
- super || account_in_unverified_grace_period?
26
+ super || (account_in_unverified_grace_period? && has_password?)
27
27
  end
28
28
 
29
29
  def verify_account_set_password?
@@ -6,7 +6,7 @@ module Rodauth
6
6
  MAJOR = 2
7
7
 
8
8
  # The minor version of Rodauth, updated for new feature releases of Rodauth.
9
- MINOR = 0
9
+ MINOR = 1
10
10
 
11
11
  # The patch version of Rodauth, updated only for bug fixes from the last
12
12
  # feature release.
@@ -1,4 +1,4 @@
1
1
  <div class="form-group">
2
2
  <label for="password">#{rodauth.password_label}#{rodauth.input_field_label_suffix}</label>
3
- #{rodauth.input_field_string(rodauth.password_param, 'password', :type => 'password', :autocomplete=>'current-password')}
3
+ #{rodauth.input_field_string(rodauth.password_param, 'password', :type => 'password', :autocomplete=>rodauth.password_field_autocomplete_value)}
4
4
  </div>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rodauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-06 00:00:00.000000000 Z
11
+ date: 2020-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -303,6 +303,7 @@ extra_rdoc_files:
303
303
  - doc/release_notes/1.22.0.txt
304
304
  - doc/release_notes/1.23.0.txt
305
305
  - doc/release_notes/2.0.0.txt
306
+ - doc/release_notes/2.1.0.txt
306
307
  files:
307
308
  - CHANGELOG
308
309
  - MIT-LICENSE
@@ -361,6 +362,7 @@ files:
361
362
  - doc/release_notes/1.8.0.txt
362
363
  - doc/release_notes/1.9.0.txt
363
364
  - doc/release_notes/2.0.0.txt
365
+ - doc/release_notes/2.1.0.txt
364
366
  - doc/remember.rdoc
365
367
  - doc/reset_password.rdoc
366
368
  - doc/session_expiration.rdoc